Как перенести табличную часть справочника в регистр сведений в Конвертации данных 2.1?

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

Перенос данных между конфигурациями, где структура метаданных различается (например, табличная часть в одном месте и регистр сведений в другом), является частой задачей при разработке правил обмена. Давайте разберем по шагам, как правильно организовать выгрузку контактной информации из Справочник.Контрагенты в РегистрСведений.КонтактнаяИнформация.

Понимание архитектуры обмена

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

Шаг 1: Подготовка ПКО для приемника

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

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

Шаг 2: Реализация логики выгрузки в ПВД

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


// Получаем данные из справочника Контрагенты
Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ 
    |    КИ.Ссылка Как Объект,
    |    КИ.Тип Как Тип,
    |    КИ.Вид Как Вид,
    |    КИ.Представление Как Представление
    |ИЗ
    |    Справочник.Контрагенты.КонтактнаяИнформация КАК КИ";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
    // Выгружаем каждую строку как отдельную запись регистра
    ВыгрузитьПоПравилу(Выборка, , , , "КонтактнаяИнформация"); 
КонецЦикла;

Почему возникают ошибки обращения к полям?

В процессе работы вы можете столкнуться с ошибкой Поле объекта не обнаружено. Это происходит, если вы пытаетесь обращаться к свойствам выборки так, как будто это объект конфигурации, или если контекст выполнения не передает структуру данных корректно. Важно помнить:

  1. При использовании ВыгрузитьПоПравилу, передаваемый объект (в нашем случае Выборка) должен содержать свойства, имена которых совпадают с именами ПКС в ПКО.
  2. Если поле является ссылочным, убедитесь, что в базе-источнике и базе-приемнике совпадают предопределенные элементы. Если нет — настройте правило поиска по уникальному идентификатору (GUID) или коду.
  3. Избегайте прямого обращения к Объект.Вид внутри ПВД. Правильнее передать данные через параметры или через саму структуру выборки, которую «разберет» ПКО.

Альтернативные подходы

Если стандартный перенос не обеспечивает нужной гибкости, рассмотрим альтернативы:

При работе с Конвертацией данных всегда проверяйте настройки ПКС на вкладке Поиск. Если система не может найти Вид или Тип контактной информации, она выдаст ошибку или создаст пустую ссылку. Уделив внимание правилам поиска, вы обеспечите корректный перенос всей табличной части в регистр сведений.

← На главную