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

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

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

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

Разберем причину: почему стандартное заполнение не работает

Когда мы настраиваем правила интеграции, нам кажется, что в Параметры.Источник попадает обычная ссылка на объект (например, СправочникСсылка.НаправленияДеятельности). Однако архитектура бесшовной интеграции построена на использовании веб-сервисов и обмене данными в формате XDTO (XML Data Transfer Objects).

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

Шаг 1. Идентификация данных в источнике

Прежде чем писать код, необходимо выяснить, где именно в объекте-источнике (например, в документе Заявка на расходование ДС) хранятся нужные данные. Реквизит может находиться как в «шапке» документа, так и в табличной части (например, РасшифровкаПлатежа). Рассмотрим пример, когда значение берется из шапки документа.

Если мы используем выражение на встроенном языке, нам доступен параметр Параметры.Источник. Важно понимать, что обращение к нему должно учитывать структуру XDTO-пакета, которая описана в схемах интеграции.

Шаг 2. Преобразование XDTO в ссылку базы данных

Чтобы «оживить» данные и получить из XDTO-объекта полноценную ссылку, с которой можно работать (искать по наименованию, получать реквизиты), следует использовать функции общих модулей интеграции. В большинстве конфигураций, поддерживающих БСП и интеграцию с ДО, за это отвечает модуль ИнтеграцияС1СДокументооборотБазоваяФункциональность.

Посмотрим на пример кода, который позволяет получить ссылку на контрагента из XDTO-объекта, чтобы затем выгрузить связанного с ним партнера:


// Получаем объект XDTO из источника
Контрагент_XDTO = Параметры.Источник.correspondent; 

Если НЕ ПустаяСтрока(Строка(Контрагент_XDTO)) Тогда
    // Преобразуем XDTO в реальную ссылку справочника Контрагенты
    КонтрагентСсылка = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ЗначениеРеквизитаПоОбъектуXDTO(
        Контрагент_XDTO, 
        Тип("СправочникСсылка.Контрагенты")
    );
    
    // Теперь, имея ссылку, мы можем обратиться к любому её реквизиту
    Если ЗначениеЗаполнено(КонтрагентСсылка) Тогда
        Параметры.Результат = КонтрагентСсылка.Партнер;
    КонецЕсли;
КонецЕсли;

Шаг 3. Реализация логики для «Направления деятельности» и «Проекта»

Вернемся к нашей задаче: передача Направления деятельности в Проект. Если системы не синхронизированы по внутренним идентификаторам (UUID), нам придется реализовать поиск по наименованию. Рассмотрим, как это сделать правильно, учитывая контекст выполнения кода.

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

  1. Извлекаем XDTO-объект направления деятельности из источника.
  2. Преобразуем его в ссылку ERP.
  3. Если ссылка получена, берем её наименование.
  4. Выполняем поиск в справочнике Проекты на стороне Документооборота (или наоборот, в зависимости от того, в какой системе выполняется правило).

Пример кода для выражения заполнения:


// 1. Пытаемся получить ссылку из источника (ERP)
НаправлениеXDTO = Параметры.Источник.НаправлениеДеятельности;
Если НаправлениеXDTO <> Неопределено Тогда
    
    // Используем универсальный метод получения ссылки
    СсылкаНаНаправление = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ЗначениеРеквизитаПоОбъектуXDTO(
        НаправлениеXDTO, 
        Тип("СправочникСсылка.НаправленияДеятельности")
    );
    
    Если ЗначениеЗаполнено(СсылкаНаНаправление) Тогда
        // 2. Ищем проект в целевой системе по наименованию
        НаименованиеИскомое = Строка(СсылкаНаНаправление);
        ПроектСсылка = Справочники.Проекты.НайтиПоНаименованию(НаименованиеИскомое);
        
        Если НЕ ПроектСсылка.Пустая() Тогда
            Параметры.Результат = ПроектСсылка;
        КонецЕсли;
    КонецЕсли;
КонецЕсли;

Важные нюансы при работе с Документооборотом 3.0

Права доступа и создание новых объектов: Если вы решите не просто искать проект, но и создавать его в случае отсутствия, помните, что код выполняется под определенным пользователем (обычно это учетная запись, под которой работает веб-сервис интеграции). У этой учетной записи должны быть полные права на справочник Проекты.

Поиск в табличных частях: Часто реквизиты, влияющие на проектную деятельность, находятся в табличных частях. Если нужно вытащить направление деятельности из первой строки расшифровки платежа, код будет выглядеть так:


Если Параметры.Источник.РасшифровкаПлатежа.Количество() > 0 Тогда
    СтрокаТЧ = Параметры.Источник.РасшифровкаПлатежа[0];
    Параметры.Результат = СтрокаТЧ.НаправлениеДеятельности; // Здесь система сама попытается привести типы, если это возможно
КонецЕсли;

Методика отладки правил интеграции

Выясним, почему код может не срабатывать, даже если он кажется верным. Главная сложность — невозможность стандартной отладки (через F5) в момент вызова веб-сервиса. Если сопоставление объектов осложняется тем, что они создавались в базах вручную, для миграции данных можно использовать инструмент для сопоставления ссылок по любым полям поиска без программирования.

Рассмотрим способы «прощупать» данные:

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

← На главную