Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Общие вопросы Ирбис64 :  ИРБИС Irbis
 
Оператор REP глобальной корректировки
Пользователь: artgonch (IP-адрес скрыт)
Дата: 29, January, 2014 03:52

Здравствуйте.

Понадобилось мне написать дополнение к сценарию автовввода, который модифицирует поле 910. Но модифицирует хитрым образом. Я написал формат и протестировал его в редакторе форматов. Вот сам сценарий:
if p(v910) then 
     (
          if p(v910) and v910:'^G' then // подполе G для временного хранения радиометки
               if v910:'^DФ4' then // Если место хранения совпадает с заданным, то перенести статус, дату, место хранения, цену, номер КСУ и номер акта выбытия.
                    |^A|v910^a, |^C|v910^c, |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v, if v910:'^B' then |^B|v910^b, |^H|v910^g else |^B|v910^h, |^H|v910^g fi 
               else
                    v910 // Если место хранения не совпадает с заданным, то просто заменить полем им самим
               fi
          fi/ 
     )
fi

Сценарий проверяет наличие подполей ^B и ^H и, в зависимости от этого, выполняет замену или перенос ^H на место ^B и ^G на место ^H. А само временное подполе ^G должно быть опустошено (т.е. просто не попадает в вывод оператора).

На тестовом примере в редакторе форматов этот сценарий показал себя хорошо. Но вот я добавил его в сценарий autoin.gbl, и там никакого эффекта работы этого оператора я не заметил. Вот сам оператор:
REP
910
F
if p(v910) then (if p(v910) and v910:'^G' then if v910:'^DФ4' then |^A|v910^a, |^C|v910^c, |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v, if v910:'^B' then |^B|v910^b, |^H|v910^g else |^B|v910^h, |^H|v910^g fi else v910 fi fi/) fi
XXXXXXXXXXXXXXXXXXX

Эффекта нет даже, если я выношу этот оператор в отдельный файл и пытаюсь скорректировать, например, одну запись с помощью команды Глобальная корректировка.

Что я делаю неправильно?



Редактировано 2 раз. Последний раз 29.01.2014 03:58 пользователем artgonch.

Re: Оператор REP глобальной корректировки
Пользователь: Сорокина Лариса (IP-адрес скрыт)
Дата: 29, January, 2014 10:01

artgonch написал(а):
-------------------------------------------------------
> На тестовом примере в редакторе форматов этот
> сценарий показал себя хорошо. Но вот я добавил его
> в сценарий autoin.gbl, и там никакого эффекта
> работы этого оператора я не заметил. Вот сам
> оператор:
>
> REP
> 910
> F
> if p(v910) then (if p(v910) and v910:'^G' then if
> v910:'^DФ4' then |^A|v910^a, |^C|v910^c,
> |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v, if
> v910:'^B' then |^B|v910^b, |^H|v910^g else
> |^B|v910^h, |^H|v910^g fi else v910 fi fi/) fi
> XXXXXXXXXXXXXXXXXXX
>
>
> Эффекта нет даже, если я выношу этот оператор в
> отдельный файл и пытаюсь скорректировать,
> например, одну запись с помощью команды Глобальная
> корректировка.
>
> Что я делаю неправильно?


Странно, что Вы не видите эффекта. Если 910^G присутствует хотя бы в одном повторении (не в первом),то первое повторение 910 должно быть подпорчено этой корректировкой. REP по методу F требует совпадения по количеству корректируемых и корректирующих строк. А у Вас корректирующие строки формируются только из повторений 910, содержащих 910^G. По-моему, правильно так:
if p(v910) then (if p(v910) then if v910:'^G' then if v910:'^DÔ4' then |^A|v910^a, |^C|v910^c, |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v, if v910:'^B' then |^B|v910^b, |^H|v910^g else |^B|v910^h, |^H|v910^g fi else v910 fi else v910 fi fi/) fi

Re: Оператор REP глобальной корректировки
Пользователь: artgonch (IP-адрес скрыт)
Дата: 29, January, 2014 10:06

Спасибо, вы правы. Но ошибка была не в этом. При копировании текста из Редактора форматов в редактор, в котором я писал сценарий корректировки, кириллический символ Ф4 был скопирован с искажением. Отсюда и отсутствие эффекта в тестовом примере. А я сразу сослепу и не заметил.

Ваше замечание тоже учту.

Сорокина Лариса написал(а):
-------------------------------------------------------
> artgonch написал(а):
> --------------------------------------------------
> -----
> > На тестовом примере в редакторе форматов этот
> > сценарий показал себя хорошо. Но вот я добавил
> его
> > в сценарий autoin.gbl, и там никакого эффекта
> > работы этого оператора я не заметил. Вот сам
> > оператор:
> >
> > REP
> > 910
> > F
> > if p(v910) then (if p(v910) and v910:'^G' then
> if
> > v910:'^DФ4' then |^A|v910^a, |^C|v910^c,
> > |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v,
> if
> > v910:'^B' then |^B|v910^b, |^H|v910^g else
> > |^B|v910^h, |^H|v910^g fi else v910 fi fi/) fi
> > XXXXXXXXXXXXXXXXXXX
> >
> >
> > Эффекта нет даже, если я выношу этот оператор в
> > отдельный файл и пытаюсь скорректировать,
> > например, одну запись с помощью команды
> Глобальная
> > корректировка.
> >
> > Что я делаю неправильно?
>
>
> Странно, что Вы не видите эффекта. Если 910^G
> присутствует хотя бы в одном повторении (не в
> первом),то первое повторение 910 должно быть
> подпорчено этой корректировкой. REP по методу F
> требует совпадения по количеству корректируемых и
> корректирующих строк. А у Вас корректирующие
> строки формируются только из повторений 910,
> содержащих 910^G. По-моему, правильно так:
> if p(v910) then (if p(v910) then if v910:'^G' then
> if v910:'^DÔ4' then |^A|v910^a, |^C|v910^c,
> |^D|v910^d, |^E|v910^e, |^U|v910^u, |^V|v910^v, if
> v910:'^B' then |^B|v910^b, |^H|v910^g else
> |^B|v910^h, |^H|v910^g fi else v910 fi else v910
> fi fi/) fi



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