1. Структура регистров
2. Основной отбор
Основной отбор — это свойство измерений регистра сведений. Если это свойство установлено в измерениях, то когда формируется таблица регистрации она имеет структуру только из полей основного отбора. Если РС независимый и периодический, то основной отбор можно поставить на любое измерение и на измерение Период это галочка "Основной отбор по периоду". Если РС подчиненный регистратору, то у него Регистратор и является полем основного отбора. Соответственно в таблице регистрации есть только документы регистраторы наборов данных.
3. Проблемы возникшие при написании правил конвертации
Изначально я не учел этого принципа регистрации, что был описан выше. Сделал все по пунктам:
- Добавил РС (подчиненный регистратору) в план обмена, отключил авторегистрацию в нем.
- Добавил в подписку, которая регистрирует наборы данных.
- Написал обычные правила для двух идентичных РС. Регистратор в эти правила не включал вообще решил он не нужен в другой базе ж нету такого документа.
- Создал правила выгрузки.
В итоге данные начали ходить не корректно. Как решение подумал сделать так как на рисунку ниже. В итоге данные перегрузились но если было в моем регистре 2 записи в одну секунду то они друг друга перетирали в базе приемнике.
4. Решение проблемы
Пишем обычные ПКО тут нету никаких хитростей
А вот самые основные манипуляции происходят в ПВД. Добавляем в обработчик ПередВыгрузкой необходимый код.
Листинг кода:
Отбор = Новый ТаблицаЗначений;
Отбор.Колонки.Добавить ("Имя");
Отбор.Колонки.Добавить ("Значение");
Отбор.Колонки.Добавить ("Использование");
// В таблицу отбора добавляем поля, по которым в базе приемнике будем искать уникальность наборов записей
// в базе приемнике
СтрокаОтбора = Отбор.Добавить ();
СтрокаОтбора.Имя = "Период";
СтрокаОтбора.Значение = Объект.Отбор.Регистратор.Значение.Дата;
СтрокаОтбора.Использование = Истина;
СтрокаОтбора = Отбор.Добавить ();
СтрокаОтбора.Имя = "Регистратор";
СтрокаОтбора.Значение = Объект.Отбор.Регистратор.Значение.Номер;
СтрокаОтбора.Использование = Истина;
Строки = Новый ТаблицаЗначений;
Строки.Колонки.Добавить("Период");
Строки.Колонки.Добавить("Регистратор");
Строки.Колонки.Добавить("Номенклатура");
Строки.Колонки.Добавить("Характеристика");
Строки.Колонки.Добавить("Количество");
// Объект - набор записей из базы источника
// формируем таблицу строк
Для каждого Запись Из Объект Цикл
Строка = Строки.Добавить();
Строка.Период = Запись.Период;
Строка.Регистратор = Запись.Регистратор.Номер;
Строка.Номенклатура = Запись.Номенклатура;
Строка.Характеристика = Запись.Характеристика;
Строка.Количество = Запись.Количество;
КонецЦикла;
НаборЗаписей = Новый Структура("Отбор, Строки");
НаборЗаписей.Отбор = Отбор;
НаборЗаписей.Строки = Строки;
ВыгрузитьРегистр(НаборЗаписей,,,,"ПродажиЗаДень");
Отказ = Истина;
Спасибо за внимание!
А «ВыгрузитьРегистр» — это что за процедура?
(1)ИЗ БСП. В Документообороте делал через
Обработки.КонвертацияОбъектовИнформационныхБаз.Создать().ВыгрузитьРегистр(НаборЗаписей) — вышла ошибка, вернулся к проверенному временем