Как перенести общие реквизиты в реквизиты документа в 1С:Конвертация данных 2.1

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

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

Рассмотрим подробно причины возникновения этой проблемы и разберем несколько проверенных способов решения.

Причины отсутствия общего реквизита в списке источников КД 2.1

Проанализируем основные факторы, из-за которых общий реквизит не показывается при создании ПКС:

  1. Устаревшая структура метаданных в КД. Если общий реквизит добавлялся или менялся в конфигураторе после последней выгрузки метаданных, правила обмена «не знают» о его существовании.
  2. Настройки использования общего реквизита в источнике. В конфигураторе 1С у каждого общего реквизита заполняются свойства «Состав» и «Использование». Если для конкретного документа использование реквизита выключено (установлено значение Не использовать), данный реквизит не привязывается к метаданным этого объекта.
  3. Использование устаревшей обработки выгрузки. Выгрузка метаданных обработками старых версий (например, MD82Exp.epf вместо MD83Exp.epf) может вызывать сбои при выгрузке состава общих реквизитов.
  4. Версия конфигурации «Конвертация данных». Полноценная поддержка работы с общими реквизитами реализована в КД начиная с релиза 2.1.5 и выше.

Способ 1. Обновление структуры метаданных

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

  1. Откроем базу-источник в режиме «1С:Предприятие» и запустим актуальную обработку выгрузки метаданных (для управляемых форм — MD83Exp.epf).
  2. Убедимся, что выгружаются все необходимые объекты и общие реквизиты, после чего сохраним XML-файл структуры.
  3. В базе «Конвертация данных 2.1» перейдем в справочник «Конфигурации» и загрузим полученный XML-файл для конфигурации-источника.
  4. Проверим в настройках ПКО документа наличие общего реквизита в списке полей источника.

Способ 2. Программное заполнение значения в ПКС

Если обновленная структура метаданных загружена, но общий реквизит по-прежнему не отображается в списке полей выбора источника, организуем выгрузку программно прямо из объекта-источника.

Разберем порядок действий:

  1. В ПКО соответствующего документа добавим новое Правило Конвертации Свойств (ПКС).
  2. Поле Источник оставим пустым (выберем значение <Не выгружать источник>).
  3. В поле Приемник укажем реквизит документа в базе-приемнике.
  4. В обработчике события Перед выгрузкой данного ПКС пропишем программный код:

Значение = Источник.ИмяОбщегоРеквизита;

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

Способ 3. Передача значения через параметры объекта

Рассмотрим альтернативный вариант, когда передачу значения нужно выполнить через структуру ИсходящиеДанные или передать в ПараметрыОбъекта с последующим заполнением на стороне приемника.

Шаг 1. В ПКО документа в обработчике Перед выгрузкой передадим значение общего реквизита в структуру исходящих данных:


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

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

Шаг 3. В ПКО документа в обработчике события После загрузки на стороне приемника прочитаем полученный параметр и запишем его в реквизит объекта:


Если ПараметрыОбъекта <> Неопределено И ПараметрыОбъекта.Свойство("ИмяПараметра") Тогда
    Объект.ИмяРеквизитаПриемника = ПараметрыОбъекта.Получить("ИмяПараметра");
КонецЕсли;

Таким образом, мы можем успешно переносить данные из общих реквизитов как штатными средствами сопоставления после обновления метаданных, так и с помощью гибких программных обработчиков в Конвертации данных 2.1.

← На главную