Как в правилах интеграции 1С:ERP с 1С:Документооборот заполнить перечисление?

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

При настройке бесшовной интеграции между решениями на платформе 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С:ДО, нам необходимо заполнить три обязательных свойства структуры Параметры:

  1. Параметры.Результат — строковое представление значения для пользователя (синоним значения перечисления в ДО, например, "Не продлевать").
  2. Параметры.РезультатID — системное имя (идентификатор) значения перечисления на стороне 1С:ДО (например, "НеПродлевать").
  3. Параметры.РезультатТип — имя типа данных из XDTO-пакета, который используется веб-сервисом интеграции для передачи этого перечисления.

Пошаговый пример реализации правила

Рассмотрим практическую реализацию. Нам нужно передать значение перечисления ПорядокПродления.НеПродлевать в 1С:ДО, если дата окончания договора не заполнена (равна пустой дате 01.01.0001).

Пропишем следующий код в правиле интеграции для соответствующего реквизита:


Если Параметры.Источник.ДатаОкончанияДействия = Дата(1,1,1) Тогда
    // Задаем пользовательское представление, которое отобразится в интерфейсе
    Параметры.Result = "Не продлевать"; 
    
    // Указываем имя значения перечисления в конфигураторе 1С:ДО
    Параметры.РезультатID = "НеПродлевать"; 
    
    // Указываем соответствующий XDTO-тип из веб-сервиса интеграции
    Параметры.РезультатТип = "DMProlongationOrder"; 
Иначе
    // Если дата заполнена, можем оставить значение неопределенным или задать другое значение
    Параметры.Результат = Неопределено;
КонецЕсли;

Этот код абсолютно безопасен для компиляции в 1С:ERP, так как он оперирует исключительно стандартными типами данных (строками) и свойствами структуры Параметры.

Как узнать точное имя типа XDTO (РезультатТип)?

Для успешной интеграции критически важно правильно указать свойство Параметры.РезультатТип. Все типы данных для интеграции описаны в XDTO-пакетах конфигурации 1С:Документооборот.

Выполним следующие шаги для определения точного имени типа:

  1. Откроем базу 1С:Документооборот в режиме Конфигуратора.
  2. В дереве метаданных перейдем в ветку Общие -> XDTO-пакеты.
  3. Найдем пакет с именем DM (в версиях ДО 3.0 это могут быть пакеты DM3, DM4 и т.д. в зависимости от используемой версии веб-сервиса).
  4. В списке типов пакета найдем интересующий нас объект. Обычно имена типов соответствуют именам объектов в конфигурации с префиксом DM. Например, для перечисления ПорядокПродления типом XDTO является DMProlongationOrder.

Ниже приведены примеры соответствия популярных перечислений 1С:ДО и их типов в пакете DM:

Автоматическое сопоставление по синонимам (для БИД новых версий)

Начиная с современных релизов Библиотеки интеграции (в составе 1С:ДО 2.1.13 и выше), механизм сопоставления стал более гибким. Если синонимы значений перечисления в ERP и в 1С:ДО совпадают, либо если вы передаете в свойство Параметры.Результат точный синоним значения из 1С:ДО, система может попытаться выполнить сопоставление автоматически.

Тем не менее, явное указание свойств РезультатID и РезультатТип гарантирует стабильную работу интеграции при любых изменениях интерфейса конфигурации и является наиболее надежным профессиональным подходом.

Как отлаживать вычисляемые правила интеграции?

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

Проанализируем методику отладки такого кода:

  1. Откроем конфигурацию 1С:ERP (или другой интегрируемой системы) в режиме Конфигуратора.
  2. Найдем общий модуль ОбщегоНазначения.
  3. Найдем функцию ВыполнитьВБезопасномРежиме (или аналогичную функцию выполнения кода в зависимости от версии БСП).
  4. Поставим точку останова внутри этой функции непосредственно перед вызовом метода Выполнить().
  5. Запустим сеанс под управлением отладчика, выполним действие, приводящее к интеграции (например, запись договора в ERP), и при остановке в отладчике перейдем к анализу локальных переменных. Это позволит нам увидеть структуру Параметры "вживую" и проверить правильность заполнения всех свойств перед отправкой пакета данных в веб-сервис 1С:ДО.

Используя данный подход, вы сможете легко связывать любые разнородные данные между ERP и Документооборотом, обеспечивая высокую скорость работы бесшовной интеграции и отсутствие ошибок у конечных пользователей.

← На главную