Коллеги, помогите пожалуйста необходима корректировка которая копирует экземпляры с коллекциями из 910 поля в 317. И вроде не сложно, но у некоторых записей 317 поле уже может быть заполнено, например дарственные надписи и т.п.
Ниже ГК которой я пытаюсь это делать, но она в случае существующего значения 317 поля при каждом сохранении будет добавлять повторение поля... Нам необходимо чтобы эта ГК была в autoin.gbl/
0
IF
if v317^A<>'' then '1' else '0' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
317
XXXXXXXXXXXXXXXXXXX
(if (v317^!=v910^b and v317^A<>v910^q) then '^A'v910^q,'^!'v910^b fi/)
XXXXXXXXXXXXXXXXXXX
FI
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
IF
if v317^A='' then '1' else '0' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
317
XXXXXXXXXXXXXXXXXXX
(if p(v910) then if v910^q<>'' and v910^b<>'' then '^A'v910^q,'^!'v910^b fi fi/)
XXXXXXXXXXXXXXXXXXX
FI
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
Редактировано 1 раз. Последний раз 08.04.2019 15:46 пользователем gavrikov.
ADD
317
XXXXXXXXXXXXXXXXXXX
&uf('+7w1#'(if p(v317) then'!'v317^!'!' fi)), (if p(v910) then if v910^q<>'' then if &uf('ag1#1'): s('!'v910^b'!') then else '^A'v910^q,'^!'v910^b fi fi fi/)
XXXXXXXXXXXXXXXXXXX
Редактировано 2 раз. Последний раз 08.04.2019 18:30 пользователем Gena.
Не срабатывает в случае если в 317 уже есть запись, например дарственная, то коллекция не заносится потому что инвентарный номер один...
То есть если в поле 317 есть:
^AДарственная надпись...^!Р-7891
то должно получиться:
^AДарственная надпись...^!Р-7891
^AАвторефераты^!Р-7891
^AАвторефераты^!Р-7933
Подскажите что делает конструкция &uf('ag1#1'):s('!'v910^b'!') и где про это почитать?
gavrikov написал(а):
-------------------------------------------------------
> Не срабатывает в случае если в 317 уже есть
> запись, например дарственная, то коллекция не
> заносится потому что инвентарный номер один...
>
Это потому, что я не понял задачи и специально сделал проверку - если в 317 уже есть такой инв номер, то ничего не делать.Тогда вот такой вариант
Тогда да, чуть хитрее надо сделать. Хороший вариант:
1. Создать новое поле 1910, скопировать в него все 910 поля с коллекциями
2. Сделать цикл UNTIL, в котором:
2.1. первое повторение поля 1910 сравнивается со всеми повторениями 317. Если в 317 нет совпадения по названию коллекции и инв. номеру, то добавляется новое повторение 317
2.2. удаляется первое повторение поля 1910
> То есть если в поле 317 есть:
> ^AДарственная надпись...^!Р-7891
> то должно получиться:
> ^AДарственная надпись...^!Р-7891
> ^AАвторефераты^!Р-7891
> ^AАвторефераты^!Р-7933
>
> Подскажите что делает конструкция
> &uf('ag1#1'):s('!'v910^b'!') и где про это
> почитать?
Это просто проверка на вхождение текста '!'v910^b'!' в переменную &uf('ag1#1'). Я в нее в начале все инв.номера из 317 записал
Вы у себя сделали новое поле 1910? Это поле, наверняка, используется в какой-то ГК, как промежуточное, а промежуточные поля в конце ГК всегда удаляются.
Спасибо большое! Автоввод оказался виноват :) Подскажите, где можно подробнее про UNTIL почитать и примеры посмотреть? Как-то мало про него совсем информации.
Здравствуйте.
Возникла проблема при глобальной корректировке.
Необходимо чтобы после заполнения 910 поля автоматически дублировалась информация в 317 поле (это инвентарный номер и название коллекции).
Если первый раз проводить глобальную корректировку, то всё хорошо.
А если провести корректировку еще раз, то дублируется (например) два повторения, кроме первого.
Вы очень сложно написали формат в операторе ADD. Вы думаете, что повторяющаяся группа по полю 337? По-моему, не так. Если в группе есть v337 и v1910, то одно из них, не то по которому группа, д.б. &uf('Av...
Упростите, сделайте сначала разбор на элементы по &uf('1,,,. А потом добавляйте в поле 337, но сначала делайте проверку, обычно мы делаем так:
ADD
337
if rsum((if p(v337) then if &uf('Av1910^q#1')<>'' and v317^!<>&uf('Av1910^b#1') then '1,' fi fi/))>0 then 'добавляемое поле' fi
Не совсем точно я написала. Например, если надо что-то добавить в поле 337 при условии, что еще нет повторения, в котором v317^! = v1910^g, то:
ADD
337
if rsum((if p(v337) then if &uf('Av1910^q#1')<>'' and &uf('+97',v317^!)=&uf('+97',&uf('Av1910^g#1')) then '1,' fi fi/))=0 then 'добавляемое поле' fi
Попробовала. Из положительного, не дублируются поля.
Но получается что-то странное.
ADD
317
XXXXXXXXXXXXXXXXXXX
if rsum((if p(v317) then if &uf('Av1910^q#1')<>'' and &uf('+97',v317^!)=&uf('+97',&uf('Av1910^b#1')) then '1' fi fi/))=0 then if p(v1910^q) and v317^!<>v1910^b then '^A'&uf(|Kcoll.mnu!|v1910^q),'^!'v1910^b fi fi
XXXXXXXXXXXXXXXXXXX
if rsum(
(if p(v317)
then
if &uf('Av1910^q#1')<>'' and &uf('+97',v317^!)=&uf('+97',&uf('Av1910^b#1'))
then
'1'
fi
fi/))=0
then
/* зачем вы повторяете эту проверку???????????????
if p(v1910^q) and v317^!<>v1910^b
then
/* ???? если в поле ^A ничего не формируется, то по справочнику ничего не нашлось
/* ???? что в поле v1910? - одно повторение или несколько? Впечатление, что несколько, они все и выводятся
'^A'&uf(|Kcoll.mnu!|v1910^q),'^!'v1910^b
fi
fi
Т.е. главное - что у вас в поле 1910 - несколько повторений или одно?
Нам необходимо из поля 910 перенести в поле 317 повторения, в которых обозначается коллекция и инвентарный номер.
В данной записи 16 повторений и 3 из них имеют коллекцию.
Проблема у нас состояла в том, что при сохранении записи постоянно дублировались поля в 317 поле (как на картинке). Должно быть 3 повторения, но с каждым сохранением записи появлялось +2 сохранения.
Я так поняла, что повторения поля 910 вы кладете в поле 1910 и делаете цикл по повторениям поля 1910 REPEAT-UNTIL. Так? Тогда во всех форматах надо писать не v1910, а &uf('Av1910#1')
Да, всё так.
Попробовали, но к сожалению результат тот же.
ADD
1910
XXXXXXXXXXXXXXXXXXX
(if p(v910) then v910 fi/)
XXXXXXXXXXXXXXXXXXX
REPEAT
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
317
XXXXXXXXXXXXXXXXXXX
if p(v1910^q) then (if &uf('1*R; ?@',&uf('Av1910#1'))<>'' then if p(v317) then if v317^!:&uf('Av1910^b#1') then '^A'&uf('Av1910^q#1'),'^!'&uf('Av1910^b#1') fi else '^A'&uf('Av1910^q#1'),'^!'&uf('Av1910^b#1') fi else break fi/) fi
XXXXXXXXXXXXXXXXXXX
PUTLOG
&uf('+97',v317^!),'--',(if &uf('+97',v317^!):&uf('Av1910^b#1') then 'ok' fi),'--',&uf('Av1910^b#1'),'---'
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1910
1
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
UNTIL
if p(v1910) then '1' else '0' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
Подправила ваше задание. Добавляет 317 только для тех инвентарей 910 с коллекцией, которых нет в 317.
ADD
1910
XXXXXXXXXXXXXXXXXXX
(if p(v910) then if v910^q<>'' then v910 fi fi/)
XXXXXXXXXXXXXXXXXXX
REPEAT
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
317
XXXXXXXXXXXXXXXXXXX
if rsum((if p(v317) then if &uf('+97',v317^!)=&uf('+97',&uf('Av1910^b#1')) then '1' fi fi/))=0 then '^A'&uf('Av1910^q#1'),'^!'&uf('Av1910^b#1') fi
XXXXXXXXXXXXXXXXXXX
PUTLOG
&uf('+97',v317^!),'--',(if &uf('+97',v317^!):&uf('Av1910^b#1') then 'ok' fi),'--',&uf('Av1910^b#1'),'---'
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1910
1
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
UNTIL
if p(v1910) then '1' else '0' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
Спасибо, всё работает.
Добавили только расшифровку коллекций.
Итог:
ADD
1910
XXXXXXXXXXXXXXXXXXX
(if p(v910) then if v910^q<>'' then v910 fi fi/)
XXXXXXXXXXXXXXXXXXX
REPEAT
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
ADD
317
XXXXXXXXXXXXXXXXXXX
if rsum((if p(v317) then if &uf('+97',v317^!)=&uf('+97',&uf('Av1910^b#1')) then '1' fi fi/))=0 then '^A'&uf('Kcoll.mnu!'&uf('Av1910^q#1')),'^!'&uf('Av1910^b#1') fi
XXXXXXXXXXXXXXXXXXX
PUTLOG
&uf('+97',v317^!),'--',(if &uf('+97',v317^!):&uf('Av1910^b#1') then 'ok' fi),'--',&uf('Av1910^b#1'),'---'
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
DEL
1910
1
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
UNTIL
if p(v1910) then '1' else '0' fi
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXX