Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Опыт и разработки пользователей ИРБИС :  ИРБИС Irbis
 
Формально логический контроль по нескольким признакам.
Пользователь: levaleva (IP-адрес скрыт)
Дата: 17, January, 2019 13:53

Добрый день, уважаемые коллеги!

При вводе данных на рабочем листе есть возможность проверить вводимые значения посредством проверочных форматов. К сожалению, штатная проверка RDR не покрывает изобретательность каталогизаторов.

При этом, в одном поле можно допустить сразу несколько ошибок. Но при этом, в лоб задача не решается:

if &uf('+960*0.1#',v10)=' ' then '1Уберите пробел в начале Фамилии.' else '0' fi,
if &uf('+961*0.1#',v10)=' ' then '1Уберите пробел в конце Фамилии.' else '0' fi,

Почему? Потому что 'Иванов' вернет '00', а ' Иванов ' выдаст '1Уберите пробел в начале Фамилии.1Уберите пробел в конце Фамилии.'

Что совсем не укладывается в заданный стандарт.

Задачу можно решить в лоб:

Вложенные условия, когда второе условие проверяется только если первое должно было вернуть '0'

http://irbis.gpntb.ru/file.php?24,file=18184

Но если у нас пять условий? Или механизм проверки и возвращаемое сообщения тоже сложносоставные? Код становится сложночитаемым (или вообще нечитаемым).

В основу предлагаемого решения заложены принципы разделения логики, и максимально возможная в рамках форматного языка ИРБИСА, модульность.

Для этого построим формат на переменных.

300 - входные данные,
200 - выходные данные

101,102,...,N - переменные результата отдельного условия.

Логически формат разделяется на четыре части:

Блок входных данных;
Блок проверки условий;
Блок выбора выходной строки;
Блок вывода строки.

http://irbis.gpntb.ru/file.php?24,file=18185

С первым и последним блоком всё понятно.

Третий блок сформирован так, чтобы можно было скопировать пару условий, вставить, и просто сменить номер переменной.

Во втором блоке, при увеличении количества проверок, тоже нужно скопировать-вставить строку и поменять номер соответствующей переменной.

Потом уже прописывать условие, оперируя переменной 300 (Полезно, в случае схожих применений, например для полей 11 и 12 логично использовать этот формат с минимальной правкой.

Но самое интересное, это добавление дополнительных условий к существующим ФЛК-форматам.

http://irbis.gpntb.ru/file.php?24,file=18186

Вставляем в шаблон исходный формат 21 поля, для идентичности исходному, заворачиваем вывод в переменную 101, и добавляем рядом свои.

Если предположить, что дополнительные условия вносятся через вложенные if, то не допустить ошибку и понять в дальнейшем чтоже пошло не так, будет в разы сложнее.

P.S. Шаблон в текстовом виде:

&uf('+7W300#',v10),
&uf('+7W200#','0'),

if &uf('+960*0.1#',&uf('+7R300'))=' ' then &uf('+7W101#','1Уберите пробел в начале Фамилии.') else &uf('+7W101#','0') fi,
if &uf('+961*0.1#',&uf('+7R300'))=' ' then &uf('+7W102#','1Уберите пробел в конце Фамилии.') else &uf('+7W102#','0') fi,


if &uf('+960*0.1#',&uf('+7R101'))='1' then 
     &uf('+7W200#',&uf('+7R101')) fi,
if &uf('+960*0.1#',&uf('+7R101')) ='2' and &uf('+960*0.1#'&uf('+7R200')) <>'1' then &uf('+7W200#',     
                   &uf('+7R101')) fi  

if &uf('+960*0.1#',&uf('+7R102'))='1' then 
     &uf('+7W200#',&uf('+7R102')) fi,
if &uf('+960*0.1#',&uf('+7R102')) ='2' and &uf('+960*0.1#'&uf('+7R200')) <>'1' then &uf('+7W200#',     
                   &uf('+7R102')) else fi  


&uf('+7R200')



Редактировано 1 раз. Последний раз 17.01.2019 13:55 пользователем levaleva.

Вложения: Снимок1.PNG (5.4KB)   Снимок2.PNG (24.4KB)   Снимок3.PNG (36.5KB)  


Извините, только зарегистрированные пользователи могут писать в этом форуме.
This forum powered by Phorum.