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

ДокОст = сбСформироватьШапкуДокументаВводаОстатков(ТекРег, ДатаСвертки, ТипРегистра);        
НаборЗаписей = РегистрыСведений[ТекРег.Имя].СоздатьНаборЗаписей();            
НаборЗаписей.Отбор.Регистратор.Установить(ДокОст);
НаборЗаписей.Загрузить(ТабДвиж);
НаборЗаписей.Записать();


При такой схеме все проходит как нужно. Но что-то мне кажется, что можно сделать проще, без этих костылей. Поэтому и обращаюсь за помощью.
1 DrShad
 
09.02.22
18:45
я бы создал документы Установка цен номенклатуры
2 St-Anger
 
09.02.22
18:49
(1) В каждом таком документе нужно будет дополнительно заполнять контрагентов и их типы цен и на каждого контрагента будет отдельный документ-регистратор. В общем больше головняка, а смысла в этом нет.
3 DrShad
 
09.02.22
18:52
сорри не увидел про контрагентов, тогда норм