Как распознать товар в 1С при сканировании кода DataMatrix?

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

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

Понимание структуры кода DataMatrix

Прежде всего, важно понимать, что DataMatrix — это не просто «штрихкод», а сложная структура данных, соответствующая стандарту GS1. Внутри кода уже содержатся все необходимые идентификаторы:

  1. (01) — GTIN (глобальный номер товарной позиции, 14 цифр).
  2. (21) — Серийный номер товара.
  3. (91/92/93) — Криптографический «хвост» (ключ и подпись проверки), который подтверждает подлинность маркировки.

Вам не нужно отправлять запрос в Честный знак, чтобы узнать, что за товар перед вами. Достаточно считать код сканером, который настроен на передачу спецсимволов, и программно выделить подстроку, следующую за идентификатором (01).

Разбор кода маркировки

Для реализации этого механизма рассмотрим алгоритм парсинга. Сканер 2D передает данные в виде строки, где группы данных разделены специальным непечатным символом GS (ASCII 29). Обычное текстовое поле в 1С может «съедать» этот символ, поэтому важно настроить Подключаемое оборудование так, чтобы оно корректно обрабатывало поток данных.

Рассмотрим пример того, как можно логически представить процесс извлечения GTIN из строки сканирования:


// Пример упрощенного парсинга строки DataMatrix
Функция ПолучитьGTINИзКодаМаркировки(СтрокаКода)
    // Ищем идентификатор 01, который означает начало GTIN
    Позиция01 = Найти(СтрокаКода, "01");
    Если Позиция01 > 0 Тогда
        // GTIN в DataMatrix всегда состоит из 14 цифр
        GTIN = Сред(СтрокаКода, Позиция01 + 2, 14);
        Возврат GTIN;
    КонецЕсли;
    Возврат "";
КонецФункции

Проблема остатков и сопоставление с базой

При работе с маркированными товарами необходимо учитывать важный нюанс, касающийся «остатков». В системе Честный знак товары, которые маркировались как товарные остатки, могут иметь префиксы GTIN, отличные от привычного EAN-13, напечатанного на упаковке. Например, если код начинается на 029, он может не соответствовать обычному штрихкоду производителя (46х...).

Чтобы ваша система работала корректно:

Почему API Честного знака не подходит для кассы?

Использование API для каждой продажи — это тупиковый путь. Во-первых, API Национального каталога требует сложной авторизации с использованием ЭЦП, что невозможно обеспечить на каждом рабочем месте кассира. Во-вторых, ограничения на количество запросов в минуту быстро приведут к остановке работы кассы при большой очереди. И, наконец, скорость ответа API всегда будет ниже, чем скорость локального поиска по базе 1С.

Помните, что для целей вывода товара из оборота на кассе, вам необходимо не просто «узнать товар», но и провести проверку целостности кода (наличие крипто-хвоста). Это является требованием законодательства для обеспечения безопасности и исключения оборота контрафакта.

Заключение: порядок действий

Для внедрения функционала в вашу конфигурацию УПП 1.3 придерживайтесь следующих шагов:

  1. Настройте 2D сканер для передачи разделителей GS в систему.
  2. Реализуйте функцию парсинга строки, которая корректно выделяет 14 цифр после идентификатора (01).
  3. Наполните базу данных соответствиями GTIN и Номенклатуры, уделив особое внимание товарам из «остатков».
  4. Используйте Библиотеку подключаемого оборудования, чтобы корректно распознавать тип DataMatrix и отделять его от обычных EAN-13.

Таким образом, вы получите надежный инструмент, который работает локально, быстро и соответствует всем требованиям системы Честный знак.

← На главную