Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
Задачки для любознательных :  ИРБИС Irbis
 
Перенос статусов экземпляров в другую БД
Пользователь: akovalev (IP-адрес скрыт)
Дата: 01, December, 2020 13:57

Здравствуйте, коллеги!

Исторически ведется несколько баз ЭК: база комплектования, полный информационный каталог, базы, с которых ведется книговыдача. Возникает проблема со списанием, чтобы одновременно списывать экземпляры во всех каталогах.

На данный момент возникла идея следующего алгоритма -
списание через комплектатор в базе комплектования;
экспорт во временную базу записей с данной КСУ выбытия;
чистка временной базы от экземпляров, которые не относятся к этой КСУ выбытия;
глобальная корректировка по временной базе, которая находит соответствующие экземпляры в базе, в которой надо провести списание, и списывает их.
Ситуация осложняется тем, что на старых записях велся не совсем корректный инвентарный учет - может быть несколько экземпляров с одним и тем же инвентарем, записанные со статусами 0/1. Соответственно, глобальная это учитывает - должна выбирать для списания первый экземпляр, соответствующий условиям.

Глобальная выдает ошибки:
БД - TST: MFN 1 (Ошибка глобальной: FORMAT_ERROR=26-&uf('+7W1)
БД - TST: MFN 2 (Ошибка формата: 26-!if &uf('+7R2')=0 then &uf('+7R200'),': Запис..., индекс оператора 33)
БД - TST: MFN 3 (Ошибка формата: 26-!if &uf('+7R2')=0 then &uf('+7R200'),': Запис..., индекс оператора 33)
Откорректировано записей 0

Помогите, пожалуйста.



Редактировано 1 раз. Последний раз 01.12.2020 14:00 пользователем akovalev.

Вложения: out2.gbl (1.4KB)  
Re: Перенос статусов экземпляров в другую БД
Пользователь: Gena (IP-адрес скрыт)
Дата: 02, December, 2020 10:20

Вот эту ошибку:

БД - TST: MFN 1 (Ошибка глобальной: FORMAT_ERROR=26-&uf('+7W1)

Вы, как я понял, уже исправили. Она была связана с незакрытой одиночной кавычкой. Сейчас в приложенной глобалке нет такого фрагмента


Вот этак ошибка:

БД - TST: MFN 2 (Ошибка формата: 26-!if &uf('+7R2')=0 then &uf('+7R200'),': Запис..., индекс оператора 33)

находится вот в этом фрагменте:

if &uf('+7R2')=0 then &uf('+7R200'),': Запись не найдена' fi

и связана с различием типов сравниваемых данных. Юнифоры возвращают текст, а вы сравниваете его с числом. Вам нужно или число обернуть кавычками, или результат расформатирования юниформа обернуть функцией преобразования текста в число

Re: Перенос статусов экземпляров в другую БД
Пользователь: akovalev (IP-адрес скрыт)
Дата: 02, December, 2020 13:35

По второй ошибке, действительно дело было в этом. Исправил на &uf('+7R2')='0' и ошибка ушла.

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

Re: Перенос статусов экземпляров в другую БД
Пользователь: Gena (IP-адрес скрыт)
Дата: 02, December, 2020 16:18

в строке 20 есть еще вот такой кусок
if &uf('+7R1')=0 then
В нем тоже сравнивается текст и число

Re: Перенос статусов экземпляров в другую БД
Пользователь: akovalev (IP-адрес скрыт)
Дата: 02, December, 2020 17:08

И в правду. Ошибка больше не выдается.
Спасибо большое.

Re: Перенос статусов экземпляров в другую БД
Пользователь: akovalev (IP-адрес скрыт)
Дата: 04, December, 2020 18:24

Отловил еще ошибку, связанную со сравнением повторяющегося поля с неповторяющимся:

REP
910
F
&uf('+7W1#0'), (if p(v910) then if v910^b=&uf('Av1001^b#1') and v910^d=&uf('Av1001^d#1') and '015':v910^a then if &uf('Av1001^x#1')<>'' then if &uf('Av1001^x#1')=v910^a then if &uf('+7R1,1')='0' then &uf('+7W1#1'),&uf('Av1001#1') else v910 fi else v910 fi else if &uf('+7R1,1')='0' then &uf('+7W1#1'),&uf('Av1001#1') else v910 fi fi else v910 fi fi /)
XXXXXXXXXXXXXXXXXXXXXXX

В редакторе форматов все отрабатывает правильно, но глобальная на записи с большим количеством повторений и дублетных инвентарей все равно "списывает" лишние экземпляры.

Re: Перенос статусов экземпляров в другую БД
Пользователь: ochagova (IP-адрес скрыт)
Дата: 11, December, 2020 11:55

Может списание "лишних" происходит от поля 1001? Может вы генерируете повторения 1001 для дублетных экземпляров? Это же все в REPEAT по полю 1001? Выведите значения 1001 перед repeat.

Re: Перенос статусов экземпляров в другую БД
Пользователь: akovalev (IP-адрес скрыт)
Дата: 21, December, 2020 14:27

В итоге несколько модифицировал эту глобальную корректировку. Сделал через проверку количества ссылок для инвентарных номеров. Сейчас работает корректно.

Всем спасибо!



Редактировано 1 раз. Последний раз 21.12.2020 14:28 пользователем akovalev.

Вложения: out2.gbl (1.9KB)  


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