Ассоциация ЭБНИТ    ИРБИС-корпорация    Вики-Ирбис    Online/CHM справка Ирбис   
АРМ Администратор :  ИРБИС Irbis
 
CORRECT
Пользователь: Gena (IP-адрес скрыт)
Дата: 15, August, 2008 11:32

Добрый день! Составляю глобальную корректировку и столкнулся с такой проблемой: необходимо из записи получить информацию и передать в другую, в которой и происходит корректировка, а это не получается. Это обработка базы данных ВУЗ - у нас потерялись некоторые строки 83 и я их востанавливаю в записях DISC из записей DUNIKИ. Использую оператор CORRECT, получается такой синтаксис:

CORREC
if v920:'DUNIK' then '*' else '' fi
|^w|v97,|^c|v92^c,|^a|v93,|^o|v98,|^f|v95
'IDD='v3^0

Проблема в том, что по этому оператору отсылка происходит только к трем mfn в базе, причем на них ссылаются из всех других записей, какой бы не был у этих записей IDD=. Хотя если смотреть по словарю, то у всех стоит разный IDD=. Можете подсказать что тут не правильно?

Re: CORRECT
Пользователь: ochagova (IP-адрес скрыт)
Дата: 15, August, 2008 12:01

Написано правильно. Непонятно, правда, зачем брать повт. усл. конст. для неповторяющихся полей. Но все записи DISC должны находиться и данные в них передаваться. Может дело в теле CORREC, не всегда происходит корректировка? Вы проверьте все-таки, попадаете ли в DISC. Например, уберите оператор DEL 1001 (в CORREC), отберите p(v1001) и посморите сколько DISC и что в них.

Re: CORRECT
Пользователь: Gena (IP-адрес скрыт)
Дата: 15, August, 2008 13:20

ochagova написал(а):
-------------------------------------------------------
> Непонятно, правда, зачем брать
> повт. усл. конст. для неповторяющихся полей.

Не совсем понял это. Можете пояснить?

> Может дело в теле CORREC, не всегда
> происходит корректировка? Вы проверьте все-таки,
> попадаете ли в DISC. Например, уберите оператор
> DEL 1001 (в CORREC), отберите p(v1001) и посморите
> сколько DISC и что в них.

Проверил, получается, что перелистывая всю базу, он загоянет данные только в три записи DISC, а все остальные - игнорирует. Проверил отбором 1001 поля.

Re: CORRECT
Пользователь: ochagova (IP-адрес скрыт)
Дата: 15, August, 2008 17:18

Тогда сделайте такую вещь:

1. В БД VUZ в словаре вид документа отберите записи DUNIK
2. В последовательном поиске - возьмите этот запрос как уточняемый и на него наложите последовательный запрос:
val(&uf('JVUZ,IDD=',v3^0))>0
Он вам посчитает кол-во DUNIK которые по вашему термину должны найти свои записи DISC. Может у вас это и будет 3?

Re: CORRECT
Пользователь: Gena (IP-адрес скрыт)
Дата: 15, August, 2008 18:56

Странно. Уже не знал как выкрутится и соорудил совершенно потрясающую конструкцию для оператора CORREC:

создал новый словарь, в который бросались MFN записей DISC и назвал его MFNV,а в операторе собрал такое:

'MFNV='&unifor('dvuz,/idd=',v3^0,'/,mfn')

так самое странно в том, что оно заработало. Чувствую себя не программистом, а шаманом.

Re: CORRECT
Пользователь: ochagova (IP-адрес скрыт)
Дата: 18, August, 2008 10:16

Возможно, пересоздать словарь надо было с самого начала.



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