Как реализовать выгрузку маркированного товара в УПД из 1С 7.7?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

Перевод торгового предприятия на обязательную маркировку товаров («Честный Знак») — задача непростая, особенно если учет ведется в устаревшей, но крайне надежной и привычной системе 1С:Предприятие 7.7. Многие разработчики сталкиваются с тем, что стандартных механизмов для работы с маркировкой и электронным документооборотом (ЭДО) в штатных конфигурациях «семерки» попросту нет. В этой статье мы подробно разберем, как решить проблему передачи маркированного товара в универсальный передаточный документ (УПД), какие технические подходы существуют и как правильно организовать выгрузку данных.

Понимание сути проблемы: печатная форма против электронного формата

Прежде всего проанализируем частую ошибку начинающих разработчиков. Часто под задачей «передать товар в УПД» понимают редактирование печатной формы документа. Нам важно четко разграничить два понятия:

  1. Печатная форма УПД: Это внешний вид документа для вывода на принтер. Файлы макетов обычно хранятся в общих таблицах конфигурации или во внешних файлах каталога ExtForms\PrnForms (например, UPD.ert). Данная форма служит исключительно для визуализации и бумажного документооборота. В ней невозможно передать машиночитаемые коды маркировки в государственную систему.
  2. Электронный формат УПД (XML-файл): Это строго структурированный файл обмена, который передается через оператора ЭДО. Именно в этот файл вносятся коды маркировки (КМ) в специальные теги, и именно этот файл после подписания электронно-цифровой подписью (ЭЦП) отправляется в «Честный Знак» для регистрации перехода права собственности на товар.

Таким образом, наша главная цель в 1С 7.7 — не изменить макет печати, а научить систему собирать коды маркировки и формировать корректный XML-файл установленного формата.

Законодательный контекст: переход на новый формат 970@

Ранее для выгрузки УПД использовался формат по приказу ФНС № 820. Однако законодательство меняется. С 1 апреля 2025 года старый формат УПД (820@, версия формата 5.01) был окончательно отключен ФНС и операторами ЭДО. Теперь обязательным является новый формат по Приказу ФНС России от 19.12.2023 № ЕД-7-26/970@ (версия формата 5.03).

Любые файлы, сформированные по старому стандарту, будут отклонены оператором ЭДО или системой маркировки. В новом формате существенно изменились требования к передаче сведений о маркировке. Коды заносятся в специальные теги, такие как НомУпак (для поэкземплярного учета) или передаются через объемно-сортовой учет (ОСУ). Сформировать такой XML-документ вручную в 1С 7.7 "с нуля" крайне трудозатратно, но выполнимо.

Выясним, какие варианты интеграции доступны для разработчиков и пользователей 1С 7.7 в текущих реалиях.

Вариант 1. Связка 1С 7.7 и бесплатной программы «1С-Клиент ЭДО» (Рекомендуемый гибридный метод)

Это наиболее стабильный и наименее затратный по времени разработки способ. Мы не перегружаем устаревшую платформу 1С 7.7 сложными механизмами криптографии и отправки XML, а используем современную платформу 1С 8.3 в качестве транспортного шлюза.

Рассмотрим схему работы этого решения по шагам:

  1. В 1С 7.7 создается внешняя обработка (файл .ert).
  2. При проведении документа «Реализация» или «Счет-фактура» оператор сканирует коды маркировки с помощью сканера штрихкодов или терминала сбора данных (ТСД).
  3. Наша внешняя обработка собирает данные о покупателе, товарах, ценах и привязанных кодах маркировки, после чего выгружает их в простой промежуточный XML-файл (или файл формата JSON/DBF).
  4. Этот промежуточный файл загружается в бесплатную конфигурацию «1С-Клиент ЭДО», которая работает на бесплатной версии платформы 1С 8.3 (или в режиме тонкого клиента).
  5. «1С-Клиент ЭДО» автоматически преобразует полученные данные в регламентированный XML-формат 970@, проверяет его корректность, подписывает вашей ЭЦП и отправляет контрагенту через ЭДО. Данные о переходе права собственности на маркированный товар автоматически уходят в «Честный Знак».

Вариант 2. Выгрузка КМ через CSV в Личный кабинет «Честного Знака» (Бюджетный ручной метод)

Если объем отгрузок небольшой, можно воспользоваться более простой схемой без полноценного ЭДО, передавая данные напрямую в Личный кабинет (ЛК) ГИС МТ «Честный Знак».

Проанализируем этот процесс:

Вариант 3. Использование терминалов сбора данных (ТСД)

Для складов с интенсивным товарооборотом ручной ввод кодов в 1С 7.7 невозможен. В этом случае идеальным решением является интеграция со специализированным ПО для ТСД, например, DataMobile или Клеверенс.

