При работе с модулем интеграции СБИС для 1С часто возникает задача доработать стандартную выгрузку: добавить в формируемый XML-файл новые теги или атрибуты с данными из учетной системы. Например, может потребоваться добавить информацию о транспортной компании или номере заказа. Попытка внести изменения напрямую в код обработки СБИС или в XDTO-пакеты конфигурации 1С — неверный путь, так как все доработки будут утеряны при первом же обновлении настроек отправки документов ЭДО на новый формат УПД.
Рассмотрим, как корректно и безопасно для будущих обновлений кастомизировать структуру выгружаемого XML-файла на примере добавления тега <ТранГруз> в сведения о передаче документа.
Прежде чем приступать к доработке, важно понимать архитектуру обработки СБИС. Процесс формирования конечного XML-файла — это не прямое создание документа по XDTO-схеме из 1С. Он состоит из нескольких этапов:
Именно поэтому для кастомизации выгрузки нужно работать с механизмами, которые предоставляет сама обработка СБИС, а не пытаться вмешиваться в стандартные объекты конфигурации 1С — для этой задачи есть обработка выгрузки УПД в XML с гибкой настройкой реквизитов.
Ключевой принцип доработки — неизменность стандартных компонентов. Для этого СБИС предлагает два мощных инструмента:
ВнешниеФункции_Клиент.epf. Специальная обработка, в которой можно писать собственные функции на языке 1С для реализации сложной логики получения данных или модификации итогового файла.Чтобы добавить тег <ТранГруз> в нужное место структуры, например, внутрь тега <СвПер>, необходимо выполнить два шага: создать пользовательский файл настроек и, при необходимости, описать логику получения данных в обработке внешних функций.
Сначала нужно найти стандартный файл, который отвечает за выгрузку вашего документа, и создать на его основе пользовательскую версию.
Найдите каталог, где хранятся настройки обработки СБИС. Обычно это папка C:\Sbis1C\ на компьютере пользователя.
В этом каталоге найдите стандартный файл настроек для выгрузки УПД в формате XML (например, для документа «Реализация товаров и услуг»). Эти файлы имеют расширение .sbis3.xml. Например, ВО82БУХ3-0-67-38_РеализацияТоваровУслуг.sbis3.xml.
Скопируйте этот файл в ту же папку и переименуйте его, убрав расширение .sbis3. В нашем примере новый файл будет называться ВО82БУХ3-0-67-38_РеализацияТоваровУслуг.xml. Обработка СБИС при запуске обнаружит этот файл и будет использовать его с приоритетом над стандартным.
Откройте созданный XML-файл в любом текстовом редакторе. Найдите в структуре место, куда нужно вставить новый тег. В нашем случае это узел <СвПер>. Добавьте в него нужный тег и укажите, как получать для него данные. Для этого можно вызвать функцию из внешней обработки.
Посмотрим на условный пример содержимого файла настроек:
<?xml version="1.0" encoding="UTF-8"?>
<ини>
<мФайл Имя="ЭДОНакл">
<!-- ... другие теги ... -->
<СвПродПер>
<СвПер СодОпер="Реализация">
<ОснПер НаимОсн="Без документа-основания"/>
<!-- Вот наш новый тег. Данные для атрибута СвТранГруз
будут получены вызовом функции сбисПолучитьДанныеТранспорта() -->
<ТранГруз СвТранГруз="{сбисПолучитьДанныеТранспорта()}"/>
</СвПер>
</СвПродПер>
<!-- ... другие теги ... -->
</мФайл>
</ини>
Конструкция {имя_функции()} в значении атрибута указывает обработке СБИС, что нужно вызвать экспортную функцию с таким именем из обработки ВнешниеФункции_Клиент.epf и подставить ее результат.
Теперь нужно создать саму функцию, которая будет возвращать данные для нашего тега. Это особенно актуально, если вы формируете специфические документы, такие как OZON УПД (поможет обработка формирования XML-файлов УПД и УКД для OZON) или WildBerries УПД «ДОП».
Если у вас еще нет обработки ВнешниеФункции_Клиент.epf, создайте ее в конфигураторе 1С как новую внешнюю обработку.
Сохраните ее либо в каталоге настроек СБИС (например, C:\Sbis1C\), либо загрузите в справочник "Дополнительные отчеты и обработки" вашей конфигурации 1С. Обработка СБИС будет искать ее в обоих местах.
В модуле объекта этой обработки создайте экспортную функцию с именем, которое вы указали в XML-файле на предыдущем шаге.
Посмотрим на пример кода для ВнешниеФункции_Клиент.epf:
Функция сбисПолучитьДанныеТранспорта(Контекст) Экспорт
// В параметре "Контекст" передаются данные по текущей выгрузке,
// включая ссылку на исходный документ 1С.
// В этой функции можно реализовать и исправление ошибок данных,
// например, если требуется исправление ошибки заполнения платежно-расчетных документов в XML-файле.
СсылкаНаДокумент = Контекст.Документ.ДокументОснование;
ЗначениеТранспорта = "";
// Здесь может быть ваша сложная логика для получения данных
ЗначениеТранспорта = "Тест_Транспорт";
Возврат ЗначениеТранспорта;
КонецФункции
После сохранения обработки и файла настроек, при следующей выгрузке документа через СБИС, в XML-файл будет добавлен тег <ТранГруз> с данными, которые вернула ваша функция.
В обсуждениях часто упоминается еще одна полезная функция — сбисПослеФормированияДокумента. Она также размещается в ВнешниеФункции_Клиент.epf, но вызывается уже после того, как основной XML-документ сформирован по файлам настроек.
Эта функция удобна, когда нужно добавить тег в конец документа или в конец какой-либо секции, не меняя основную структуру. Однако, если требуется вставить тег строго в определенное место между другими тегами (как в нашем примере), то метод с переопределением файла настроек является более правильным и управляемым.
Пример использования для добавления данных в конец документа:
// Функция добавляется в модуль объекта обработки "ВнешниеФункции_Клиент.epf"
Функция сбисПослеФормированияДокумента(Док, Кэш, Контекст) Экспорт
// Проверяем, что для документа нужно добавить сведения о выбытии маркированных товаров
Если Контекст.Документ.ДокументОснование.ОперацияВыбытияМаркированныхТоваров <> 0 Тогда
// Добавляем новый параметр в корневой узел документа
Док.Файл.Документ.Параметр.Добавить(Новый Структура("Имя, Значение", "СвВыбытияМАРК", Контекст.Документ.ДокументОснование.ОперацияВыбытияМаркированныхТоваров));
КонецЕсли;
КонецФункции
Важно понимать: этот метод добавляет узел на верхний уровень. Для встраивания тега вглубь иерархии XML используйте первый способ с пользовательскими файлами настроек.
Таким образом, комбинируя пользовательские XML-файлы и внешние функции, можно гибко настраивать выгрузку данных через СБИС, не рискуя потерять доработки при обновлении модуля интеграции.