Как передать коды маркировки молочной продукции в фискальный регистратор Штрих-М из 1С 7.7?

Программист 1С v7.7 Торговля и дистрибуция
← На главную

При внедрении обязательной маркировки молочной продукции предприятия, до сих пор использующие проверенную временем платформу 1С 7.7, сталкиваются с трудностями при доработке процедур печати чеков. Если правила передачи кодов для табака или обуви уже давно известны, то интеграция с новыми форматами фискальных документов (ФФД 1.2) и спецификой учета молочной продукции вызывает много вопросов. Давайте подробно разберем, как правильно организовать передачу тегов маркировки в драйвер оборудования Штрих-М.

Проанализируем разницу в подходах: ФФД 1.05 против ФФД 1.2

Ранее, при использовании формата фискальных данных 1.05, разработчикам приходилось самостоятельно заниматься "нарезкой" считанного сканером кода маркировки (DataMatrix). Требовалось вручную искать спецсимвол разделителя GS (код ASCII 29), выделять глобальный идентификатор торговой единицы (GTIN) и уникальный серийный номер товара, чтобы затем передать их в драйвер отдельными параметрами для формирования тега 1162.

Однако, с переходом на ФФД 1.2 логика работы драйверов Штрих-М и самих контрольно-кассовых машин (ККТ) кардинально изменилась. Посмотрим, что именно поменялось:

  1. Передача полной строки: Для ФФД 1.2 теперь используется метод передачи полного кода маркировки в виде единой строки. Больше не нужно вычислять позиции символов и разбивать код на части силами 1С.
  2. Автоматический парсинг: Драйвер и фискальный накопитель (ФН-М) теперь берут на себя задачу по разбору структуры кода. Они самостоятельно находят символы-разделители 0x1D и формируют корректную посылку в информационную систему маркировки (ОИСМ).
  3. Онлайн-проверка: ККТ сама выполняет запрос на сервер Честного ЗНАКа для проверки статуса кода до пробития фискального чека. В результате на чеке печатается признак проверки (например, [М+] если проверка пройдена успешно).

Посмотрим на рабочий пример кода для 1С 7.7

Чтобы обеспечить универсальную работу алгоритма (например, если в компании используются разные кассы на разных версиях ФФД), логично предусмотреть в коде ветвление. Разберем по шагам готовый фрагмент кода, который обрабатывает передачу маркировки.


Если ПустоеЗначение(ОбрДок.КТН) = 0 Тогда
    Если ОбрДок.Касса.ФФД_ККТ = Перечисление.ФФД_ККТ.ФФД1_2 Тогда
        // Для касс с ФФД 1.2 передаем весь считанный код целиком
        ФискальныйРегистратор.BarCode = СокрЛП(ОбрДок.КТН);
        Рез = ФискальныйРегистратор.FNSendItemBarcode();                
    Иначе    
        // Для касс с ФФД 1.05 (или старых прошивок) разбираем код маркировки
        GTIN = Сред(КТН, 3, 14);                            
        SerialNumber = Сред(КТН, 19, 13);
        
        // Передаем тип маркировки товара (17485 соответствует "444D")
        ФискальныйРегистратор.MarkingType = 17485;    
        ФискальныйРегистратор.GTIN = GTIN;
        ФискальныйРегистратор.SerialNumber = SerialNumber;
        
        // Вызываем метод отправки тега маркировки
        Рез = ФискальныйРегистратор.FNSendItemCodeData();    
    КонецЕсли;
КонецЕсли;

В данном примере мы анализируем реквизит кассы ФФД_ККТ. Если используется современный формат, мы применяем свойство драйвера BarCode и метод FNSendItemBarcode(), передавая считанный код без каких-либо изменений. Если же используется старый формат, применяется классический метод FNSendItemCodeData(), для работы которого мы предварительно извлекаем переменные GTIN и SerialNumber.

Особенности проверки молочной продукции

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

Если касса работает в автономном режиме (без доступа к интернету) или связь с сервером временно потеряна, онлайн-проверка не будет пройдена. В таких случаях касса может напечатать на чеке статус [М-] (не прошел проверку) или [М] (проверка не проводилась). Это нормальное поведение, учитывающее специфику криптохвостов молочных марок.

Объемно-сортовой учет (ОСУ) в оптовом звене

Часто возникает потребность продать партию "молочки" мелким оптом за наличный расчет с указанием ИНН покупателя в чеке. Для таких ситуаций законодательством предусмотрен так называемый Объемно-сортовой учет (ОСУ).

Разберем, как это работает и какие теги необходимо заполнять:

  1. При применении ОСУ кассиру не требуется сканировать каждую бутылку или упаковку творога. Учет ведется партионно.
  2. Вместо уникального DataMatrix в кассу передается только GTIN (глобальный идентификатор товара, который часто совпадает с обычным штрихкодом EAN-13, но дополняется ведущими нулями до 14 символов) и количество продаваемых единиц.
  3. В формате ФФД 1.2 для этих данных используется тег 1163 (код товара).
  4. Обязательным условием является передача отраслевого реквизита. Драйверу необходимо передать параметр industryDetails со значением crpt=mrk.

При использовании ОСУ касса формирует уведомление о реализации, которое корректно спишет указанный объем продукции с баланса продавца в системе Честный ЗНАК без детальной поштучной прослеживаемости.

Специфика выбытия марок при B2B продажах

Проанализируем ситуацию, когда расчет происходит между двумя юридическими лицами или ИП (B2B продажи). Если в чек передаются реквизиты покупателя (тег 1227 "Наименование покупателя" и тег 1228 "ИНН покупателя"), система маркировки понимает, что это не продажа конечному потребителю.

В таком случае автоматическое выбытие (списание) кода маркировки из оборота не происходит. Чек служит лишь подтверждением факта финансовых расчетов. Переход права собственности на саму продукцию оформляется отдельно с помощью электронного документооборота (ЭДО) путем передачи Универсального передаточного документа (УПД).

Важный совет: Чтобы избежать логических коллизий в системах учета, для таких чеков часто используют признак способа расчета "Оплата кредита". Выбытие кодов в системе ОИСМ жестко привязано к чекам, имеющим признак "Полный расчет" или "Частичный расчет и кредит". Применение "Оплаты кредита" гарантирует, что кассовый чек не повлияет на движение марок, и вся логика учета останется на стороне ЭДО.

Критически важный момент: правильная настройка сканера штрихкодов

И в завершение выясним причину распространенной аппаратной ошибки, с которой сталкиваются системные администраторы. Поскольку в ФФД 1.2 код маркировки передается "как есть", сканер штрихкодов должен считывать и передавать в 1С абсолютно все спецсимволы, заложенные в DataMatrix.

Самым важным из них является невидимый символ <GS> (шестнадцатеричный код 0x1D или ASCII 29). Многие дешевые или неправильно настроенные сканеры "вырезают" этот символ из строки при считывании, так как воспринимают его как служебный мусор. Если в драйвер Штрих-М попадет обрезанная строка без разделителя 0x1D, фискальный накопитель не сможет разобрать блоки данных внутри DataMatrix и немедленно вернет ошибку проверки марки. Обязательно переводите сканеры в режим эмуляции COM-порта и проверяйте правильность передачи спецсимволов специальными утилитами.

← На главную