Как в КД 2.1 создать объекты в приемнике 1С 8, отсутствующие в источнике 1С 7.7, и связать их с регистром?

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При переносе данных из конфигураций 1С 7.7 в современные конфигурации 1С 8.x с помощью «Конвертации данных 2.1» (КД 2.1) разработчики часто сталкиваются с ситуацией, когда структура метаданных в источнике и приемнике существенно различается. Типичный пример: в 1С 7.7 все данные по налоговой инспекции хранятся в виде простых строковых реквизитов внутри справочника Организации, а в 1С 8.x они вынесены в отдельный справочник НалоговыеИнспекции и привязаны к организации через регистр сведений КодыОрганизаций.

Разберем подробно, как правильно настроить правила конвертации объектов (ПКО), правила конвертации свойств (ПКС) и программные обработчики для корректного создания новых элементов и подстановки их ссылок в регистр сведений базы-приемника.

Способ 1. Программная выгрузка через СписокЗначений и вспомогательное ПКО поиска

Посмотрим на схему решения с использованием встроенных механизмов КД 2.1 на стороне источника (1С 7.7). Поскольку в платформе 1С 7.7 отсутствует тип данных Структура, для передачи набора исходящих данных в функцию ВыгрузитьПоПравилу() применяется объект СписокЗначений, где строковое представление каждого элемента выступает именем реквизита приемника.

Разберем реализацию по шагам:

  1. Создание основного ПКО для справочника налоговых инспекций:

    Создаем ПКО НалоговыеИнспекции_Создание, у которого поле Объект-источник оставляем пустым, а в поле Объект-приемник указываем НалоговыеИнспекции. Настраиваем ПКС для реквизитов (Наименование, ЕДРПОУ, Адрес и т.д.), получая их значения из входящих данных (ВходящиеДанные).

  2. Вызов выгрузки объекта в обработчике ПКО организаций:

    В основном ПКО переноса организации в событии ПриВыгрузке (или ПослеВыгрузки) программно формируем СписокЗначений и передаем его в правило выгрузки:

    
    СЗ = СоздатьОбъект("СписокЗначений");
    СЗ.ДобавитьЗначение(СокрЛП(Источник.ОтделНалоговойИнспекции), "Наименование");
    СЗ.ДобавитьЗначение(1, "ТипДПИ");
    СЗ.ДобавитьЗначение(54, "КодАдмРайона");
    СЗ.ДобавитьЗначение("Ворошиловский", "НаименованиеАдмРайона");
    СЗ.ДобавитьЗначение("г.Донецк", "Адрес");
    СЗ.ДобавитьЗначение(СокрЛП(Источник.ЕГРПОУНалоговойинспекции), "ЕДРПОУ");
    СЗ.ДобавитьЗначение(СокрЛП(Источник.КодНалоговойИнспекции), "КодДляПоиска");
    
    ВыгрузитьПоПравилу(, , СЗ, , "НалоговыеИнспекции_Создание");
    
  3. Создание вспомогательного ПКО для поиска ссылки:

    Для того чтобы подставить созданный элемент справочника в регистр сведений КодыОрганизаций, создаем второе ПКО — НалоговыеИнспекции_Поиск:

    • Объект-источник: пусто;
    • Объект-приемник: НалоговыеИнспекции;
    • Устанавливаем флаг «Не создавать новый объект в приемнике, если он не найден»;
    • В ПКС ключевого поля поиска (например, КодДляПоиска или Код) включаем флаг «Поиск объекта при загрузке по свойству». В обработчике ПередВыгрузкой этого ПКС указываем: Значение = Источник;.
  4. Настройка ПКО для регистра сведений:

    Создаем правило выгрузки для регистра КодыОрганизаций:

    • Для измерения Организация связываем его с основным ПКО организаций;
    • Для реквизита/ресурса НалоговаяИнспекция источником выбираем реквизит КодНалоговойИнспекции, а в качестве правила конвертации указываем созданное вспомогательное ПКО НалоговыеИнспекции_Поиск.

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

Способ 2. Выгрузка уникальных объектов через ПВД с произвольным алгоритмом

Проанализируем ситуацию, когда база-источник 1С 7.7 содержит большое количество организаций, ссылающихся на одни и те же налоговые органы. Если многократно вызывать ВыгрузитьПоПравилу() в цикле по организациям, файл выгрузки XML будет перегружен дублирующимися блоками создания объектов.

Для оптимизации процесса можно разделить выгрузку на два независимых шага с помощью Правила выгрузки данных (ПВД) с типом «Произвольный алгоритм»:

  1. Выгрузка справочника инспекций:

    С помощью запроса к базе 1С 7.7 отбираем только уникальные налоговые инспекции, присутствующие у организаций. В цикле выгружаем их по правилу создания справочника НалоговыеИнспекции.

  2. Выгрузка организаций и регистров:

    Вторым шагом выгружаем справочник организаций и записи регистра КодыОрганизаций. Так как все инспекции уже записаны в файл и будут созданы первыми, сопоставление ссылок в регистре произойдет быстро и без риска получить пустые значения.

Способ 3. Перенос логики создания объектов на сторону приемника (1С 8.x)

Рассмотрим альтернативный вариант, когда формирование записей регистра и сопутствующих справочников полностью переносится на сторону базы 1С 8.x. Это упрощает отладку и уменьшает нагрузку на механизм конвертации.

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

Важные особенности работы КД 2.1 с 1С 7.7

При настройке правил конвертации из платформы 1С 7.7 обязательно учитывайте следующие технические нюансы:

← На главную