0
St-Anger
09.02.22
✎
18:34
|
Добрый день.
Возникла необходимость перенести с базы УПП (источник) последние цены контрагентов в новую базу УПП (приемник).
Сначала пробовал через обработку Выгрузка и загрузка данных XML, там есть возможность сделать срез на дату. Но подтягиваются документы установки цен со всеми связанными данными. А засорять новую базу ненужной информацией не хотелось бы.
Поэтому решил организовать обмен через Универсальный обмен данными в формате XML. Для этого начал разрабатывать правило обмена данными.
Идея была такая: произвольным запросом в ПВД получать срез цен на текущую дату и выгружать выборку в параметр "ВыборкаДанных". После чего перед загрузкой данных в приемник создавать документ "Корректировка записей регистров", передавать в параметры, и в ПКО после загрузки подставлять этот документ корректировки вместо регистратора. В ПКС регистратор отключен.
При такой схеме выгрузка и загрузка проходит без ошибок, но в документе "Корректировка записей регистров" и в РС ЦеныНоменклатурыКонтрагентов остается только одна последняя запись. Скорее всего из-за того, что РС подчинен регистратору и при каждой загрузке записи РС идет перезапись регистратора с единственной записью РС (поправьте, если не так). То есть нужно записывать все записи РС сразу через набор записей.
Поэтому решил собирать все записи РС в одну ТЗ: в конвертации перед загрузкой данных определил ТЗ с колонками, соответствующими полям РС, а в ПКО после загрузки записываю поля РС в ТЗ и отменяю загрузку в приемник (Отказ = Истина).
В конвертации после загрузки данных создаю новый документ "Корректировка записей регистров", создаю набор записей РС ЦеныНоменклатурыКонтрагентов, устанавливаю отбор по регистратору (созданной корректировке), загружаю таблицу с движениями и записываю.
Код взял с типовой обработки Свертка базы:
ДокОст = сбСформироватьШапкуДокументаВводаОстатков(ТекРег, ДатаСвертки, ТипРегистра);
НаборЗаписей = РегистрыСведений[ТекРег.Имя].СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Регистратор.Установить(ДокОст);
НаборЗаписей.Загрузить(ТабДвиж);
НаборЗаписей.Записать();
При такой схеме все проходит как нужно. Но что-то мне кажется, что можно сделать проще, без этих костылей. Поэтому и обращаюсь за помощью.
|
|