Работа с маркируемыми товарами накладывает на участников оборота дополнительные обязательства. Одной из критически важных задач является проверка контрагента: зарегистрирован ли он в системе ГИС МТ (Честный ЗНАК) и имеет ли право принимать определенные группы товаров. Если отправить маркированный товар организации, которая не числится в системе, передача прав собственности через ЭДО или прямую подачу сведений будет отклонена — поможет автоматизация обмена данными с ГИС МТ и ЭДО. В этой статье мы подробно разберем процесс автоматизации проверки контрагентов с использованием программных средств 1С и интерфейса API v3 (True API).
Для того чтобы получить информацию о другом участнике оборота, недостаточно просто отправить запрос. Процесс взаимодействия строится по строгому алгоритму. Рассмотрим его этапы:
/participants с использованием полученного токена.Проанализируем ситуацию: в старых версиях платформы (например, 1С 7.7) работа с внешними API требует использования внешних COM-объектов для HTTP-запросов и работы с JSON. В современных версиях 1С 8.3 эти механизмы встроены, однако логика обращения к API остается идентичной.
Первым делом нам необходимо получить токен сессии. Срок действия такого токена обычно составляет 10 часов, поэтому мы рекомендуем реализовать механизм его кэширования, чтобы не нагружать систему криптографии перед каждым запросом. Выясним причину сложности этого этапа: она заключается в необходимости использования криптографических библиотек для работы с сертификатом.
Посмотрим на пример функции получения токена, реализованной через внешние компоненты:
Функция ПолучитьТокен()
// Инициализируем объект для работы с криптографией
Криптография = СоздатьОбъект("Криптография");
Сертификат = Криптография.НайтиСертификатПоОтпечатку("ваш_отпечаток_сертификата");
Если ПустоеЗначение(Сертификат) = 1 Тогда
Сообщить("Сертификат не найден");
Возврат "";
КонецЕсли;
// Шаг 1: Запрос данных для подписания (auth/key)
Адрес = "https://markirovka.crpt.ru/api/v3/true-api/auth/key";
Запрос = СоздатьОбъект("Msxml2.ServerXMLHTTP");
Запрос.open("GET", Адрес, 0);
Запрос.setRequestHeader("Accept", "application/json");
Запрос.send();
JSON = СоздатьОбъект("JSON");
Если Запрос.status = 200 Тогда
Данные = JSON.ЧтениеJSON(Запрос.responseText);
Иначе
Сообщить("Ошибка получения ключа: " + Запрос.status, "!");
Возврат "";
КонецЕсли;
// Шаг 2: Подписание полученных данных
// Данные.data содержит случайную строку от сервера
ПодписанныеДанные = Криптография.Подписать(Данные.data, Сертификат, 0);
Данные.data = ПодписанныеДанные;
СтрJSON = JSON.ЗаписьJSON(Данные);
// Шаг 3: Получение токена (auth/simpleSignIn)
АдресАвторизации = "https://markirovka.crpt.ru/api/v3/true-api/auth/simpleSignIn";
Запрос.open("POST", АдресАвторизации, 0);
Запрос.setRequestHeader("Content-Type", "application/json");
Запрос.send(СтрJSON);
Если Запрос.status = 200 Тогда
Ответ = JSON.ЧтениеJSON(Запрос.responseText);
Возврат Ответ.token; // Это наш Bearer токен
Иначе
Сообщить("Ошибка авторизации: " + Запрос.status);
Возврат "";
КонецЕсли;
КонецФункции
Важный момент: при использовании 1С 8.3 вместо Msxml2.ServerXMLHTTP следует использовать объект HTTPСоединение, а для подписи данных — встроенный менеджер криптографии. Для отладки и проверки таких запросов внутри конфигурации можно использовать обработку для тестирования REST API на платформе 1С.
Когда токен получен, мы можем перейти к основной задаче — проверке контрагента. Метод /participants позволяет получить детальную информацию об организации. Разберем по шагам реализацию процедуры проверки:
Процедура ПроверкаРегистрацииУОТпоИНН(Токен, ИНН)
// Формируем адрес запроса. Для v3 адрес выглядит так:
БазовыйАдрес = "https://markirovka.crpt.ru/api/v3/true-api";
Адрес = БазовыйАдрес + "/participants/" + СокрЛП(ИНН);
Запрос = СоздатьОбъект("Msxml2.ServerXMLHTTP");
Запрос.open("GET", Адрес, 0);
// Устанавливаем заголовки, включая авторизационный токен
Запрос.setRequestHeader("authorization", "Bearer " + Токен);
Запрос.setRequestHeader("cache-control", "no-cache");
Запрос.send();
JSON = СоздатьОбъект("JSON");
Если Запрос.status = 200 Тогда
Данные = JSON.ЧтениеJSON(Запрос.responseText);
// Анализируем результат
Если Данные.isRegistered = 1 Тогда
Сообщить("Контрагент " + ИНН + " зарегистрирован в ГИС МТ");
Иначе
Сообщить("Контрагент " + ИНН + " НЕ зарегистрирован!");
КонецЕсли;
Иначе
ТекстОшибки = "Ошибка обращения к API: " + Запрос.status;
Сообщить(ТекстОшибки, "err");
КонецЕсли;
КонецПроцедуры
Если нам необходимо проверить сразу список ИНН (например, перед формированием групповой отгрузки), API позволяет сделать это одним запросом. Проанализируем синтаксис: параметры передаются через строку запроса. Пример вызова для нескольких организаций будет выглядеть следующим образом:
ПроверкаРегистрацииУОТпоИНН(Токен, "?inns=1234567890&inns=0987654321");
В этом случае сервер вернет массив объектов, каждый из которых будет содержать информацию по конкретному ИНН. Рассмотрим подробнее, какие еще данные, кроме факта регистрации, можно извлечь из ответа. Для анализа структуры полученных ответов и быстрой генерации кода разбора подойдёт валидатор и генератор кода обработки JSON для 1С.
Просто знать, что контрагент «есть в системе» — часто недостаточно. Система Честный ЗНАК разделена на товарные группы. Рассмотрим ситуацию: контрагент зарегистрирован как участник оборота обуви, но вы пытаетесь отгрузить ему молочную продукцию, на которую у него не подписан договор с ЦРПТ. В этом случае транзакция будет проблемной.
В ответе от true-api следует обращать внимание на следующие поля:
shoes, milk, water).Практический совет: перед выполнением отгрузки в программном коде 1С реализуйте проверку вхождения вашей товарной группы в массив productGroups контрагента. Это позволит избежать ошибок при подаче сведений в ГИС МТ через ЭДО.
При работе с API «Честного ЗНАКА» мы можем столкнуться с различными кодами состояний HTTP. Разберем наиболее частые из них:
ПолучитьТокен() повторно.Таким образом, мы рассмотрели полный цикл интеграции: от сложной процедуры авторизации с использованием криптографии до получения и анализа данных о контрагенте. Использование этих методов позволяет автоматизировать контроль цепочки поставок и минимизировать риски, связанные с некорректным оформлением документов в системе маркировки — для этого подойдёт интеграция 1С с системой маркировки Честный Знак.