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