При настройке бесшовной интеграции между решениями на платформе 1С:Предприятие (например, 1С:ERP, 1С:КА, 1С:УТ) и 1С:Документооборот (1С:ДО) специалисты часто сталкиваются с необходимостью автоматического заполнения реквизитов создаваемых документов. Одной из неочевидных задач является передача значений реквизитов, имеющих тип Перечисление на стороне 1С:ДО, если в базе-источнике (1С:ERP) аналогичного перечисления просто не существует.
В этой статье мы подробно разберем, как правильно передавать значения перечислений из 1С:ERP в 1С:Документооборот, почему стандартное обращение через метаданные вызывает ошибку компиляции и как использовать встроенные механизмы Библиотеки интеграции с документооборотом (БИД) для решения этой задачи.
Рассмотрим классическую ситуацию: нам необходимо в зависимости от даты окончания действия договора в 1С:ERP автоматически заполнить реквизит "Порядок продления" во внутреннем документе 1С:Документооборота. В 1С:ДО этот реквизит имеет тип ссылки на перечисление Перечисления.ПорядокПродления со значениями НеПродлевать, ПродлеватьДопускается и т.д.
Если мы попытаемся написать в правилах интеграции на стороне 1С:ERP прямой код:
Если Параметры.Источник.ДатаОкончанияДействия = Дата(1,1,1) Тогда
Параметры.Результат = Перечисления.ПорядокПродления.НеПродлевать;
КонецЕсли;
Система выдаст ошибку еще на этапе компиляции или проверки правила. Происходит это потому, что код правил выполняется в контексте информационной базы 1С:ERP. База ERP ничего не знает о метаданных конфигурации 1С:Документооборот. Перечисление ПорядокПродления физически отсутствует в структуре метаданных ERP, поэтому попытка обратиться к нему напрямую вызывает ошибку "Переменная не определена".
Для корректной передачи ссылочных данных (к которым относятся справочники, документы и перечисления) разработчики Библиотеки интеграции предусмотрели специальный механизм. При вычислении выражения в правилах интеграции результат работы нашего кода должен возвращаться через специальную структуру Параметры.
Чтобы передать значение перечисления в 1С:ДО, нам необходимо заполнить три обязательных свойства структуры Параметры:
Параметры.Результат — строковое представление значения для пользователя (синоним значения перечисления в ДО, например, "Не продлевать").Параметры.РезультатID — системное имя (идентификатор) значения перечисления на стороне 1С:ДО (например, "НеПродлевать").Параметры.РезультатТип — имя типа данных из XDTO-пакета, который используется веб-сервисом интеграции для передачи этого перечисления.Рассмотрим практическую реализацию. Нам нужно передать значение перечисления ПорядокПродления.НеПродлевать в 1С:ДО, если дата окончания договора не заполнена (равна пустой дате 01.01.0001).
Пропишем следующий код в правиле интеграции для соответствующего реквизита:
Если Параметры.Источник.ДатаОкончанияДействия = Дата(1,1,1) Тогда
// Задаем пользовательское представление, которое отобразится в интерфейсе
Параметры.Result = "Не продлевать";
// Указываем имя значения перечисления в конфигураторе 1С:ДО
Параметры.РезультатID = "НеПродлевать";
// Указываем соответствующий XDTO-тип из веб-сервиса интеграции
Параметры.РезультатТип = "DMProlongationOrder";
Иначе
// Если дата заполнена, можем оставить значение неопределенным или задать другое значение
Параметры.Результат = Неопределено;
КонецЕсли;
Этот код абсолютно безопасен для компиляции в 1С:ERP, так как он оперирует исключительно стандартными типами данных (строками) и свойствами структуры Параметры.
Для успешной интеграции критически важно правильно указать свойство Параметры.РезультатТип. Все типы данных для интеграции описаны в XDTO-пакетах конфигурации 1С:Документооборот.
Выполним следующие шаги для определения точного имени типа:
DM3, DM4 и т.д. в зависимости от используемой версии веб-сервиса).DM. Например, для перечисления ПорядокПродления типом XDTO является DMProlongationOrder.Ниже приведены примеры соответствия популярных перечислений 1С:ДО и их типов в пакете DM:
DMSigningVariantsDMDeliveryMethodsDMWorkingDateTypesНачиная с современных релизов Библиотеки интеграции (в составе 1С:ДО 2.1.13 и выше), механизм сопоставления стал более гибким. Если синонимы значений перечисления в ERP и в 1С:ДО совпадают, либо если вы передаете в свойство Параметры.Результат точный синоним значения из 1С:ДО, система может попытаться выполнить сопоставление автоматически.
Тем не менее, явное указание свойств РезультатID и РезультатТип гарантирует стабильную работу интеграции при любых изменениях интерфейса конфигурации и является наиболее надежным профессиональным подходом.
Поскольку код правил интеграции выполняется на сервере в безопасном режиме через вызов встроенной функции платформы Выполнить(), его невозможно отладить простой установкой точки останова в модуле правил.
Проанализируем методику отладки такого кода:
ОбщегоНазначения.ВыполнитьВБезопасномРежиме (или аналогичную функцию выполнения кода в зависимости от версии БСП).Выполнить().Параметры "вживую" и проверить правильность заполнения всех свойств перед отправкой пакета данных в веб-сервис 1С:ДО.Используя данный подход, вы сможете легко связывать любые разнородные данные между ERP и Документооборотом, обеспечивая высокую скорость работы бесшовной интеграции и отсутствие ошибок у конечных пользователей.