При работе с самописными конфигурациями (так называемыми «нетленками») на платформе 1С:Предприятие 8.3 рано или поздно возникает задача интеграции с системами электронного документооборота (ЭДО). Основная сложность заключается в том, что в таких базах отсутствуют типовые механизмы обмена, и разработчику приходится реализовывать выгрузку «с нуля». В данной статье мы подробно разберем, как подойти к этому вопросу, какие технологии использовать и на что обратить внимание при формировании файлов для операторов ЭДО, таких как СБИС.
Прежде чем приступать к написанию кода, нам необходимо определить, какой именно файл мы будем генерировать. В современной практике ЭДО в России практически не используются «просто накладные» в произвольном формате. Основным стандартом является УПД (Универсальный передаточный документ). Проанализируем актуальное законодательство: на текущий момент основным является формат, утвержденный приказом ФНС № ЕД-7-26/970@. Этот формат является обязательным для передачи маркированных товаров и прослеживаемых грузов, а также постепенно вытесняет старый формат 820@.
Важно понимать, что УПД может иметь разные статусы:
Если ваша задача — выгрузить именно «накладную», вы будете формировать XML по схеме УПД, но с указанием соответствующего статуса в заголовке файла.
Рассмотрим способы формирования XML-структуры в 1С. Традиционный метод с использованием объекта ЗаписьXML и ручного прописывания тегов (вроде Запись.ЗаписатьНачалоЭлемента("Файл")) крайне трудозатратен и чреват ошибками. Любая опечатка в имени тега или неверная последовательность элементов приведет к тому, что оператор (СБИС, Диадок и др.) или ФНС отклонят файл.
Мы рекомендуем использовать XDTO-пакеты. Этот механизм позволяет работать с XML как с объектом 1С, где каждое поле — это свойство объекта. Платформа сама следит за соблюдением структуры, типов данных и последовательности тегов согласно XSD-схеме.
Разберем алгоритм работы с XDTO по шагам:
Посмотрим на пример кода, который инициализирует фабрику XDTO и создает структуру заголовка файла. Нам необходимо правильно указать пространство имен, которое соответствует выбранному формату.
// Определяем пространство имен для формата УПД 970@
ПространствоИмен = "http://www.nalog.gov.ru/taxcom/upd/970";
Фабрика = Последовательность.ПолучитьФабрикуXDTO();
// Создаем корневой объект "Файл"
ТипФайл = Фабрика.Тип(ПространствоИмен, "Файл");
ОбъектФайл = Фабрика.Создать(ТипФайл);
// Заполняем обязательные атрибуты заголовка
ОбъектФайл.ИдФайл = СформироватьУникальныйИдентификаторФайла();
ОбъектФайл.ВерсФорм = "5.02"; // Актуальная версия формата
ОбъектФайл.ВерсПрог = "МояСамописка 1.0";
Проанализируем функцию формирования идентификатора файла. Это критически важный момент. Имя файла и атрибут ИдФайл должны строго соответствовать маске ФНС:
ON_NSCHFDOPPR_КодПолучателя_КодОтправителя_Дата_УникальныйИдентификатор
Где КодОтправителя и КодПолучателя — это идентификаторы участников ЭДО (обычно начинаются с кода оператора, например, 2BE...).
Разберем, как заполняются вложенные структуры, такие как сведения о контрагентах. В XDTO это выглядит как обращение к свойствам объекта. Выясним, какие данные являются обязательными: это ИНН, КПП (для юрлиц), краткое наименование и адрес.
// Создаем узел "СвПрод" (Сведения о продавце)
ТипСвПрод = Фабрика.Тип(ПространствоИмен, "УчастникТип");
Продавец = Фабрика.Создать(ТипСвПрод);
// Заполняем ИНН/КПП через вложенный объект ЮрЛицо
ТипЮрЛицо = Фабрика.Тип(ПространствоИмен, "ЮрЛицоТип");
ЮрЛицо = Фабрика.Создать(ТипЮрЛицо);
ЮрЛицо.ИННЮЛ = "7701234567";
ЮрЛицо.КПП = "770101001";
ЮрЛицо.НаимОрг = "ООО Ромашка";
Продавец.ИдУчЭДО = "2BE1234567890";
Продавец.ЮрЛицо = ЮрЛицо;
// Привязываем продавца к основному объекту
ОбъектФайл.Документ.СвПрод = Продавец;
После того как мы научились формировать правильный XML-файл, его нужно отправить в СБИС. Рассмотрим три основных сценария интеграции, которые предлагает компания «Тензор»:
Никогда не выгружайте файл «вслепую». Платформа 1С предоставляет встроенный механизм проверки объекта XDTO на соответствие схеме. Проанализируем, как это реализовать:
Попытка
ОбъектФайл.Проверить();
Сообщить("Файл успешно прошел валидацию!");
Исключение
Инфо = ИнформацияОбОшибке();
Сообщить("Ошибка в структуре XML: " + Инфо.Описание);
КонецПопытки;
Метод Проверить() моментально укажет вам на отсутствие обязательных полей. Например, если вы забыли указать код валюты (КодОКВ) или единицу измерения товара (ОКЕИ), система выдаст подробное описание ошибки с указанием тега.
Если ваша конфигурация построена с использованием БСП (Библиотеки стандартных подсистем), мы настоятельно рекомендуем рассмотреть возможность внедрения БЭД (Библиотеки электронных документов). Это готовый модуль от фирмы «1С», который содержит в себе:
Внедрение БЭД потребует времени на начальном этапе, но это избавит вас от необходимости вручную обновлять программный код каждый раз, когда ФНС решит изменить формат XML или добавить новые обязательные теги.
Подводя итог, скажем: разработка выгрузки в XML для ЭДО — задача системная. Начните с получения образца файла у вашего оператора, изучите структуру УПД и используйте XDTO для генерации данных. Это гарантирует надежность обмена и легкость поддержки решения в будущем.