Как доработать внешнюю обработку обмена 1С:БП 3.0 со СБИС для изменения данных в XML

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

Работа с внешней обработкой СБИС (Saby) для обмена электронными документами (удобно через модуль юридически значимого ЭДО для 1С) часто вызывает трудности у разработчиков из-за её сложной архитектуры. Код обработки сильно разветвлен, использует динамические вызовы процедур и сложные структуры параметров. Рассмотрим подробнее, как устроена эта система, где искать механизмы формирования XML-файлов и как правильно внести изменения, не нарушив общую работоспособность обмена.

Архитектура формирования данных и поиска точки входа

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

Процесс состоит из трех основных этапов:

  1. Сбор данных из информационной базы: На этом этапе выполняются запросы к табличным частям и реквизитам документов 1С. Результат помещается в структуру или дерево значений (часто называется ДеревоДанных).
  2. Подготовка структуры для шаблонизатора: Собранные данные преобразуются в промежуточный формат, который понимает движок СБИС.
  3. Накладывание данных на шаблон: Обработка берет макет (текстовый документ) с описанием структуры XML и заменяет в нем переменные (метки) на реальные значения.

Для того чтобы подменить контрагента, договор или номер документа, нам нужно внедриться на первом или втором этапе. Выясним причину, по которой поиск по тексту «ЗаписатьXML» не дает результатов: итоговый файл собирается через специализированный метод СформироватьДокументПоШаблону(), который работает с макетами типа «Шаблоны_Выгрузки».

Где искать логику формирования XML

Разберем по шагам, в каких объектах сосредоточена основная логика:

Макеты обработки: Обратите внимание на макеты с именами вроде Шаблон_УПД_... или Шаблон_ТОРГ12_... — для настройки формирования данных есть универсальная выгрузка документов в XML для ЭДО. Это текстовые файлы, внутри которых описана структура XML с вкраплениями кода в угловых скобках или через символы #. Если вам нужно изменить статичный тег или добавить новое поле, которое уже есть в структуре данных, правки вносятся именно здесь.

Процедура сбора данных: Основная работа по заполнению структур происходит в методе СобратьДанныеДокумента. Именно здесь выполняется текст запроса, который вы могли найти ранее. Результат выполнения запроса обходится в цикле, и данные помещаются в структуру ДанныеДокумента.

Для модификации данных рекомендуется найти процедуру ПослеФормированияДанныхДляВыгрузки. Она является идеальной точкой для переопределения значений — для этой задачи есть автоматическая выгрузка УПД в XML формат. Рассмотрим пример кода, который можно внедрить для подмены договора:


// Пример модификации данных перед отправкой в шаблонизатор
Процедура ПослеФормированияДанныхДляВыгрузки(Контекст, ДанныеДокумента) Экспорт
    
    // Проверяем тип документа, если нужно
    Если ДанныеДокумента.ТипДокумента = "Реализация" Тогда
        // Реализуем свою логику выбора данных
        Если ДанныеДокумента.Контрагент.Наименование = "Старый Клиент" Тогда
            ДанныеДокумента.Договор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию("Новый Договор");
            // Обновляем строковые представления для XML
            ДанныеДокумента.Договор_Номер = ДанныеДокумента.Договор.Номер;
            ДанныеДокумента.Договор_Дата = Формат(ДанныеДокумента.Договор.Дата, "ДФ=dd.MM.yyyy");
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры

Использование пользовательских алгоритмов без изменения кода

Разработчики СБИС предусмотрели механизм «Расширений», чтобы ваши изменения не затирались при автоматическом обновлении обработки. Выясним, как это работает. В настройках обработки есть возможность подключить внешние файлы алгоритмов или заполнить поле «Пользовательские поля».

Проанализируем структуру ПараметрыАлгоритмов. Если добавить в эту структуру поле с определенным ключом, шаблонизатор подхватит его автоматически. Это позволяет добавлять свои теги в XML без глубокого анализа кода основной обработки. Достаточно прописать в шаблоне имя нового поля в квадратных скобках, например [МоеПользовательскоеПоле], и заполнить его в коде расширения.

Безопасная отладка без отправки документов

Одной из главных проблем является страх отправить тестовые данные на «боевой» аккаунт контрагента. Разберем, как настроить среду для безопасной разработки (поможет инструмент логирования и анализа HTTP-запросов):

  1. Режим выгрузки в каталог: В настройках транспорта (раздел «Настройки обмена» или «Параметры подключения») вместо прямого API СБИС выберите способ «Локальная папка». Теперь при нажатии кнопки «Отправить» обработка не будет обращаться к серверу, а сформирует итоговый XML и сохранит его на ваш диск. Это позволит вам изучить структуру файла в любом текстовом редакторе.
  2. Точка останова: Установите точку останова в общем модуле или модуле объекта обработки на методе Записать() для объекта типа ТекстовыйДокумент. Обычно это происходит в самом конце цепочки вызовов экспорта.
  3. Использование тестового портала: СБИС предоставляет доступ к среде fix-online.sbis.ru. Это полная копия системы для разработчиков, где можно регистрировать тестовые организации и выполнять любые действия без юридических последствий.

Рекомендации по сохранению изменений

Важно помнить, что внешняя обработка СБИС часто обновляется программно при запуске. Если вы внесли правки в основную обработку .epf, они могут быть потеряны. Рассмотрим правильные способы фиксации кода:

Способ 1: Отключение автообновления. В параметрах обработки можно снять флаг «Автоматически проверять обновления». Однако это лишит вас возможности получать исправления законодательных изменений от разработчика.

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

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


// Функция в подключаемом модуле расширения
Функция ВыполнитьДействие(ИмяСобытия, Параметры) Экспорт
    
    Если ИмяСобытия = "ПередВыгрузкой" Тогда
        // Здесь меняем данные в структуре Параметры.Данные
        Параметры.Данные.НомерДокумента = "ТЕСТ-" + Параметры.Данные.НомерДокумента;
    КонецЕсли;
    
    Возврат Истина;
КонецФункции

Использование такого подхода гарантирует, что при обновлении версии основной обработки от СБИС ваша логика подмены данных останется нетронутой и продолжит функционировать. Это наиболее профессиональный путь доработки сложных интеграционных решений.

← На главную