Имя: Пароль:
1C
1С v8
Перенос регистра сведений через КД с изменением структуры
0 Dwarrior
 
13.02.19
15:07
Здравствуйте!

Переношу из Источника регистр сведений с регистратором в Получатель, в регистр сведений без регистратора. Проблема в том, что из Источника выгружается РегистрСведенийЗапись, а нужно сделать РегистрСведенийНаборЗаписей, чтобы в Получателе все загрузилось успешно.
Вопрос - как это сделать в Источнике, если там отбор по регистратору? Сейчас я ПередВыгрузкой разбираю исходный набор записей на отдельные записи и ВыгружаюПоПравилу(), набором с регистратором выгружается, но криво загружается в Получатель.
Чего хочется - чтобы в выгруженном xml были объекты РегистрСВеденийНаборЗаписей с отбором по измерениям, как это существует в Получателе. Такой файл загрузится в Получателе.
1 hhhh
 
13.02.19
15:10
(0) в правилах выгрузки произвольный алгоритм. и там запрос не по регистраторам, а по нужным измерениям.
2 Dwarrior
 
13.02.19
15:23
(1)  Ну это обмен по правилам, работает ли запрос с произвольным алгоритмом в таких условиях? Из чего выбирать?

Запрос вернет набор полей - Номенклатура, Цена и пр. Сейчас я почти так и делаю - создаю Структуру с полями Номенклатура и Цена, заполняю и ВыгружаюПоПравилу(). Выгружается Запись, а не НаборЗаписей. То же самое происходит, если выгружать вместо Структуры РегистрСВеденийЗапись - в xml попадает Запись.
По моему мнению, так происходит потому, что в Источнике ничего не известно про структуру регистра в Получателе, в правилах тоже ничего нет, только реквизиты линейным списком. Поэтому об отборе по Номенклатуре в Источнике ничего не известно.
Может можно как-тио использовать многоуровневую структуру? Типа
Запись = Новый Структура("Отбор,НаборЗаписей", Новый Структура("Номенклатура"), Новый Массив)?
3 Dwarrior
 
14.02.19
09:38
Коллеги, апну пожалуй
4 scanduta
 
14.02.19
09:43
(1) +1

Делай произвольный алгоритм получай нужные тебе поля , формируй набор записей и используй процедуру

ВыгрузитьРегистр(..)
5 Dwarrior
 
14.02.19
10:04
(4) О! Кажется то что нужно, спасибо! Не знал, что есть такая функция:) Отпишусь по результату
6 Dwarrior
 
14.02.19
10:54
(5) Все получилось, спасибо! Именно к этому я и пришел - создать искусственную структуру, аналогичную набору записей в Получателе. Но не знал как сделать. Спасибо scanduta за подсказку!

Вот мой код, перед выгрузкой в ПВД регистра:

//Формируем искуственную структуру-шаблон, аналогичную РегистрСВеденийНаборЗаписей
Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить("Период");
Строки.Колонки.Добавить("Номенклатура");
Строки.Колонки.Добавить("ФорматМагазина");
Строки.Колонки.Добавить("РазрешеныЗакупки");
Строки.Колонки.Добавить("РазрешеныПродажи");
Строки.Колонки.Добавить("Активность");
Строки.Колонки.Добавить("Документ");
Строки.Добавить();

Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить("Имя");
Отбор.Колонки.Добавить("Значение");
Отбор.Колонки.Добавить("Использование");

СтрокаОтбора = Отбор.Добавить();
СтрокаОтбора.Имя = "Номенклатура";
СтрокаОтбора.Использование = Истина;

СтрокаОтбора = Отбор.Добавить();
СтрокаОтбора.Имя = "ФорматМагазина";
СтрокаОтбора.Использование = Истина;

ШаблонНЗ = Новый Структура("Отбор, Строки");
ШаблонНЗ.Отбор = Отбор;
ШаблонНЗ.Строки = Строки;    

//Каждую запись из набора представляем как набор записей
Для каждого Запись из Объект Цикл
    НЗ = ЗначениеИзСтрокиВнутр(ЗначениеВСтрокуВнутр(ШаблонНЗ));
    
    СтрокаОтбора = НЗ.Отбор.Найти("Номенклатура");
    СтрокаОтбора.Значение = Запись.Номенклатура;
    
    СтрокаОтбора = НЗ.Отбор.Найти("ФорматМагазина");
    СтрокаОтбора.Значение = Запись.ОбъектПланирования;
    
    СтрокаНабора = НЗ.Строки[0];
    ЗаполнитьЗначенияСвойств(СтрокаНабора, Запись);
    СтрокаНабора.ФорматМагазина = Запись.ОбъектПланирования;
    СтрокаНабора.Документ = сокрлп(Объект.Отбор.Регистратор.Значение);
    
    ВыгрузитьРегистр(НЗ, , , , "АссортиментДТС");
КонецЦикла;
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс