Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Комплектатор :  ИРБИС Irbis
 
!903.pft
Пользователь: PRM (IP-адрес скрыт)
Дата: 03, March, 2009 11:56

Уважаемые коллеги!

В ИРБИС64-7.2D8 в формате DATAI\CMPL\!903.pft пропущена закрывающая скобка после "=val(mfn)" (фрагмент выделен цветом):

if p(v903) then if (l("I="v903))=0 or (l("I="v903))=-1 or val(ref(l("I="v903),mfn))=val(mfn) then '0'else '1 Ошибка: Дублетный Шифр 'v903 fi else if v920:'OJK'then'1 Ошибка: Отсутствует Шифр 'fi fi

Должно быть:

if p(v903) then if (l("I="v903))=0 or (l("I="v903))=-1 or val(ref(l("I="v903),mfn))=val(mfn)) then '0'else '1 Ошибка: Дублетный Шифр 'v903 fi else if v920:'OJK'then'1 Ошибка: Отсутствует Шифр 'fi fi



Редактировано 1 раз. Последний раз 03.03.2009 11:59 пользователем PRM.

Re: !903.pft
Пользователь: Сорокина Лариса (IP-адрес скрыт)
Дата: 03, March, 2009 15:20

PRM написал(а):
-------------------------------------------------------
> Уважаемые коллеги!
>
> В ИРБИС64-7.2D8 в формате DATAI\CMPL\!903.pft
> пропущена закрывающая скобка после "=val(mfn)"
> (фрагмент выделен цветом):
>
> if p(v903) then if (l("I="v903))=0 or
> (l("I="v903))=-1 or
> val(ref(l("I="v903),mfn))=val(mfn) then '0'else '1
> Ошибка: Дублетный Шифр 'v903 fi else if
> v920:'OJK'then'1 Ошибка: Отсутствует Шифр 'fi fi
>
> Должно быть:
>
> if p(v903) then if (l("I="v903))=0 or
> (l("I="v903))=-1 or
> val(ref(l("I="v903),mfn))=val(mfn)) then '0'else
> '1 Ошибка: Дублетный Шифр 'v903 fi else if
> v920:'OJK'then'1 Ошибка: Отсутствует Шифр 'fi fi

В D8 для 7.2 не было формата !903.pft. Тот формат, который Вы привели как ошибочный, работает с 2000 года и ошибки не дает.

Re: !903.pft
Пользователь: PRM (IP-адрес скрыт)
Дата: 03, March, 2009 18:32

Извините, пожалуйста. Формат, который я привёл как правильный, конечно же, даёт ошибку (** Format Error 8 - Команда IF без THEN. **)!

При чтении исходного формата !903.pft посчитал, что если после if стоит скобка "(", то должна быть и соответствующая закрывающая скобка ")" непосредственно перед then (а !903.pft полностью не дочитал).

А в нашем случае добавление ")" в формат ещё и "исправило" ошибку "Ошибка: Дублетный Шифр" при контроле данных в поле. Продолжу поиск истинных причин ошибки завтра (в текущем словаре базы данных для вида поиска "Шифр документа" нет документов с термином - шифром, который вводится в поле и приводит к ошибке "Ошибка: Дублетный Шифр").

(Конечно же, следует тестировать (и редактировать) форматы в GenPFT64. А вместо "ИРБИС64-7.2D8" следовало написать "ИРБИС64-7.2 с обновлением D8").

Спасибо.



Редактировано 2 раз. Последний раз 03.03.2009 19:57 пользователем PRM.

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.

Re: !903.pft
Пользователь: PRM (IP-адрес скрыт)
Дата: 05, May, 2009 14:00

Ошибки исправлены в обновлении D2 к ИРБИС64 2008.1.

Спасибо!

Цитата из IRBIS64_81D2.doc:
...
CMPL
1. !81.PFT, !86.PFT, !88.PFT, !888.PFT, !889.PFT, !89.PFT, !903.PFT, 800.PFT – исправлена ошибка, связанная с проверкой значения функции L.
...
RDR
1. !24.PFT – исправлена ошибка, связанная с проверкой значения функции L.
...

Вопрос: а обновленного формата \Datai\CMPL\800.PFT в IRBIS64_81D2.zip почему-то нет? Сейчас используется формат \Datai\CMPL\800.PFT от 14 февраля 2003 г., 15:32:28, размер файла 1031 байт.

Кроме того, в 800.PFT (по всему формату) отсутствуют буквы "я" в словах: хранения, списания, выбытия и т. д.



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