Как в «Конвертации данных 2.0» установить фиксированное значение перечисления, если в источнике нет нужного реквизита

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

При настройке обмена данными между различными конфигурациями (например, между УТ 11 и Бухгалтерией предприятия 3.0) часто возникает ситуация, когда в базе-приемнике объект содержит обязательный реквизит, которого физически нет в базе-источнике. Типичный пример — перечисление СпособыЗачетаАвансов в бухгалтерской базе, для которого в торговой базе нет прямого аналога. Рассмотрим подробнее, как корректно передать нужное значение, используя инструментарий «Конвертации данных 2.0» (КД 2.0).

Способ 1: Использование обработчика «Перед выгрузкой» в ПКС

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

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

// В переменную Значение записываем имя (идентификатор) значения перечисления в приемнике
Значение = "ЗачитыватьАвтоматически";

Проанализируем ситуацию: в данном случае система возьмет строку "ЗачитыватьАвтоматически" и попытается найти соответствующее значение в перечислении базы-приемника. Важно, чтобы это имя в точности совпадало с именем значения в конфигураторе приемника.

Способ 2: Использование флага «Выражение»

Если вы хотите обойтись минимумом кода и не заходить в обработчики, можно воспользоваться встроенным механизмом вычислений в ПКС. Посмотрим, как настроить этот вариант:

  1. В окне настройки ПКС найдите колонку «Выражение» и установите в ней флаг.
  2. В поле Источник (или в поле «Выражение» в зависимости от версии редактора) впишите строковое представление значения в кавычках. Например: "Автоматически".

Важный нюанс: при использовании этого метода система воспринимает строку как готовый результат. Если для данного свойства не задано ПРК (Правило Конвертации Значений), система будет искать соответствие по внутреннему имени. Если же ПРК создано, то в нем должно быть описано соответствие между строкой "Автоматически" и реальным значением перечисления приемника.

Способ 3: Установка значения в обработчике «После загрузки» (ПКО)

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

Рассмотрим пример кода в обработчике «После загрузки»:


// Прямое обращение к объекту и его реквизиту
Объект.СпособЗачетаАванса = Перечисления.СпособыЗачетаАванса.ЗачитыватьАвтоматически;

Обратите внимание на важные моменты при использовании этого способа:

Способ 4: Использование «Значения по умолчанию»

В настройках ПКС есть стандартное поле «Значение по умолчанию». Мы можем указать там конкретное строковое значение. Система применит его в том случае, если источник вернул пустое значение (Неопределено или NULL). Однако для перечислений этот метод считается менее надежным, так как требует корректной настройки сопоставления типов между базами. Рекомендуем использовать программные методы (Способ 1 или 3) для большей предсказуемости результата.

Способ 5: Глобальные параметры обмена

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

  1. В настройках конвертации на закладке «Параметры» создаем параметр СпособЗачетаПоУмолчанию.
  2. В обработчике конвертации «Перед выгрузкой данных» (глобальный обработчик) можно инициализировать его значение.
  3. В ПКС каждого документа в обработчике «Перед выгрузкой» пишем:

Значение = Параметры.СпособЗачетаПоУмолчанию;

Это позволит вам изменить логику обмена в одном месте, не редактируя десятки правил конвертации объектов.

Типичные ошибки и рекомендации

Разберем основные грабли, на которые наступают разработчики при решении этой задачи:

Таким образом, мы рассмотрели основные инструменты для работы с фиксированными значениями. Выбор конкретного метода зависит от того, насколько часто это значение будет меняться и требуется ли дополнительная логика при его установке. Если правила обмена уже подготовлены, для автоматической передачи сообщений по расписанию пригодится программа для регулярного обмена данными между базами 1С.

← На главную