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

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

При настройке бесшовной интеграции между 1С:ERP Управление предприятием и 1С:Документооборот 2.1 часто возникает необходимость автоматического заполнения табличных частей. Одной из самых востребованных и в то же время сложных задач является корректное заполнение таблицы «Стороны». Обычного сопоставления реквизитов часто недостаточно, особенно если логика определения сторон договора в ERP сложнее, чем просто выбор одного контрагента. В рамках настройки интерфейса взаимодействия систем также будет полезен инструмент для вывода состояния согласования из 1С:ДО в формы списков ERP.

В этой статье мы подробно разберем, как использовать встроенный язык для формирования данных этой таблицы, рассмотрим нюансы работы библиотеки интеграции (БИД/DMIL) и выясним, какие программные модули задействуются в этом процессе.

Анализ проблемы и структуры данных

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

Проанализируем структуру объекта Параметры.Результат. Для табличных частей этот параметр должен представлять собой объект ТаблицаЗначений. Ключевым моментом здесь является соответствие имен колонок этой таблицы именам реквизитов в XDTO-пакете Документооборота, а не экранным заголовкам.

Шаг 1. Формирование таблицы значений в правилах интеграции

Для корректного заполнения реквизита «Стороны» в правиле заполнения необходимо выбрать вариант «Выражение на встроенном языке» и прописать алгоритм формирования таблицы. Рассмотрим пример кода, который должен быть размещен в этом поле:


// Создаем таблицу значений нужной структуры
Параметры.Результат = Новый ТаблицаЗначений;
Параметры.Результат.Колонки.Добавить("Сторона");      // Ссылка на Организацию или Контрагента
Параметры.Результат.Колонки.Добавить("Подписан");     // Булево
Параметры.Результат.Колонки.Добавить("ДатаПодписи"); // Дата

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

// Добавляем вторую сторону (контрагент)
НоваяСтрока = Параметры.Результат.Добавить();
НоваяСтрока.Сторона = Источник.Контрагент;
НоваяСтрока.Подписан = Ложь;

Важное замечание: в колонку Сторона должны передаваться именно ссылки (объекты). Библиотека интеграции сама позаботится о поиске соответствующих объектов в базе Документооборота по их уникальным идентификаторам или настроенным правилам синхронизации.

Шаг 2. Использование переопределяемого модуля

В некоторых случаях, особенно при использовании доработанных конфигураций или старых версий ERP (например, 2.4), стандартный механизм через интерфейс «Правил интеграции» может не отрабатывать корректно из-за особенностей библиотеки DMIL (Data Management Integration Library). В такой ситуации нам потребуется вмешательство в общий модуль ИнтеграцияС1СДокументооборотПереопределяемый.

Разберем алгоритм действий:

  1. Найдем процедуру ЗаполнитьРеквизитыИзПотребителя в указанном модуле.
  2. Проанализируем код в демо-базе библиотеки БИД (обычно идет в комплекте с дистрибутивом). Там содержатся эталонные примеры заполнения сложных объектов.
  3. Если процедура пустая, необходимо реализовать в ней логику передачи данных для таблицы «Стороны», чтобы система принудительно включала эти данные в пакет отправки.

Пример реализации в переопределяемом модуле может выглядеть следующим образом:


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

КонецПроцедуры

Шаг 3. Учет версионности и совместимости

Выясним причину, по которой код может не работать даже при правильном написании. Ключевой фактор — совместимость версий БИД (Библиотека интеграции с Документооборотом) и самой версии 1С:Документооборот. Функционал заполнения таблицы сторон через библиотеку активно развивался и стабильно заработал в версиях БИД начиная с 1.1.16 и выше.

Если вы столкнулись с ситуацией, когда данные «не долетают» до Документооборота, выполните следующие действия:

Диагностика ошибок заполнения

Рассмотрим метод проверки того, что именно ERP отправляет в Документооборот. Самый эффективный способ — включение логирования XDTO-пакетов. Если в исходящем XML-пакете отсутствует узел <Sides> или он пуст, значит проблема локализована на стороне ERP в момент формирования Параметры.Результат.

Если же данные в XML есть, но в Документообороте таблица пустая, проверьте сопоставление объектов. Возможно, контрагент из ERP не может быть найден в ДО, и система «тихо» игнорирует создание строки в таблице сторон. Для более глубокого анализа проблем обмена и выявления зависших пакетов синхронизации будет полезен отчет для диагностики ошибок синхронизации с Документооборотом 2.1.

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

← На главную