Схема взаимодействия выглядит следующим образом:

  1. Документ отгрузки (Реализация) выгружается из 1С 7.7 в виде задания на ТСД через FTP или промежуточную базу данных.
  2. Кладовщик сканирует КМ непосредственно на складе. Программное обеспечение ТСД проверяет корректность кодов и их соответствие заданию.
  3. Результаты сканирования возвращаются обратно в 1С 7.7, где внешняя обработка автоматически заполняет документ проверенными кодами и формирует итоговый файл для отправки в ЭДО.

Пример реализации выгрузки данных в XML из 1С 7.7

Если вы все же приняли решение формировать XML-файл обмена непосредственно в 1С 7.7, разберем базовый пример кода для создания структуры XML. Для работы с XML в 1С 7.7 обычно используется объект Windows MSXML2.DOMDocument.

Рассмотрим пример создания XML-структуры для выгрузки заголовка документа и кодов маркировки:


// Создаем объект для работы с XML-документом
Попытка
    АнализаторXML = СоздатьОбъект("MSXML2.DOMDocument.6.0");
Исключение
    Предупреждение("Не удалось создать объект MSXML! Проверьте установку компонентов MS XML Parser.");
    Возврат;
КонецПопытки;

// Создаем корневой элемент документа
Корень = АнализаторXML.createElement("Файл");
// Задаем необходимые атрибуты для формата обмена
Корень.setAttribute("ИдФайл", "ON_NSCHFDOPPR_..." + ТекущаяДата());
Корень.setAttribute("ВерсПрог", "1C 7.7 Custom");
Корень.setAttribute("ВерсФорм", "5.03"); // Версия нового формата по приказу 970@
АнализаторXML.appendChild(Корень);

// Добавляем узел с информацией о документе
СвДокПор = АнализаторXML.createElement("Документ");
СвДокПор.setAttribute("КНД", "1115131"); // Код для УПД
Корень.appendChild(СвДокПор);

// Пример обхода табличной части документа для выгрузки товаров и кодов маркировки
ВыбратьСтроки();
Пока ПолучитьСтроку() = 1 Цикл
    Если Товар.Маркированный = 1 Тогда
        ТаблТовар = АнализаторXML.createElement("ТаблТов");
        ТаблТовар.setAttribute("НомСтр", НомерСтроки);
        ТаблТовар.setAttribute("НаимТов", СокрЛП(Товар.Наименование));
        
        // Создаем узел для кодов маркировки (НомУпак)
        УзелМаркировки = АнализаторXML.createElement("НомУпак");
        
        // Предполагается, что коды маркировки хранятся в подчиненном справочнике
        СпрКоды = СоздатьОбъект("Справочник.КодыМаркировки");
        СпрКоды.ИспользоватьВладельца(Контекст); // или ссылка на документ/строку
        СпрКоды.ВыбратьЭлементы();
        Пока СпрКоды.ПолучитьЭлемент() = 1 Цикл
            // КИЗ - Код Идентификации Защищенный
            КИЗ = АнализаторXML.createElement("КИЗ");
            КИЗ.text = СпрКоды.КодМаркировки;
            УзелМаркировки.appendChild(КИЗ);
        КонецЦикла;
        
        ТаблТовар.appendChild(УзелМаркировки);
        СвДокПор.appendChild(ТаблТовар);
    КонецЕсли;
КонецЦикла;

// Сохраняем сформированный файл на диск для последующей отправки через ЭДО
ФайлПуть = "C:\EDI_Exchange\upd_out.xml";
АнализаторXML.save(ФайлПуть);
Сообщить("Файл успешно сформирован и сохранен по пути: " + ФайлПуть);

Обратите внимание: Приведенный код является упрощенным концептуальным примером. Реальный XML-файл по приказу 970@ содержит сотни обязательных реквизитов (данные продавца, покупателя, грузоотправителя, подписанта, сведения о налогах, ставках НДС и валютах). Для его полной реализации потребуется тщательно изучить XML-схему (XSD) нового формата, предоставляемую ФНС.

Резюме и практические рекомендации

Подведем итоги нашего анализа. Если перед вами стоит задача запустить маркировку в 1С 7.7:

  1. Не пытайтесь переписать печатную форму: Работайте сразу с выгрузкой данных в XML для систем ЭДО.
  2. Оцените трудозатраты: Написание полноценного модуля ЭДО по формату 970@ "с нуля" на 1С 7.7 потребует сотен часов работы квалифицированного программиста.
  3. Используйте готовые шлюзы: Оптимальным решением будет выгрузка простых данных из 1С 7.7 во внешнюю базу 1С 8.3 («1С-Клиент ЭДО») или использование платных сертифицированных модулей интеграции от операторов ЭДО («Диадок», «СБИС»), которые до сих пор поддерживают сопровождение клиентов на платформе 7.7.
← На главную