Как передать дополнительные реквизиты из 1С:ERP в 1С:Документооборот через веб-сервис

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

Интеграция между 1С:ERP Управление предприятием и 1С:Документооборот (ДО) — это мощный инструмент, который часто требует тонкой настройки под конкретные бизнес-процессы. Одной из типовых, но не всегда очевидных задач является передача дополнительных реквизитов, которые отсутствуют в стандартном составе метаданных обмена. Рассмотрим подробно, как реализовать этот механизм, разберем типичные ошибки при работе с перечислениями и настроим скрипты заполнения.

Предварительная настройка на стороне 1С:Документооборот

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

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

Если реквизит является перечислением, создадим для него соответствующие значения в 1С:ДО. Помните, что для успешной передачи через веб-сервис нам потребуется знать внутреннее имя значения (Name), а не только его синоним.

Настройка правил заполнения реквизитов в 1С:ERP

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

Перейдем в раздел НСИ и Администрирование — Интеграция с 1С:Документооборотом — Правила интеграции. Найдем правило для нашего объекта. В таблице «Правила заполнения реквизитов» дополнительные реквизиты из ДО обычно подтягиваются автоматически и помечаются специальной иконкой. Если этого не произошло, убедитесь, что веб-сервис DMService доступен и авторизация пройдена успешно.

Использование скриптов для передачи данных

Часто прямой передачи значения «поле в поле» недостаточно. Например, когда тип данных в ERP не совпадает с типом в ДО или требуется сложная логика вычисления. В таких случаях мы используем Скрипт заполнения. Проанализируем, как правильно написать алгоритм в окне настройки правила.

В скрипте нам доступна переменная Источник (объект ERP) и структура Параметры. Результат вычисления мы должны поместить в Параметры.Результат. Рассмотрим пример получения значения:


// Пример передачи строкового значения из реквизита объекта ERP
Параметры.Результат = Источник.Организация.НаименованиеПолное;

Важно понимать, что при передаче дополнительных реквизитов БИД сама упаковывает результат в структуру Property — Value для XDTO-пакета веб-сервиса.

Решение проблемы с передачей перечислений

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

Выясним причину: веб-сервис ожидает строковый идентификатор значения, который сопоставим с внутренней логикой ДО. Разберем правильные и неправильные варианты:

  1. Неправильно: Параметры.Результат = Перечисления.ПорядокПродления.АвтоматическиНаГод; — это приведет к ошибке в Журнале регистрации, так как объект типа «Ссылка» не может быть передан через веб-сервис без преобразования.
  2. Неправильно: Параметры.Результат = "Автоматически на год"; — передача синонима часто не срабатывает, если логика веб-сервиса ожидает программное имя.
  3. Правильно: Передавать строковое имя (Name) или использовать поиск по коду.

Рассмотрим пример корректного скрипта для передачи значения перечисления:


// Если реквизит в ДО — это перечисление, передаем его строковый идентификатор
Если Источник.НужныйФлаг = Истина Тогда
    Параметры.Результат = "АвтоматическиНаГод"; // Указываем внутреннее имя значения в ДО
Иначе
    Параметры.Результат = "НеПродлевать";
КонецЕсли;

Если же дополнительный реквизит в ДО имеет тип «Дополнительное значение» (ссылка на ПВХ), то ERP должна передать строку, которая точно совпадает с наименованием этого значения в справочнике дополнительных значений ДО. Система интеграции сама попытается найти подходящий объект по строке.

Анализ ошибок через Журнал регистрации

Если данные не передаются, проанализируем Журнал регистрации на стороне 1С:ERP. Ищите записи по источнику «Интеграция с 1С:Документооборот». Часто там можно встретить ошибки вида «Ошибка преобразования данных XDTO». Это верный признак того, что тип значения, который вы возвращаете в Параметры.Результат, не соответствует ожидаемому типу реквизита в 1С:ДО.

Посмотрим на типичный случай: вы пытаетесь передать число, а в ДО реквизит настроен как строка. В этом случае обязательно используйте функцию Строка() в вашем скрипте:


// Принудительное приведение типа для синхронизации с ДО
Параметры.Результат = Строка(Источник.НомерАкта);

Доработка через расширение (для сложных случаев)

В редких ситуациях, когда стандартных правил и скриптов недостаточно (например, нужно передать массив файлов или специфическую структуру XDTO), потребуется вмешательство в конфигуратор. Основная логика подготовки данных сосредоточена в общих модулях:

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

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

← На главную