Как настроить перенос физических лиц и паспортных данных из 1С:ЗиК 7.7 в 1С:Бухгалтерию 3.0 в Конвертации данных 2.0?

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

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

Причина 1. Пустая ссылка на физическое лицо в регистрах сведений

Проанализируем ситуацию: при выгрузке регистра сведений ДокументыФизическихЛиц в сформированном XML-файле свойство Физлицо выгружается пустым:


<Свойство Имя="Физлицо" Тип="СправочникСсылка.ФизическиеЛица">
 <Пусто/>
</Свойство>

Это происходит по двум основным причинам:

  1. Не указано ПКО в ПКС: Если данные для регистра формируются программно в виде структуры или объекта СписокЗначений (без прямой привязки к объекту метаданных источника), механизм выгрузки не может автоматически определить правило для конвертации ссылки. В правиле конвертации свойств (ПКС) для измерения Физлицо необходимо явно указать Правило конвертации (например, ФизическиеЛица) и обязательно включить флаг «Получить из входящих данных».
  2. Неверная передача параметров в функцию: В обработке выгрузки V77Exp.ert вызов функции ВыгрузитьПоПравилу требует точного соблюдения порядка следования параметров. Если данные передаются через входящие данные, коллекция должна передаваться третьим параметром:

ПаспортныеДанные = СоздатьОбъект("СписокЗначений");
ПаспортныеДанные.Установить("Период", Период);
ПаспортныеДанные.Установить("ФизЛицо", Источник);
ПаспортныеДанные.Установить("ВидДокумента", ДокументВид);
ПаспортныеДанные.Установить("Серия", ДокументСерия);
ПаспортныеДанные.Установить("Номер", ДокументНомер);
ПаспортныеДанные.Установить("ДатаВыдачи", ДокументДатаВыдачи);
ПаспортныеДанные.Установить("КемВыдан", ДокументКемВыдан);

// Передаем структуру входящих данных третьим параметром
ВыгрузитьПоПравилу(, , ПаспортныеДанные, , "ПаспортныеДанныеФизЛиц");

Также важно убедиться, что обработчик V77Exp.ert содержит актуальный программный модуль, сгенерированный текущей версией правил обмена при выгрузке из «Конвертации данных».

Причина 2. Появление дублей групп в виде элементов справочника

Выясним причину, почему в справочнике ФизическиеЛица папки из 1С 7.7 задваиваются и превращаются в обычные элементы приемника. В платформе 1С 7.7 иерархия справочника не разделяет жестко сущности на уровне метаданных, тогда как в 1С 8 у справочников с иерархией групп и элементов создание группы выполняется методом СоздатьГруппу(), а элемента — методом СоздатьЭлемент().

Если для выгрузки используется одно общее правило конвертации объектов (ПКО), механизм загрузки по умолчанию пытается создать элемент. Чтобы этого избежать, разделим правила конвертации:

  1. Создадим отдельное ПКО ФизическиеЛицаГруппа для групп и отдельное ПКО ФизическиеЛица для элементов.
  2. В ПКО элементов в обработчике «Перед выгрузкой» добавим проверку:
    
    Если Источник.ЭтоГруппа() = 1 Тогда
        Отказ = 1;
    КонецЕсли;
    
  3. В ПКО групп в обработчике «Перед выгрузкой» установим противоположное условие:
    
    Если Источник.ЭтоГруппа() = 0 Тогда
        Отказ = 1;
    КонецЕсли;
    
  4. В ПКС реквизита Родитель (и для элементов, и для групп) обязательно укажем правило конвертации ФизическиеЛицаГруппа. Это гарантирует, что иерархия в базе-приемнике будет создана корректно, без создания ложных элементов вместо папок.

Причина 3. Ошибки сопоставления видов документов физических лиц

Рассмотрим подробнее проблему, когда вид документа (например, «Паспорт гражданина РФ») выгружен в XML, но в базе-приемнике реквизит остается пустым либо создаются дубли предопределенных элементов.

В конфигурациях 1С 8.3 справочник ВидыДокументовФизическихЛиц содержит предопределенные элементы. Поиск по наименованию часто дает сбой из-за скрытых неразрывных пробелов, различий в регистрах или несовпадения строк между ЗиК 7.7 и БП 3.0 (например, «Паспорт гражданина Российской Федерации» и «Паспорт гражданина РФ»).

Для надежного сопоставления видов документов применим поиск предопределенного значения в обработчике «Поля поиска» ПКО ВидыДокументовФизическихЛиц базы-приемника:


Если СвойстваПоиска["Наименование"] = "Паспорт гражданина РФ" 
   Или СвойстваПоиска["Наименование"] = "Паспорт гражданина Российской Федерации" Тогда
    СсылкаНаОбъект = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ");
    ПрекратитьПоиск = Истина;
КонецЕсли;

Если же элемент создается заново, обратите внимание на обязательные реквизиты в конфигурации 1С:Бухгалтерия 3.0: для корректного отображения в интерфейсе у вида документа должны быть заполнены реквизиты ЯвляетсяДокументомУдостоверяющимЛичность (тип Булево) и Представление.

Альтернативное решение: Заполнение регистров в обработчике «После загрузки»

Если перенос через отдельные ПКО для регистров сведений вызывает сложности с синхронизацией ссылок, применим альтернативный подход. Передадим паспортные данные и ФИО в параметрах самого объекта ФизическиеЛица, а запись в регистры выполним в базе-приемнике в обработчике «После загрузки» ПКО ФизическиеЛица:


Если Не Объект.ЭтоГруппа Тогда
    // Запись паспортных данных напрямую в регистр сведений
    НаборЗаписей = РегистрыСведений.ДокументыФизическихЛиц.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Физлицо.Установить(Ссылка);
    
    НоваяЗапись = НаборЗаписей.Добавить();
    НоваяЗапись.Физлицо = Ссылка;
    НоваяЗапись.ВидДокумента = ПредопределенноеЗначение("Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ");
    НоваяЗапись.Период = ПараметрыОбъекта["ДатаВыдачи"];
    НоваяЗапись.Серия = ПараметрыОбъекта["Серия"];
    НоваяЗапись.Номер = ПараметрыОбъекта["Номер"];
    НоваяЗапись.ДатаВыдачи = ПараметрыОбъекта["ДатаВыдачи"];
    НоваяЗапись.КемВыдан = ПараметрыОбъекта["КемВыдан"];
    
    НаборЗаписей.Записать(Истина);
КонецЕсли;

Такой подход полностью исключает рассинхронизацию между созданием ссылки на физическое лицо и формированием записей в независимых регистрах сведений.

← На главную