Как перенести сопроводительную информацию из 1С:Бизнес-сети в комментарий создаваемого документа

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

При работе с сервисом 1С:Бизнес-сеть в конфигурациях «Управление торговлей 11», «ERP Управление предприятием» или «Комплексная автоматизация» часто возникает задача автоматического заполнения реквизитов создаваемых документов. Одной из популярных задач является перенос текста из поля «Сопроводительная информация» (которое заполняет клиент при отправке заказа) в стандартное поле «Комментарий» создаваемого в нашей базе документа (например, Заказ клиента). Разберем по шагам, как локализовать нужный программный код и реализовать эту доработку.

Разграничение подсистем: ЭДО против Бизнес-сети

Первое, на что стоит обратить внимание при анализе ситуации — это разделение механизмов обмена. В типовых решениях 1С существуют две похожие, но архитектурно разные подсистемы:

  1. Стандартный ЭДО (обмен через операторов). Логика этой подсистемы обычно сосредоточена в модулях с префиксом ОбменСКонтрагентами.
  2. 1С:Бизнес-сеть (прямой обмен между пользователями 1С). Здесь логика находится в модулях с префиксом ИнтеграцияБизнесСеть.

Проанализируем типичную ошибку: попытку найти точку создания документа в модуле ОбменСКонтрагентамиУТ. Если вы работаете именно с Бизнес-сетью, этот модуль не будет задействован, и ваши точки останова не сработают. Рассмотрим правильные объекты для работы.

Где хранятся исходные данные

Сопроводительная информация не исчезает в никуда. Прежде чем будет создан Заказ клиента, данные попадают в промежуточный объект. Выясним причину, почему данные не видны в ОбработкеЗаполнения заказа. Текст сообщения физически хранится в справочнике ДокументыБизнесСети. В этом справочнике есть реквизиты, содержащие XML или JSON пакеты данных, а также отдельные поля для текстовых сообщений.

Для реализации задачи нам необходимо найти момент, когда программа считывает данные из этого справочника и начинает формировать объект ДокументОбъект.ЗаказКлиента.

Поиск точки входа для расширения

Посмотрим на ключевые методы, которые отвечают за сопоставление данных Бизнес-сети и реквизитов документа 1С. Наиболее правильной точкой для вмешательства является переопределяемый модуль. Рассмотрим процедуру:

ИнтеграцияБизнесСетьПереопределяемый.ПриЗаполненииОбъектаПоДаннымБизнесСети

Этот метод специально создан для того, чтобы разработчик мог дополнить логику заполнения документа, не изменяя основное ядро интеграции. В этот метод передается сам ДокументОбъект и структура данных, полученная из сервиса.

Реализация через расширение

Проанализируем пример кода, который можно внедрить в расширение для переноса информации. Нам понадобится создать метод с аннотацией &После для указанной выше процедуры:


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

Особенности отладки: Фоновые задания

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

  1. В конфигураторе откройте меню Отладка -> Настройка отладки.
  2. В списке флажков обязательно установите Фоновые задания.
  3. Если это не помогает, можно временно принудительно отключить фоновое выполнение. Найдите в коде место вызова ЗапуститьВыполнениеВФоне и измените логику так, чтобы процедура вызывалась напрямую.
  4. Также можно использовать запуск предприятия с параметром РежимОтладки в строке запуска.

Механизм дополнительных свойств

Иногда требуется передать данные между процедурами, которые не связаны напрямую. В 1С для этого эффективно используется механизм ДополнительныеСвойства. Если вы нашли место, где данные считываются, но объект документа еще не готов к записи, используйте следующую конструкцию:


ДокументОбъект.ДополнительныеСвойства.Вставить("ТекстИзБизнесСети", ТекстСопроводительнойИнформации);

Затем в модуле объекта (или в подписке на событие ПередЗаписью) вы сможете извлечь это значение и заполнить Комментарий:


Если ДокументОбъект.ДополнительныеСвойства.Свойство("ТекстИзБизнесСети") Тогда
    ДокументОбъект.Комментарий = ДокументОбъект.ДополнительныеСвойства.ТекстИзБизнесСети;
КонецЕсли;

Проверка существующих расширений

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

Совет: Используйте глобальный поиск по конфигурации и всем расширениям по строке ПриЗаполненииОбъектаПоДаннымБизнесСети, чтобы убедиться в отсутствии конфликтов.

Заключение

Подводя итог, скажем: ключ к решению задачи лежит в правильном определении подсистемы (Бизнес-сеть) и использовании переопределяемых модулей. Не забывайте про отладку фоновых заданий, так как именно в них происходит основная магия обмена данными с внешними сервисами 1С.

← На главную