Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Каталогизатор :  ИРБИС Irbis
 
Глобальная корректировка 910 в 317
Пользователь: gavrikov (IP-адрес скрыт)
Дата: 08, April, 2019 15:45

Коллеги, помогите пожалуйста необходима корректировка которая копирует экземпляры с коллекциями из 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.

Re: Глобальная корректировка 910 в 317
Пользователь: Gena (IP-адрес скрыт)
Дата: 08, April, 2019 18:29

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.

Re: Глобальная корректировка 910 в 317
Пользователь: gavrikov (IP-адрес скрыт)
Дата: 09, April, 2019 07:13

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

То есть если в поле 317 есть:
^AДарственная надпись...^!Р-7891
то должно получиться:
^AДарственная надпись...^!Р-7891
^AАвторефераты^!Р-7891
^AАвторефераты^!Р-7933

Подскажите что делает конструкция &uf('ag1#1'):s('!'v910^b'!') и где про это почитать?

Re: Глобальная корректировка 910 в 317
Пользователь: Gena (IP-адрес скрыт)
Дата: 09, April, 2019 08:01

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 записал

Re: Глобальная корректировка 910 в 317
Пользователь: gavrikov (IP-адрес скрыт)
Дата: 10, April, 2019 12:26

Подскажите, что надо сделать чтобы ГК во вновь созданное 1910 поле вносила изменения? Запускаю любую ГК и изменений в поле 1910 не происходят...

Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 11, April, 2019 11:28

Вы у себя сделали новое поле 1910? Это поле, наверняка, используется в какой-то ГК, как промежуточное, а промежуточные поля в конце ГК всегда удаляются.

Re: Глобальная корректировка 910 в 317
Пользователь: gavrikov (IP-адрес скрыт)
Дата: 12, April, 2019 07:34

их содержимое удаляется автоматически? то есть даже после такой простой ГК:
0
ADD
1910
XXXXXXXXXXXXXXXXXXX
'test'
XXXXXXXXXXXXXXXXXXX

Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 12, April, 2019 08:57

А вы помните об автовводе? Попробуйте при выполнении ГК отключить автоввод

Re: Глобальная корректировка 910 в 317
Пользователь: gavrikov (IP-адрес скрыт)
Дата: 12, April, 2019 11:17

Спасибо большое! Автоввод оказался виноват :) Подскажите, где можно подробнее про UNTIL почитать и примеры посмотреть? Как-то мало про него совсем информации.

Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 12, April, 2019 13:05

Только в общем описании -приложение 7. Но там очень кратко, т.к. непонятно какие м.б. проблемы? Главное - условие выхода из цикла.

Re: Глобальная корректировка 910 в 317
Пользователь: galb (IP-адрес скрыт)
Дата: 10, March, 2022 15:43

Здравствуйте.
Возникла проблема при глобальной корректировке.
Необходимо чтобы после заполнения 910 поля автоматически дублировалась информация в 317 поле (это инвентарный номер и название коллекции).
Если первый раз проводить глобальную корректировку, то всё хорошо.
А если провести корректировку еще раз, то дублируется (например) два повторения, кроме первого.

Вложения: 1.jpg (259.1KB)   2.jpg (101.1KB)   until_1.gbl (637 bytes)  
Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 11, March, 2022 10:24

Вы очень сложно написали формат в операторе 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

Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 13, March, 2022 10:54

Не совсем точно я написала. Например, если надо что-то добавить в поле 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

Re: Глобальная корректировка 910 в 317
Пользователь: galb (IP-адрес скрыт)
Дата: 14, March, 2022 10:38

Попробовала. Из положительного, не дублируются поля.
Но получается что-то странное.

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

Вложения: результат.jpg (105.6KB)  
Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 14, March, 2022 14:14

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 - несколько повторений или одно?

Re: Глобальная корректировка 910 в 317
Пользователь: galb (IP-адрес скрыт)
Дата: 14, March, 2022 14:24

Нам необходимо из поля 910 перенести в поле 317 повторения, в которых обозначается коллекция и инвентарный номер.
В данной записи 16 повторений и 3 из них имеют коллекцию.
Проблема у нас состояла в том, что при сохранении записи постоянно дублировались поля в 317 поле (как на картинке). Должно быть 3 повторения, но с каждым сохранением записи появлялось +2 сохранения.

Вложения: 2.jpg (101.1KB)  
Re: Глобальная корректировка 910 в 317
Пользователь: ochagova (IP-адрес скрыт)
Дата: 15, March, 2022 10:20

Я так поняла, что повторения поля 910 вы кладете в поле 1910 и делаете цикл по повторениям поля 1910 REPEAT-UNTIL. Так? Тогда во всех форматах надо писать не v1910, а &uf('Av1910#1')

Re: Глобальная корректировка 910 в 317
Пользователь: galb (IP-адрес скрыт)
Дата: 16, March, 2022 14:13

Да, всё так.
Попробовали, но к сожалению результат тот же.

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

Re: Глобальная корректировка 910 в 317
Пользователь: Сорокина Лариса (IP-адрес скрыт)
Дата: 16, March, 2022 16:18

Подправила ваше задание. Добавляет 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

Re: Глобальная корректировка 910 в 317
Пользователь: galb (IP-адрес скрыт)
Дата: 17, March, 2022 09:43

Спасибо, всё работает.
Добавили только расшифровку коллекций.

Итог:

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



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