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