Почему 1С:Управление торговлей обрезает код транспортной упаковки при проверке в ГИС МТ?

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

При выполнении проверки кодов маркировки через штатную обработку в программе 1С:Управление торговлей пользователи могут столкнуться с ситуацией, когда код групповой или транспортной упаковки обрезается перед отправкой в систему «Честный Знак». В результате сервер ГИС МТ возвращает ошибку Код состояния: 404, хотя на портале системы маркировки данный код успешно находится и раскрывается по составу вложений.

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

Анализ проблемы и логов взаимодействия

Рассмотрим структуру входящих данных от торгового оборудования и формируемый программой исходящий HTTP-запрос к API сервиса маркировки:


Входящие данные с торгового оборудования:
[{"Штрихкод":"01004610359540506000000001706","ШтрихкодBase64":"MDEwMDQ2MTAzNTk1NDA1MDYwMDAwMDAwMDE3MDY=","Количество":1}]

POST https://markirovka.crpt.ru:443/api/v3/true-api/cises/info
Content-Type: application/json; charset=utf-8
["010046103595405060000"]

Код состояния: 404

Обратим внимание на тело исходящего запроса. Сканер передал строку из 29 символов: 01004610359540506000000001706. Однако в массив cises/info программа передала только 21 символ: 010046103595405060000, просто отрезав последние 8 знаков.

Посмотрим на второй пример, где аналогичный по назначению штрихкод обработался корректно:


Входящие данные с торгового оборудования:
[{"Штрихкод":"010046103595405060000000017610","ШтрихкодBase64":"MDEwMDQ2MTAzNTk1NDA1MDYwMDAwMDAwMDE3NjEw","Количество":1}]

POST https://markirovka.crpt.ru:443/api/v3/true-api/cises/info
Content-Type: application/json; charset=utf-8
["010046103595405060000000017610"]

Код состояния: 200

Здесь длина входящей строки составляет ровно 30 знаков. Вся последовательность без искажений попала в запрос и сервис вернул статус успешной обработки 200 OK.

Выясним причину усечения штрихкода в 1С

Проанализируем логику работы типовых алгоритмов интеграции 1С с ИС МП (БПО и БПО-подобные модули):

  1. Ложное определение типа штрихкода по длине: В ряде товарных групп (пиво, упакованная вода, молочная продукция) код маркировки единичной потребительской упаковки формата Data Matrix с укороченным криптохвостом имеет длину ровно 29 символов (14 знаков GTIN + 7 знаков серийного номера + 4 знака ключа проверки + 4 знака электронной подписи).
  2. Эвристический разбор без служебных символов: Если штрихкод поступает в конфигурацию без служебных идентификаторов формата GS1, парсер пытается угадать тип марки по регулярным выражениям и длине. Встретив строку длиной ровно 29 знаков, алгоритм ошибочно принимает код транспортной упаковки за потребительский код маркировки с криптохвостом.
  3. Отрезание криптохвоста: Программа отсекает последние 8 символов проверки и криптографической защиты (4+4), формируя из первых 21 символов код идентификации (КИ). В случае с потребительской пачкой это корректно, но для кода групповой тары это приводит к потере значимой части серийного номера.
  4. Почему проходит 30-значный код: Вторая строка имеет длину 30 знаков. Шаблон потребительской марки на нее не срабатывает, поэтому алгоритм оставляет значение без усечения и отправляет его целиком.

Способ 1. Корректная настройка сканера штрихкодов и ТСД

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

  1. Перевод сканера в режим эмуляции COM-порта: При работе в режиме клавиатурного клина (HID-эмуляция) оборудование не передает служебные управляющие символы. Рекомендуется перевести 2D-сканер в режим виртуального COM-порта (Virtual COM / CDC ACM) и подключить через штатный драйвер торгового оборудования 1С (Native API).
  2. Включение передачи префиксов AIM ID (Code ID): Настроим в сканере передачу стандартного идентификатора символики по спецификации GS1. Для штрихкодов GS1-128 передается идентификатор ]C1, а для GS1 DataMatrix — ]d2. Наличие такого префикса заставляет парсер 1С отказаться от предположений по длине и включить строгий разбор идентификаторов применения GS1 Application Identifier (AI).
  3. Трансляция управляющего символа FNC1: Проверим, передает ли сканер разделитель групп полей GS (ASCII-код 29). Наличие разделителя позволяет программе точно определять границы полей переменной длины.

Способ 2. Корректировка разбора кодов через расширение конфигурации

Если оборудование невозможно перенастроить или коды вводятся вручную (через буфер обмена), разберем доработку логики разбора кодов маркировки через расширение:

  1. Найдем модули интеграции с ИС МП, отвечающие за разбор штрихкодов маркировки (модули с именами вида ИнтеграцияИСМПКлиентСервер или функции разбора в БПО).
  2. В перехватываемом методе валидации добавим проверку текущего контекста работы. Если вызов происходит из формы проверки транспортных или логистических упаковок, необходимо отключить автоматическое усечение последних 8 символов.
  3. Реализуем проверку: если строка начинается с идентификатора 01 и имеет длину 29 символов, но при этом обрабатывается как групповая упаковка, отправляем на проверку в сервис /cises/info полный код без модификации.

Способ 3. Использование формата SSCC для упаковок

Стандартом идентификации логистических упаковок в системе «Честный Знак» является код формата SSCC-18 (идентификатор применения AI 00). Рассмотрим преимущества перехода на данный формат:

  1. Код SSCC имеет фиксированную длину 18 цифр (или 20 знаков с учетом идентификатора применения 00).
  2. Длина SSCC никогда не пересекается с длиной потребительских кодов Data Matrix с криптохвостом.
  3. Типовые алгоритмы 1С однозначно распознают префикс 00 и корректно передают SSCC в запросы к сервисам ГИС МТ без риска случайного отсечения символов.

Если предприятие имеет возможность согласовать правила маркировки с производителем или поставщиком продукции, рекомендуется сформировать регламент на обязательное использование транспортных кодов стандарта SSCC.

← На главную