Как настроить перенос реквизита из Перечисления в Булево в Конвертации данных 2.0?

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

При настройке обмена данными между конфигурациями «Управление торговлей» (УТ) и «Розница» (РТ) через «Конвертацию данных 2.0» (КД2) разработчики часто сталкиваются с ситуацией, когда один и тот же по смыслу реквизит в разных базах имеет разные типы данных. Классический пример — перенос признака налогообложения НДС. В УТ это реквизит НалогообложениеНДС со значением типа ПеречислениеСсылка.ТипыНалогообложенияНДС, а в «Рознице» — реквизит УчитыватьНДС с типом Булево (Истина/Ложь).

В этой статье мы подробно разберем, почему возникают ошибки при попытке сопоставить эти реквизиты напрямую, проанализируем внутренние механизмы работы обработчиков КД2 и рассмотрим два надежных способа решения этой задачи.

Анализ типичных ошибок начинающих разработчиков

Разберем основные ошибки, с которыми столкнулся автор темы, чтобы понять, как работает платформа 1С и механизм КД2 изнутри.

Ошибка №1: Попытка присвоить значение напрямую через «Приемник»

Автор попытался написать в обработчике ПКС (Правило конвертации свойства) «Перед выгрузкой» следующий код:

Приемник.УчитыватьНДС = Истина;

Это привело к ошибке «Поле объекта не обнаружено (УчитыватьНДС)». Выясним причину. В обработчике ПКС «Перед выгрузкой» параметр Приемник является не объектом базы данных, а обычной строкой, которая содержит имя выгружаемого свойства (в нашем случае "УчитыватьНДС"). Пытаясь обратиться к свойству строковой переменной через точку, мы закономерно вызываем ошибку платформы. Для передачи значения в ПКС предназначен специальный предопределенный параметр Значение.

Ошибка №2: Некорректное обращение к значениям перечисления

Попытка написать условие сравнения в виде:

Если Источник.НалогообложениеНДС = ЗакупкаОблагаетсяНДС Тогда ...

вызывает ошибку «Переменная не определена (ЗакупкаОблагаетсяНДС)». В платформе 1С:Предприятие значения перечислений не являются глобальными переменными кода. К ним необходимо обращаться через менеджер метаданных: Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяНДС.

Ошибка №3: Ловушка синонимов и экранных представлений в УТ

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

---

Вариант А. Настройка на стороне источника (в ПКС «Перед выгрузкой»)

Этот вариант является наиболее правильным и классическим с точки зрения методологии разработки в «Конвертации данных 2.0». Мы преобразуем значение еще на этапе выгрузки из базы-источника (УТ).

Выполним следующие шаги для настройки ПКС:

  1. Откроем правила конвертации в программе «Конвертация данных 2.0».
  2. Найдем ПКО (Правило конвертации объекта) для документа: из ПриобретениеТоваровУслуг в ПоступлениеТоваров.
  3. В табличной части «Правила конвертации свойств» (ПКС) сопоставим реквизит источника НалогообложениеНДС с реквизитом приемника УчитыватьНДС.
  4. Откроем свойства этого ПКС и перейдем в обработчик события «Перед выгрузкой».
  5. Напишем код, который проверит значение перечисления в источнике и вернет булево значение в параметр Значение:

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

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


// Получаем строковое имя значения перечисления из XML-представления
ИмяЗначения = XMLСтрока(Источник.НалогообложениеНДС);

Если ИмяЗначения = "ПродажаОблагаетсяНДС" Тогда
    Значение = Истина;
Иначе
    Значение = Ложь;
КонецЕсли;

---

Вариант Б. Настройка на стороне приемника (в ПКО «После загрузки»)

Если мы не хотим настраивать логику сопоставления типов при выгрузке, мы можем перенести это решение на сторону базы-приемника (Розницы). В этом случае обработка происходит в момент, когда объект уже загружен в память перед его непосредственной записью в базу данных.

Разберем этот вариант по шагам:

  1. В ПКС для реквизита УчитыватьНДС оставим поле «Источник» пустым (не сопоставляем его напрямую).
  2. Перейдем в настройки ПКО документа ПоступлениеТоваров и откроем обработчик события «После загрузки».
  3. В этом обработчике нам доступен параметр Объект. Это готовый к записи документ «Розницы», свойства которого мы можем изменять напрямую.

Если нам нужно принудительно устанавливать флаг учета НДС в значение «Истина» для всех загружаемых документов из УТ, напишем простой код:


// Принудительно включаем признак учета НДС для всех загружаемых документов
Объект.УчитыватьНДС = Истина;

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

  1. В ПКС для свойства НалогообложениеНДС установим флаг «Передавать в параметр» и дадим ему имя, например, "Налогообложение".
  2. В ПКО документа в обработчике «После загрузки» напишем следующий алгоритм:

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

Таким образом, мы успешно «подружили» два разных типа данных (Перечисление и Булево) при обмене между конфигурациями. Использование параметра Значение в ПКС или обработка через ПараметрыОбъекта в ПКО — это стандартные и наиболее эффективные практики при работе с программным комплексом «1С:Конвертация данных 2.0».

← На главную