При работе с системой маркировки «Честный Знак» разработчики часто сталкиваются с требованием добавить символ FNC1 в начало кода DataMatrix. Это необходимо для того, чтобы штрихкод соответствовал стандарту GS1 DataMatrix. Без этого символа сканеры и проверочные приложения могут некорректно интерпретировать данные, а кассовое ПО — выдавать ошибки при попытке пробития товара.
В этой статье мы подробно разберем, что такое FNC1, как он реализуется в программном коде 1С и какие настройки компоненты печати штрихкодов необходимо выполнить, чтобы маркировка читалась корректно (также не забывайте про автоматическое обновление токенов Честного Знака, чтобы избежать остановок в работе).
Разберем ситуацию: символ FNC1 (Function Code 1) не является обычным печатным ASCII-символом, который можно ввести с клавиатуры. В спецификации DataMatrix это специальное управляющее кодовое слово (код 232). Проанализируем, как это работает:
]d2 к считанной строке.Проблема многих разработчиков заключается в попытке «вставить» этот символ как текст. Однако FNC1 — это инструкция для генератора штрихкода, а не часть текстовых данных.
В современных типовых конфигурациях (Розница, УТ 11, ERP, УНФ) предусмотрены специальные механизмы для подготовки строки кода маркировки к печати. Вместо того чтобы изобретать велосипед, воспользуемся функциями подсистемы ШтрихкодированиеИС. Рассмотрим пример кода: для полной автоматизации работы с Честным Знаком есть интеграция с ГИСМ и печать этикеток.
// Подготовка кода GS1 для передачи в компоненту печати
// КодМаркировкиИсходный — это строка вида 0102900018163...
// Формат 24 соответствует стандарту GS1 DataMatrix
РезультатДляПечати = ШтрихкодированиеИС.КодGS1ДляКомпонентыПечати(КодМаркировкиИсходный, 24);
Также часто требуется передать код маркировки во внешние системы (например, на сайт Bitrix) в формате Base64. Для этого в 1С существует удобная функция:
// Кодирование марки в Base64 с сохранением спецсимволов
СтрокаBase64 = ШтрихкодированиеИСКлиентСервер.ШтрихкодВBase64(КодМаркировкиИсходный);
Если же ваша задача — распечатать код маркировки с криптохвостом из заказа на эмиссию, логика подготовки данных будет схожей.
Посмотрим на ситуацию с символом ASCII 29. В среде 1С принято использовать Символ(29) как программный эквивалент FNC1. Большинство компонент печати 1С настроены так, что при обнаружении Символ(29) они автоматически преобразуют его в нужное кодовое слово внутри графического изображения.
Выясним основную причину, по которой символ FNC1 может «пропадать» при печати, даже если вы добавили его в строку данных. Все дело в настройках самой компоненты 1С:Печать штрихкодов. Существует два типа DataMatrix:
FNC1 в начало, даже если вы добавите туда спецсимволы.FNC1 в первую позицию кода.Проанализируем шаги для исправления макета этикетки — для этого подойдёт печать этикеток DataMatrix для системы Честный Знак.
Как показывает практика, после изменения типа кода с 18 на 24, приложение «Честный Знак.Бизнес» начинает успешно проходить проверку, так как сканер начинает видеть заветный идентификатор ]d2.
Если вы формируете строку вручную для сторонних систем или принтеров, например, когда выполняется маркировка остатков товаров на складе, можно попробовать добавить символ разделителя явно. Разберем пример на языке 1С:
// Определяем символ GS (Group Separator)
СимволFNC1 = Символ(29);
// Формируем строку маркировки (упрощенный пример)
// В некоторых случаях символ вставляется перед идентификаторами применения (AI)
ПолныйКодМаркировки = "01" + GTIN + "21" + СерийныйНомер + СимволFNC1 + "91" + КлючПроверки;
Важное замечание: Не пытайтесь вставить ASCII 232 напрямую через комбинацию Alt+0232 в текстовых редакторах. Это значение выходит за пределы стандартной кодировки и может быть искажено при сохранении файла (например, в формате CSV или при передаче через веб-сервисы).
После того как мы внедрили изменения, необходимо убедиться, что код сформирован верно. Проанализируем методы проверки (включая приложение для проверки маркировки в разрешительном режиме):
FNC1 в явном виде.]d2. Если вы видите просто цифры 01..., значит, FNC1 отсутствует или сканер его «обрезает».Часто возникает вопрос: не «испортится» ли символ при хранении в базе данных или на сайте (например, Битрикс). Рассмотрим этот момент подробнее. Символ с кодом 29 является непечатаемым, но это вполне валидный байт данных. При кодировании строки в Base64 этот байт превращается в часть безопасной текстовой последовательности, которую можно передавать через любые API.
Главная опасность подстерегает на этапе записи данных в промежуточные файлы. При сохранении в CSV или TXT убедитесь, что используется кодировка UTF-8 и что ваша программа записи не делает «очистку» строк от управляющих символов. Лучшим решением будет хранить марку в базе 1С в исходном виде, а преобразовывать для печати или передачи в момент совершения операции.
Подведем итог. Для корректной вставки FNC1 в маркировку не нужно пытаться «нарисовать» этот символ. Достаточно использовать Символ(29) в строке данных 1С и, что самое важное, убедиться, что компонента печати использует тип штрихкода GS1 DataMatrix (тип 24). Это гарантирует соблюдение стандартов и отсутствие проблем при проверке контролирующими органами.