При настройке обмена данными между различными конфигурациями (например, между УТ 11 и Бухгалтерией предприятия 3.0) часто возникает ситуация, когда в базе-приемнике объект содержит обязательный реквизит, которого физически нет в базе-источнике. Типичный пример — перечисление СпособыЗачетаАвансов в бухгалтерской базе, для которого в торговой базе нет прямого аналога. Рассмотрим подробнее, как корректно передать нужное значение, используя инструментарий «Конвертации данных 2.0» (КД 2.0).
Самый распространенный и гибкий метод — это программная установка значения непосредственно в Правиле Конвертации Свойства (ПКС). Разберем по шагам, как это реализовать:
// В переменную Значение записываем имя (идентификатор) значения перечисления в приемнике
Значение = "ЗачитыватьАвтоматически";
Проанализируем ситуацию: в данном случае система возьмет строку "ЗачитыватьАвтоматически" и попытается найти соответствующее значение в перечислении базы-приемника. Важно, чтобы это имя в точности совпадало с именем значения в конфигураторе приемника.
Если вы хотите обойтись минимумом кода и не заходить в обработчики, можно воспользоваться встроенным механизмом вычислений в ПКС. Посмотрим, как настроить этот вариант:
"Автоматически".Важный нюанс: при использовании этого метода система воспринимает строку как готовый результат. Если для данного свойства не задано ПРК (Правило Конвертации Значений), система будет искать соответствие по внутреннему имени. Если же ПРК создано, то в нем должно быть описано соответствие между строкой "Автоматически" и реальным значением перечисления приемника.
Иногда логика заполнения документа в приемнике требует, чтобы объект уже был практически сформирован. В этом случае мы можем использовать обработчик «После загрузки» в Правилах Конвертации Объектов (ПКО). Выясним причину, почему это удобно: здесь мы работаем уже непосредственно с объектом базы-приемника на языке этой базы.
Рассмотрим пример кода в обработчике «После загрузки»:
// Прямое обращение к объекту и его реквизиту
Объект.СпособЗачетаАванса = Перечисления.СпособыЗачетаАванса.ЗачитыватьАвтоматически;
Обратите внимание на важные моменты при использовании этого способа:
В настройках ПКС есть стандартное поле «Значение по умолчанию». Мы можем указать там конкретное строковое значение. Система применит его в том случае, если источник вернул пустое значение (Неопределено или NULL). Однако для перечислений этот метод считается менее надежным, так как требует корректной настройки сопоставления типов между базами. Рекомендуем использовать программные методы (Способ 1 или 3) для большей предсказуемости результата.
Проанализируем ситуацию, когда одно и то же значение (например, организация или способ зачета) должно устанавливаться во многих документах сразу. Чтобы не дублировать код в каждом правиле, используем Параметры:
СпособЗачетаПоУмолчанию.
Значение = Параметры.СпособЗачетаПоУмолчанию;
Это позволит вам изменить логику обмена в одном месте, не редактируя десятки правил конвертации объектов.
Разберем основные грабли, на которые наступают разработчики при решении этой задачи:
ПередЗаписью), лучше использовать обработчик «При загрузке» в ПКО, а не «После загрузки».Значение = "Имя", КД 2.0 ищет значение в перечислении приемника именно по Имени (как оно задано в конфигураторе), а не по синониму.Таким образом, мы рассмотрели основные инструменты для работы с фиксированными значениями. Выбор конкретного метода зависит от того, насколько часто это значение будет меняться и требуется ли дополнительная логика при его установке. Если правила обмена уже подготовлены, для автоматической передачи сообщений по расписанию пригодится программа для регулярного обмена данными между базами 1С.