Как правильно добавить новые XML-теги в файлы настроек СБИС для 1С

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

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

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

Архитектура конфигурационных файлов СБИС для 1С

Перед тем как вносить изменения в файлы настроек, проанализируем архитектуру интеграционного решения СБИС. Внешняя обработка (например, Sbis1C_UF.epf или Sbis1C.epf) использует конфигурационные файлы для сопоставления метаданных 1С и структуры результирующего XML. Эти файлы делятся на два типа:

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

Таким образом, все наши доработки мы будем делать исключительно в пользовательском XML-файле.

Синтаксис обращения к реквизитам 1С из XML-настроек

СБИС использует декларативный синтаксис для связи XML-тегов с объектами 1С. Выделяют два основных типа обращений:

  1. Квадратные скобки [...]: Используются для прямого обращения к реквизитам объектов 1С. Например, [Документ].Контрагент или [ТаблДок].Номенклатура.
  2. Фигурные скобки {...}: Предназначены для вызова исполняемого кода 1С — встроенных или внешних функций. Это необходимо, когда данные нельзя получить простым обращением через точку (например, если требуется сделать сложный запрос к базе данных).

Выясним, как применить эти правила на практике для решения конкретных задач.

Добавление артикула номенклатуры

Рассмотрим ситуацию, когда в табличную часть выгружаемого XML-документа нужно добавить артикул. Обычно артикул хранится в справочнике Номенклатура.

Разберем по шагам, как прописать обращение к артикулу. Найдем в XML-файле настроек узел, описывающий табличную часть товаров (обычно это блок коллекции мТаблДок Имя="Товары"), и добавим в структуру нашего товара новый тег:


<Товар>
    <Артикул>[ТаблДок].Номенклатура.Артикул</Артикул>
    <Наименование>[ТаблДок].Номенклатура.Наименование</Наименование>
</Товар>

Если в вашей конфигурации 1С колонка артикула выведена непосредственно в табличную часть самого документа, обращение будет выглядеть еще проще:

<Артикул>[ТаблДок].Артикул</Артикул>

Добавление тега Заказ клиента (ЗаказКлиента)

Способ выгрузки заказа клиента зависит от того, где именно хранится эта информация в документе 1С. Проанализируем два сценария:

Сценарий 1. Заказ указан в шапке документа. Если весь документ реализации оформлен по одному заказу, реквизит ЗаказКлиента (или Сделка) находится в шапке. В XML-настройках в блоке общих реквизитов документа прописываем:

<ЗаказКлиента>[Документ].ЗаказКлиента.Номер</ЗаказКлиента>

Сценарий 2. Заказы указаны в табличной части. Если одна реализация объединяет несколько заказов, реквизит заказа находится в строках товаров. Тогда тег добавляется внутрь товарного узла:

<ЗаказКлиента>[ТаблДок].ЗаказКлиента.Номер</ЗаказКлиента>

Выгрузка штрихкода из регистра сведений

Штрихкоды товаров в 1С практически никогда не хранятся в самом справочнике номенклатуры или в табличной части документов. Как правило, для них используется регистр сведений (например, ШтрихкодыНоменклатуры). Прямое обращение через квадратные скобки наподобие [ТаблДок].Штрихкод работать не будет и вызовет ошибку выгрузки.

Для решения этой задачи воспользуемся механизмом внешних функций СБИС.

Шаг 1. Прописываем вызов функции в XML-файле настроек. В блоке товаров указываем вызов нашей будущей функции в фигурных скобках:

<ШтрихКодТовара>{сбисПолучитьШтрихкод()}</ШтрихКодТовара>

Шаг 2. Создаем внешнюю функцию в 1С. Чтобы код не затерся при обновлениях СБИС, его необходимо разместить во внешнем модуле. Рядом с основной обработкой СБИС в рабочем каталоге найдем или создадим файл дополнительных обработок ВнешниеФункции_Клиент.epf (или аналогичный серверный файл в зависимости от режима работы интеграции). В модуле объекта этой обработки пишем экспортную функцию:


Функция сбисПолучитьШтрихкод(Контекст) Экспорт
    // Параметр 'Контекст' автоматически содержит данные текущей строки табличной части документа
    Если Не ЗначениеЗаполнено(Контекст.Номенклатура) Тогда
        Возврат "";
    КонецЕсли;
    
    // Формируем запрос к регистру сведений штрихкодов
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
        |	ШтрихкодыНоменклатуры.Штрихкод КАК Штрихкод
        |ИЗ
        |	РегистрСведений.ШтрихкодыНоменклатуры КАК ШтрихкодыНоменклатуры
        |ГДЕ
        |	ШтрихкодыНоменклатуры.Номенклатура = &Номенклатура";
        
    Запрос.УстановитьПараметр("Номенклатура", Контекст.Номенклатура);
    
    РезультатЗапроса = Запрос.Выполнить();
    Если Не РезультатЗапроса.Пустой() Тогда
        Выборка = РезультатЗапроса.Выбрать();
        Выборка.Следующий();
        Возврат Выборка.Штрихкод;
    КонецЕсли;
    
    Возврат "";
КонецФункции

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

Технология XSLT-преобразования и визуализация данных

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

После этого СБИС применяет XSLT-шаблоны для конвертации промежуточного файла в регламентированный ФНС формат (например, УПД). Чтобы добавленные нами пользовательские теги не просто улетали в XML, а были видны контрагенту на портале СБИС, их следует передавать в секциях дополнительных сведений (например, <ДопСведения> или <ИнфПолФХЖ2>). Также вы можете настроить индивидуальный шаблон визуализации документа непосредственно в личном кабинете СБИС/Saby через редактор печатных форм. Для более глубокого освоения технологии формирования отчетов и представления XML-данных пригодится руководство по визуализации данных через XSLT.

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

← На главную