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