Re: !903.pft
Пользователь:
PRM (IP-адрес скрыт)
Дата: 04, March, 2009 11:18
Добрый день!
Как оказалось, ошибка в формате DATAI\CMPL\!903.pft связана с проверкой значений, возвращаемых функцией L. (Пример правильной проверки отрицательных значений, возвращаемых функцией L, - в ФЛК DATAI\IBIS\!903.pft).
Неправильно проверять: (l("I="v903))=0 or (l("I="v903))=-1.
Правильно проверять: (l("I="v903))<=0.
Предлагаем изменить формат DATAI\CMPL\!903.pft на такой:
if p(v903) then if (l("I="v903)<=0 or val(ref(l("I="v903),mfn))=val(mfn)) then '0' else '1 Ошибка: Дублетный Шифр 'v903,ref(l("I="v903),' (см. N ',f(val(mfn),0,0)')') fi else if v920:'OJK' then '1 Ошибка: Отсутствует Шифр 'fi fi
В данном формате (по сравнению с исходным):
- исправлена проверка возвращаемых функцией L значений;
- добавлена скобка "(" сразу после if, закрывающая скобка ")" перед then;
- добавлены пробелы перед else;
- убраны лишние скобки, обрамляющие функцию l.
Вопрос: существует ли документация на функцию L, где отражены все возвращаемые данной функцией значения? В общем описании системы ИРБИС64 (старая версия, не версия 2008 с открытого ftp ГПНТБ России) указано (цитирую):
"Функция L использует текст, полученный в результате вычисления аргумента, в качестве термина доступа для инвертированного файла и возвращает MFN первой ссылки на этот термин, если она есть. Перед поиском в инвертированном файле термин автоматически переводится в прописные буквы. Если термин не найден, то функция принимает значение ноль. Функция L обычно используется вместе с функцией REF (примеры использования функции L можно найти в п. 8.2.2)."
Спасибо.
Примечание: для воспроизведения ошибки исходного формата следует зайти в АРМ "Каталогизатор", выбрать базу данных CMPL, откорректировать поле 903 любого документа (где есть шифр в поле 903) следующим образом: дописать в конец шифра символ подчёркивания (например), сохранить запись. После сохранения записи снова откорректировать поле 903 данного документа: стереть символ подчёркивания; попытаться сохранить запись. На экране появится ошибка "Ошибка: Дублетный Шифр"...
Приложение: полный список файлов дистрибутива ИРБИС64 2007.2 формата *.pft, в тексте которых встречается "=-1" (для проверки возвращаемого функцией L значения).
\Datai\CMPL\!800.PFT, \Datai\CMPL\!81.PFT, \Datai\CMPL\!86.PFT, \Datai\CMPL\!88.PFT, \Datai\CMPL\!888.PFT, \Datai\CMPL\!889.PFT, \Datai\CMPL\!89.PFT, \Datai\CMPL\!903.PFT, \Datai\CMPL\800.PFT, \Datai\RDR\!24.PFT
Редактировано 3 раз. Последний раз 04.03.2009 13:53 пользователем PRM.