Как перенести регистр сведений и паспортные данные через Конвертацию данных

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

При настройке обмена данными между конфигурациями 1С разработчики нередко сталкиваются с ситуацией, когда в списке объектов конфигурации «Конвертация данных» отсутствуют регистры сведений. Например, при необходимости выгрузить паспортные данные физических лиц из «1С:Бухгалтерия 3.0» в правилах конвертации объектов (ПКО) доступны справочники, документы, планы счетов, но таблиц регистров нет. Разберем по шагам, почему возникает эта проблема и какими способами можно организовать перенос сведений.

Причина 1: Скрытые флаги в обработке выгрузки структуры метаданных

Для создания правил обмена в конфигурации «Конвертация данных 2.1» предварительно выполняется выгрузка описания структуры метаданных из рабочей базы с помощью внешней обработки (обычно MD83Exp.epf). В некоторых версиях этой обработки флаги отбора классов метаданных могут быть отключены или скрыты на форме.

Выясним причину и последовательность действий для отображения всех объектов:

  1. Откроем обработку выгрузки структуры метаданных в режиме «Конфигуратор».
  2. Проверим форму обработки: если флаги выгрузки регистров сведений отключены по умолчанию или элемент управления скрыт (свойство Видимость = Ложь), сделаем его доступным.
  3. Запустим обработку в режиме «1С:Предприятие», отметим флаг для выгрузки регистров сведений и сохраним файл XML с метаданными.
  4. Загрузим обновленную структуру метаданных в конфигурацию «Конвертация данных». После этого регистры сведений появятся в списке доступных объектов для настройки ПКО и ПВД.

Причина 2: Архитектурные особенности Конвертации данных 3.0

Если разработка правил ведется в «Конвертации данных 3.0», важно учитывать ключевое архитектурное отличие: обмен строится на основе формата EnterpriseData (XDTO-пакеты). В этой концепции прямого переноса регистров сведений не существует. Паспортные данные, контактная информация и адреса передаются не отдельными независимыми регистрами, а вложенными свойствами самого объекта (например, внутри объекта ФизическоеЛицо). В таком случае сопоставление выполняется внутри правил конвертации данных конкретного справочника.

Способ 1: Перенос паспортных данных в составе справочника физических лиц (КД 2.1)

Наиболее надежный подход при переносе паспортных данных — передавать их синхронно со справочником ФизическиеЛица с помощью обработчиков событий. Это исключает появление «оторванных» записей в регистре без самого объекта.

Рассмотрим реализацию через параметры и обработчик ПослеЗагрузки:

  1. В ПКО справочника ФизическиеЛица в обработчике события ПриВыгрузке (или ПередВыгрузкой) получаем срез последних из регистра сведений ДокументыФизическихЛиц и передаем данные в структуру ИсходящиеДанные:
    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ ПЕРВЫЕ 1
        |	Док.ВидДокумента КАК ВидДокумента,
        |	Док.Серия КАК Серия,
        |	Док.Номер КАК Номер,
        |	Док.ДатаВыдачи КАК ДатаВыдачи,
        |	Док.КемВыдан КАК КемВыдан
        |ИЗ
        |	РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(, Физлицо = &Физлицо) КАК Док";
    
    Запрос.УстановитьПараметр("Физлицо", Источник.Ссылка);
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
        ИсходящиеДанные = Новый Структура;
        ИсходящиеДанные.Вставить("ВидДокумента", Выборка.ВидДокумента);
        ИсходящиеДанные.Вставить("Серия", Выборка.Серия);
        ИсходящиеДанные.Вставить("Номер", Выборка.Номер);
        ИсходящиеДанные.Вставить("ДатаВыдачи", Выборка.ДатаВыдачи);
        ИсходящиеДанные.Вставить("КемВыдан", Выборка.КемВыдан);
    КонецЕсли;
    
  2. В этом же ПКО передаем значения через свойства-параметры в приемник.
  3. В обработчике ПослеЗагрузки ПКО справочника ФизическиеЛица на стороне базы-приемника создаем и записываем набор записей регистра сведений:
    
    Если Не ПараметрыОбъекта = Неопределено И ПараметрыОбъекта.Свойство("ВидДокумента") Тогда
        Набор = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
        Набор.Отбор.Физлицо.Установить(Ссылка);
        
        Запись = Набор.Добавить();
        Запись.Физлицо = Ссылка;
        Запись.ВидДокумента = ПараметрыОбъекта.ВидДокумента;
        Запись.Серия = ПараметрыОбъекта.Серия;
        Запись.Номер = ПараметрыОбъекта.Номер;
        Запись.ДатаВыдачи = ПараметрыОбъекта.ДатаВыдачи;
        Запись.КемВыдан = ПараметрыОбъекта.КемВыдан;
        
        Набор.Записать(Истина);
    КонецЕсли;
    

Способ 2: Выгрузка регистра через программный вызов правила

Если для регистра сведений создано отдельное ПКО, но запускать отдельное правило выгрузки данных (ПВД) не требуется, применим функцию ВыгрузитьПоПравилу. Разберем этот вариант:

  1. Создаем ПКО для регистра сведений ДокументыФизическихЛиц, настраиваем сопоставление измерений и ресурсов.
  2. В ПКО справочника ФизическиеЛица в обработчике ПослеВыгрузки вызываем программную выгрузку набора записей:
    
    НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Физлицо.Установить(Источник.Ссылка);
    НаборЗаписей.Прочитать();
    
    Если НаборЗаписей.Количество() > 0 Тогда
        ВыгрузитьПоПравилу(НаборЗаписей, , , , "ДокументыФизическихЛиц");
    КонецЕсли;
    

Важно: При переносе независимых периодических регистров сведений необходимо строго контролировать заполнение всех ключевых измерений и даты периода, чтобы исключить дублирование или затирание существующих данных в информационной базе приемника.

← На главную