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