Как перенести значение реквизита табличной части как справочник при разных типах данных в КД 2.1?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

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

Шаг 1. Исключаем самую простую ошибку: проверка заполнения в источнике

Прежде чем приступать к написанию сложных обработчиков и изменению настроек конвертации, необходимо убедиться в том, что переносимые данные физически присутствуют в базе-источнике. На практике часто случается так, что правила написаны абсолютно верно, но реквизит в приемнике остается пустым просто потому, что он не был заполнен в документе-источнике.

Для диагностики этой ситуации выполним следующие действия:

  1. Откроем базу-источник в режиме "1С:Предприятие".
  2. Найдем документ, который мы пытаемся перенести (в нашем примере — Авансовый отчет).
  3. Воспользуемся обработкой "Универсальный редактор реквизитов" или встроенным групповым изменением реквизитов, чтобы посмотреть реальное состояние реквизита в табличной части нужной строки. Визуально в форме документа поле может казаться заполненным (или скрытым программно), однако в самой табличной части базы данных значение может отсутствовать (равняться Неопределено или пустой ссылке).

Если проверка показала, что данные в источнике действительно заполнены, переходим к технической настройке правил обмена.

Шаг 2. Настройка ПКО для разнотипных справочников

Поскольку типы справочников в источнике и приемнике различаются (например, СправочникСсылка.ПодразделенияОрганизаций конвертируется в СправочникСсылка.СтруктураПредприятия), стандартный поиск по уникальному идентификатору (GUID) не сработает. Нам необходимо настроить правила поиска явным образом.

Рассмотрим по шагам процесс создания правил:

  1. Создаем новое ПКО: В информационной базе КД 2.1 создадим новое Правило конвертации объектов. В качестве источника укажем справочник ПодразделенияОрганизаций, а в качестве приемника — СтруктураПредприятия.
  2. Настраиваем поля поиска: На вкладке "Поля поиска" ПКО определим, как система должна искать существующие элементы в базе-приемнике. Наиболее надежным вариантом для подразделений является поиск по Наименованию. Для этого у ПКС Наименование установим флажок "Поиск". Также рекомендуется установить флажок "Продолжить поиск по полям поиска, если по идентификатору объект не найден" в настройках самого ПКО.
  3. Связываем реквизит ТЧ с ПКО: Перейдем в ПКО нашего документа (например, Авансовый отчет). Найдем нужную табличную часть и в списке ее реквизитов выберем переносимое подразделение. В колонке "Правило конвертации" (ПКО) принудительно укажем только что созданное правило для подразделений.

Шаг 3. Решение конфликта нескольких ПКО для одного приемника

Часто в правилах обмена создается несколько разных ПКО, которые ведут в один и тот же справочник-приемник. Например, мы можем конвертировать и Подразделения, и ПодразделенияОрганизаций в одну общую Структуру предприятия. В таких случаях XML-загрузчик КД 2.1 при импорте документа может запутаться и применить не то правило конвертации.

Чтобы жестко указать системе, какое именно правило нужно использовать для конкретного реквизита табличной части, пропишем имя правила программно. Для этого в ПКС реквизита табличной части в обработчике события Перед выгрузкой укажем следующий код:


// Явно указываем имя ПКО для выгрузки реквизита ТЧ
ИмяПКО = "ПодразделенияОрганизаций_В_СтруктуруПредприятия";

Это гарантирует, что при выгрузке этого свойства КД 2.1 применит именно заданную логику сопоставления.

Шаг 4. Отключение оптимизированного формата обмена

Если реквизит табличной части в приемнике имеет составной тип данных или правила КД не могут однозначно определить тип значения при импорте файла, может произойти сбой очистки типа. Значение в XML запишется, но в базу-приемник не запишется.

Для устранения этой технической проблемы выполним следующее:

  1. Откроем обработку "Универсальный обмен данными в формате XML" в базе-источнике.
  2. Перейдем на вкладку "Дополнительные настройки".
  3. Снимем флажок "Использовать оптимизированный формат обмена".
  4. Повторим выгрузку данных. Это заставит КД более развернуто описывать типы выгружаемых узлов в XML-файле, что позволит загрузчику в базе-приемнике корректно идентифицировать и заполнить типы данных.

Шаг 5. Методологический подход: обработка пустых значений

Справочник Подразделения организаций в регламентированном учете привязан к конкретным юрлицам, а Структура предприятия в управленческом учете (например, в ERP) является единой для всей базы. Из-за этого при переносе могут возникать логические пустоты. Если в источнике реквизит все же не заполнен, но в приемнике его заполнение обязательно, мы можем написать алгоритм подстановки дефолтных значений.

Проанализируем пример кода в обработчике Перед выгрузкой для ПКС нашего реквизита табличной части:


// Если подразделение в источнике не заполнено, подставим дефолтное значение
Если Не ЗначениеЗаполнено(Источник.Подразделение) Тогда
    // Передаем строку-наименование для поиска по умолчанию
    Значение = "Основное подразделение"; 
    // Указываем специальное ПКО, настроенное на поиск по наименованию из строки
    ИмяПКО = "СтруктураПредприятияПоНаименованию"; 
КонецЕсли;

Этот простой шаг убережет документы от недозаполнения в базе-приемнике и позволит провести перенесенные документы без ошибок ручного заполнения пользователями.

← На главную