При настройке обмена данными между конфигурациями 1С разработчики нередко сталкиваются с ситуацией, когда в списке объектов конфигурации «Конвертация данных» отсутствуют регистры сведений. Например, при необходимости выгрузить паспортные данные физических лиц из «1С:Бухгалтерия 3.0» в правилах конвертации объектов (ПКО) доступны справочники, документы, планы счетов, но таблиц регистров нет. Разберем по шагам, почему возникает эта проблема и какими способами можно организовать перенос сведений.
Для создания правил обмена в конфигурации «Конвертация данных 2.1» предварительно выполняется выгрузка описания структуры метаданных из рабочей базы с помощью внешней обработки (обычно MD83Exp.epf). В некоторых версиях этой обработки флаги отбора классов метаданных могут быть отключены или скрыты на форме.
Выясним причину и последовательность действий для отображения всех объектов:
Видимость = Ложь), сделаем его доступным.Если разработка правил ведется в «Конвертации данных 3.0», важно учитывать ключевое архитектурное отличие: обмен строится на основе формата EnterpriseData (XDTO-пакеты). В этой концепции прямого переноса регистров сведений не существует. Паспортные данные, контактная информация и адреса передаются не отдельными независимыми регистрами, а вложенными свойствами самого объекта (например, внутри объекта ФизическоеЛицо). В таком случае сопоставление выполняется внутри правил конвертации данных конкретного справочника.
Наиболее надежный подход при переносе паспортных данных — передавать их синхронно со справочником ФизическиеЛица с помощью обработчиков событий. Это исключает появление «оторванных» записей в регистре без самого объекта.
Рассмотрим реализацию через параметры и обработчик ПослеЗагрузки:
ФизическиеЛица в обработчике события ПриВыгрузке (или ПередВыгрузкой) получаем срез последних из регистра сведений ДокументыФизическихЛиц и передаем данные в структуру ИсходящиеДанные:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Док.ВидДокумента КАК ВидДокумента,
| Док.Серия КАК Серия,
| Док.Номер КАК Номер,
| Док.ДатаВыдачи КАК ДатаВыдачи,
| Док.КемВыдан КАК КемВыдан
|ИЗ
| РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(, Физлицо = &Физлицо) КАК Док";
Запрос.УстановитьПараметр("Физлицо", Источник.Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("ВидДокумента", Выборка.ВидДокумента);
ИсходящиеДанные.Вставить("Серия", Выборка.Серия);
ИсходящиеДанные.Вставить("Номер", Выборка.Номер);
ИсходящиеДанные.Вставить("ДатаВыдачи", Выборка.ДатаВыдачи);
ИсходящиеДанные.Вставить("КемВыдан", Выборка.КемВыдан);
КонецЕсли;
ПослеЗагрузки ПКО справочника ФизическиеЛица на стороне базы-приемника создаем и записываем набор записей регистра сведений:
Если Не ПараметрыОбъекта = Неопределено И ПараметрыОбъекта.Свойство("ВидДокумента") Тогда
Набор = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
Набор.Отбор.Физлицо.Установить(Ссылка);
Запись = Набор.Добавить();
Запись.Физлицо = Ссылка;
Запись.ВидДокумента = ПараметрыОбъекта.ВидДокумента;
Запись.Серия = ПараметрыОбъекта.Серия;
Запись.Номер = ПараметрыОбъекта.Номер;
Запись.ДатаВыдачи = ПараметрыОбъекта.ДатаВыдачи;
Запись.КемВыдан = ПараметрыОбъекта.КемВыдан;
Набор.Записать(Истина);
КонецЕсли;
Если для регистра сведений создано отдельное ПКО, но запускать отдельное правило выгрузки данных (ПВД) не требуется, применим функцию ВыгрузитьПоПравилу. Разберем этот вариант:
ДокументыФизическихЛиц, настраиваем сопоставление измерений и ресурсов.ФизическиеЛица в обработчике ПослеВыгрузки вызываем программную выгрузку набора записей:
НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Физлицо.Установить(Источник.Ссылка);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
ВыгрузитьПоПравилу(НаборЗаписей, , , , "ДокументыФизическихЛиц");
КонецЕсли;
Важно: При переносе независимых периодических регистров сведений необходимо строго контролировать заполнение всех ключевых измерений и даты периода, чтобы исключить дублирование или затирание существующих данных в информационной базе приемника.