Маркированный товар

Без крипто части

В типовых конфигурациях 1С код маркировки хранится без крипто части. При передаче кода маркировки без крипто части он будет корректно принят кассой АТОЛ Онлайн и ОФД, но не будет выведен из оборота в Честном знаке, т.к. маркированный товар из оборота выводится только при передаче с крипто частью

Получение кода маркировки перед отправкой в АТОЛ Онлайн в типовых конфигурациях 1С выполняется штатной процедурой:

Результат = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Штрихкод);
СтруктураЧека.Вставить("nomenclature_code", (Результат.РеквизитКодаТовараHEX));

Рассмотрим на примере (алгоритм обработки для ФФД 1.05, API v4):

  • в 1С хранится штрихкод упаковки 010463003407001221SxMGorvNuq6Wk

  • 01 - Префикс, 21 - Префикс

  • GTIN = 04630034070012 - 14 (символов) SERIAL = SxMGorvNuq6Wk - 13 (символов)

  • GTIN. Конвертируется из десятичной в HEX: 04 36 03 89 39 FC

  • SERIAL. Конвертируется из ASCII в HEX: 53 78 4D 47 6F 72 76 4E 75 71 36 57 6B

  • Итоговое значение тега 1162 для передачи по API: "nomenclature_code" = "44 4D 04 36 03 89 39 FC 53 78 4D 47 6F 72 76 4E 75 71 36 57 6B"

  • (44 4D + GTIN + HEX)

  • 44 4D - код маркированной продукции

В новой системе маркировки код 444D - единый для большинства товаров. Подробнее - https://www.atol.ru/company/news/chto-izmenilos-v-ffd--kak-podgotovitsya-predprinimatelyu-k-novym-trebovaniyam/

С крипто частью

Ниже описан алгоритм, которые используется в типовом модуле начиная с релиза 1.3.1.0 для API v5 (ФФД 1.2)

Подробно структура кода маркировки описана в документации Честный знак

Для возможности передачи кода маркировки с крипто частью для ФФД 1.2 (API v5) в документе Чек АТОЛ (начиная с релиза 1.3.1.0) добавлен отдельный реквизит для хранения кода маркировке в формате Base64 и изменен алгоритм обработки кода маркировки перед кодировкой. Обработка кода маркировки в формате Data Matrix происходит по следующем алгоритму:

  • Пример кода маркировки в формате Data Matrix с крипто частью: (01)04605865487308(21)UO*LKBqq)GIAT(91)EE06(92)tMtsmB8kGC+Bwv2ZO5LO1+fMtKdm94BdgemjklPCyG0=

  • Получение типа кода маркировки (валидация) происходит штатными средствами конфигурации 1С, которая определяет, что это код маркировки в формате Data Matrix

  • Далее происходит замена (01), (21), (91), (92), (93) на соответствующие значения без скобок 01, 21, 91, 92, 93

  • Код маркировки без крипто части в формате Data Matrix после очистки будет 31 символ

  • При длине кода (после очистки) больше 31 символа мы делаем вывод, что код маркировки с крипто частью

  • Далее перед кодированием добавляется специальный символ-разделитель имеющий код 29 в таблице символов ASCII (1D hex) после 37 символа и 31 символа в коде маркировки

  • Полученный код кодируется в Base64 и хранится для каждой строки в чеке для передачи в АТОЛ Онлайн

Подбор полного кода маркировки

Ниже описан алгоритм, которые используется в типовом модуле начиная с релиза 1.3.2.0 для API v5 (ФФД 1.2)

В документ Чек АТОЛ в табличную часть добавлен реквизит "Полный код маркировки (из регистра Пул кодов маркировки СУЗ)".

Реквизит заполняется программно данными из регистра Пул кодов маркировки СУЗ по следующему алгоритму:

  • по введенному коду маркрировки в реквизите "Код маркировки" ищем запись в регистре Пул кодов маркировки СУЗ

  • если запись найдена по короткому коду маркировки (код маркировки без крипто части) и есть значение ПолныйКодМаркировки, то в чеке будет заполнено найденное значение полного кода маркировки

  • в регистре Пул кодов маркировки СУЗ ПолныйКодМаркировки хранится в кодировке Base64, при заполнении реквизита Полный код маркировки значение из Пула кодов маркировки декодируется из Base64, также из него удаляются символы 29 (т.к. он на уровне платформы 1С:Предприятие отображение таких символов невозможно, будет ошибка о запрещенном символе)

  • при отправке чека в АТОЛ Онлайн для API v5 (ФФД 1.2) если заполнено значение реквизита "Полный код маркировки (из регистра Пул кодов маркировки СУЗ)", то будет отправлен именно Полный код маркировки с таким же порядком обработки, как и Код маркировки, который описан выше

  • если реквизит "Полный код маркировки (из регистра Пул кодов маркировки СУЗ)" не заполнен, то все работает как и раньше

Алгоритм заполнения реализован в модуле АТОЛ функцией ПолныйКодМаркировки, которая находится в общем модуле АТОЛ_ЛокализацияСервер (без обфускации) и при необходимости может быть модифицирована собственными силами

Last updated