Re: Режим слияния записей
Пользователь:
Кирилл Соколинский (СЗТУ) (IP-адрес скрыт)
Дата: 24, December, 2006 21:11
ИТОГИ
Я ошибался, утверждая, что слияние с одновременным использованием FST и PFT не работает. Это показали результаты тестирования в ИРБИС 32-2006.1 и ИРБИС 64 - 2006.1 на слияние загружаемых записей с текущей базой. Единственная ошибка, которая при этом место – это ошибка, связанная с созданием в ИРБИС 32 пустых записей. Разработчики признают её наличие. Что касается моих пояснений относительно IMPSVK и формата Романа, то они, как ни странно, не потеряли своей актуальности, хотя проанализированные решения могли бы быть гораздо проще.
Главной причиной наших с Романом затруднений было то, что мы неверно определили назначение оригинального файла IMPSVK.FST. Мы ограничились изучением его первых строк(набор конструкций if &unifor('+1R1005')<>'' then else fi), совершенно не обратив внимания последнюю строчку, ради которой он создавался:
902 0 (v902/)
Цель IMPSVK в том, чтобы дописывать к имеющимся в базе записям сиглу библиотеки и добавлять новые записи, если аналогов в базе нет. Я очень благодарен Светлане Михайловне за то терпение, с которым она отвечала на мои не всегда разумные вопросы. Вышеупомянутую строку FST я в упор не замечал.
Теперь считаю своим долгом привести несколько простых примеров, которые могли бы хорошо проиллюстрировать различные варианты использования режима слияния и сохранить время тем, кто намерен его применять. Чтобы упростить объяснения хотел бы переопределить(ввести с новыми значениями) два понятия:
1. ИМПОРТ - добавление в базу новых записей;
2. СЛИЯНИЕ - дополнение записей базы полями из других записей.
ПЕРВЫЙ РЕЖИМ: ИМПОРТ+СЛИЯНИЕ
FST
10 0 (v10/)
200 0 (v200/)
210 0 (v210/)
211 0 (v211/)
910 0 (v910/)
PFT
"!"v200," - "v210
Комментарий. В данном случае, поскольку схема полей одинакова, то от FST можно вообще отказаться.
ВТОРОЙ РЕЖИМ: ТОЛЬКО СЛИЯНИЕ
FST
1005 0 &uf('+1W1005#'),&uf('+1W1005#',if val(&uf('J,',"!"v200," - "v210))>0 then "!"v200," - "v210 fi),
10 0 if p(g1005) then (v10/) fi
200 0 if p(g1005) then (v200/) fi
210 0 if p(g1005) then (v210/) fi
211 0 if p(g1005) then (v211/) fi
910 0 if p(g1005) then (v910/) fi
PFT
g1005
Комментарий. Некорректно работает в ИРБИС 32. Вместо каждой пропущенной записи будет создана пустая запись. Занятно, что при перелистывании этих пустых записей система каждый раз спрашивает: "Сохранить изменения?".
ТРЕТИЙ РЕЖИМ: ТОЛЬКО ИМПОРТ
FST
1005 0 &uf('+1W1005#'),&uf('+1W1005#',if val(&uf('J,',"!"v200," - "v210))>0 then 'TRUE' fi),
10 0 if a(g1005) then (v10/) fi
200 0 if a(g1005) then (v200/) fi
210 0 if a(g1005) then (v210/) fi
211 0 if a(g1005) then (v211/) fi
910 0 if a(g1005) then (v910/) fi
PFT
Не требуется.
Комментарий. Некорректно работает в ИРБИС 32. Вместо каждой пропущенной записи будет создана пустая запись.
Возможно, Светлана Михайловна выпустит оптимизированную версию IMPSVK, которая так же сможет выступать в качестве наглядного примера. Но пока иллюстрировать различные решения удобнее было на формате Романа. Следует только заметить, что формат ключа("!"v200," - "v210) писался им для весьма специфической задачи. В случае, когда требуется определить дублетность обычных записей, имеет смысл пользоваться алгоритмом свёртки из первых строк IBIS.FST(квалификатор 999).
Редактировано 2 раз. Последний раз 26.12.2006 01:08 пользователем Кирилл Соколинский (СЗТУ).