Как реализовать поддержку API 3.0 СУЗ в 1С:Управление торговлей 10.3?

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

С переходом системы «Честный Знак» на новый протокол обмена данными API 3.0 (Станция управления заказами), пользователи устаревших конфигураций, таких как 1С:Управление торговлей 10.3 (УТ 10.3), столкнулись с серьезной проблемой. Официальная поддержка этой конфигурации ограничена, и глубокие изменения в библиотеке интеграции с маркировкой (БИМ) туда больше не транслируются. Разберем подробно, какие существуют пути решения этой задачи и какой из них наиболее эффективен для программиста.

Проблема перехода: почему API 2.0 больше недостаточно

В версии API 3.0 существенно изменились эндпоинты (адреса методов) и структура JSON-объектов. Были усилены требования к авторизации, изменены форматы передачи идентификаторов OMS ID, а также вложенность массивов в запросах на эмиссию кодов. Если ваша система продолжает использовать протокол 2.0, со временем методы начнут возвращать ошибки «Метод не поддерживается», что полностью заблокирует процесс заказа марок и отчетов о нанесении.

Вариант 1. Использование «Шлюза» через актуальную конфигурацию

Проанализируем самый стабильный с точки зрения обновлений способ. Мы можем установить рядом современную конфигурацию, например, 1С:Управление торговлей 11, УНФ или 1С:Розница 3.0. В этих программных продуктах подсистема маркировки обновляется оперативно самой фирмой «1С».

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

  1. В УТ 10.3 формируется потребность в кодах маркировки.
  2. Данные передаются в «базу-шлюз» через COM-соединение или HTTP-сервис.
  3. «База-шлюз» выполняет все регламентированные действия с СУЗ API 3.0.
  4. Полученные коды маркировки возвращаются обратно в УТ 10.3 для печати и складского учета.

Этот метод избавляет от необходимости постоянно переписывать сложный код интеграции в старой базе при каждом изменении законодательства.

Вариант 2. Перенос подсистемы маркировки из УПП

Если вариант со шлюзом не подходит по организационным причинам, рассмотрим возможность «бэкпорта» кода. Поскольку 1С:Управление производственным предприятием (УПП) все еще находится на расширенной поддержке и работает на обычных формах, ее модули маркировки архитектурно ближе к УТ 10.3, чем модули из УТ 11.

Разберем технические нюансы этого процесса. Вам потребуется найти в УПП процедуры, отвечающие за конвертацию запросов. Обратите внимание на модуль ИнтерфейсСУЗ и функцию ТелоЗапросаПоФорматуОбмена(). В актуальных релизах там реализована логика трансформации данных под формат V3.

Пример логики, которую необходимо внедрить или адаптировать:


Процедура КонвертироватьТелоЗапросаФормат_V3(СтруктураЗапроса) Экспорт
    // Изменяем структуру JSON под требования API 3.0
    // Например, перенос параметров авторизации или переименование полей
    Если СтруктураЗапроса.Свойство("products") Тогда
        Для Каждого СтрокаТовара Из СтруктураЗапроса.products Цикл
            // Логика преобразования полей товара
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

Важно: Перенос кода из УТ 11 практически невозможен из-за использования там управляемых форм, асинхронных вызовов и библиотеки стандартных подсистем (БСП) новых версий. Выбирайте УПП как донорский ресурс.

Вариант 3. Прямая работа с API через HTTP-запросы

Если вам требуется только базовый функционал (заказ кодов и печать), проанализируем возможность написания собственной мини-подсистемы. Это позволит не загромождать базу тяжелыми библиотеками 1С. Выясним, какие объекты 1С нам понадобятся.

Для реализации прямого обмена используем объект HTTPСоединение. Документация API 3.0 открыта в личном кабинете «Честного Знака». Вам нужно реализовать формирование JSON вручную и отправку его методом POST.

Посмотрим на пример инициализации соединения:


Сервер = "субдомен.crpt.ru"; // Адрес СУЗ
OMSID = "ваш_идентификатор_омс";
Токен = "полученный_токен_авторизации";

ЗаголовокЗапроса = Новый Соответствие;
ЗаголовокЗапроса.Вставить("Content-Type", "application/json");
ЗаголовокЗапроса.Вставить("X-OMS-Token", Токен);

Соединение = Новый HTTPСоединение(Сервер, 443, , , , , Новый ЗащищенноеСоединениеOpenSSL());
Запрос = Новый HTTPЗапрос("/api/v3/orders?omsId=" + OMSID, ЗаголовокЗапроса);
Запрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8);

Ответ = Соединение.ОтправитьДляОбработки(Запрос);

Этот путь требует четкого следования документации «Честного Знака», но он делает вашу систему независимой от обновлений типовых конфигураций 1С.

Особенности для систем на базе 1С 7.7

Для пользователей «клюшек» ситуация сложнее. Поскольку встроенные средства работы с JSON и HTTP в 7.7 крайне ограничены, рекомендуем использовать внешние компоненты (DLL) или скрипты-прокладки на языке Python или C#. Скрипт может считывать файл выгрузки из 1С 7.7, выполнять обмен с СУЗ API 3.0 и возвращать результат в виде текстового файла или таблицы.

Итоги и рекомендации

Выясним причину, по которой стоит выбрать тот или иной метод. Если ваша УТ 10.3 сильно кастомизирована, лучшим выбором будет Вариант 1 (Шлюз), так как он минимизирует риски поломки существующего учета. Если вы опытный разработчик и хотите оставить все внутри одной базы, выбирайте Вариант 2, используя код из УПП как образец. Вариант 3 подходит для узкоспециализированных задач с небольшим объемом операций.

Помните, что использование устаревшего протокола 2.0 для новых товарных групп (молоко, вода, пиво) уже сейчас может приводить к отказам в обработке отчетов о нанесении и агрегации.

← На главную