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

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

При работе с системой маркировки «Честный Знак» разработчики часто сталкиваются с требованием добавить символ FNC1 в начало кода DataMatrix. Это необходимо для того, чтобы штрихкод соответствовал стандарту GS1 DataMatrix. Без этого символа сканеры и проверочные приложения могут некорректно интерпретировать данные, а кассовое ПО — выдавать ошибки при попытке пробития товара.

В этой статье мы подробно разберем, что такое FNC1, как он реализуется в программном коде 1С и какие настройки компоненты печати штрихкодов необходимо выполнить, чтобы маркировка читалась корректно (также не забывайте про автоматическое обновление токенов Честного Знака, чтобы избежать остановок в работе).

Понятие символа FNC1 и его техническая роль

Разберем ситуацию: символ FNC1 (Function Code 1) не является обычным печатным ASCII-символом, который можно ввести с клавиатуры. В спецификации DataMatrix это специальное управляющее кодовое слово (код 232). Проанализируем, как это работает:

  1. Первая позиция: Если этот код стоит первым в последовательности данных, он сообщает сканеру, что перед ним штрихкод стандарта GS1. В этом случае сканер добавляет префикс ]d2 к считанной строке.
  2. Разделитель: Если код встречается внутри строки, он служит разделителем (Group Separator) для полей переменной длины.

Проблема многих разработчиков заключается в попытке «вставить» этот символ как текст. Однако FNC1 — это инструкция для генератора штрихкода, а не часть текстовых данных.

Использование встроенных функций 1С (БСП)

В современных типовых конфигурациях (Розница, УТ 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:

  1. Тип 18 (DataMatrix): Обычный код, который кодирует текст «как есть». Он игнорирует правила GS1 и не вставляет признак FNC1 в начало, даже если вы добавите туда спецсимволы.
  2. Тип 24 (GS1 DataMatrix): Специализированный тип для маркировки. Именно он ожидает структуру GS1 и автоматически добавляет инструкцию FNC1 в первую позицию кода.

Проанализируем шаги для исправления макета этикетки — для этого подойдёт печать этикеток DataMatrix для системы Честный Знак.

  1. Откроем макет этикетки в режиме конфигуратора или через обработку редактирования шаблонов.
  2. Выделим объект штрихкода.
  3. В свойствах объекта или в коде обработки, которая выводит штрихкод, найдем параметр ТипКода.
  4. Установим значение 24.

Как показывает практика, после изменения типа кода с 18 на 24, приложение «Честный Знак.Бизнес» начинает успешно проходить проверку, так как сканер начинает видеть заветный идентификатор ]d2.

Программная вставка символа GS (ASCII 29)

Если вы формируете строку вручную для сторонних систем или принтеров, например, когда выполняется маркировка остатков товаров на складе, можно попробовать добавить символ разделителя явно. Разберем пример на языке 1С:


// Определяем символ GS (Group Separator)
СимволFNC1 = Символ(29); 

// Формируем строку маркировки (упрощенный пример)
// В некоторых случаях символ вставляется перед идентификаторами применения (AI)
ПолныйКодМаркировки = "01" + GTIN + "21" + СерийныйНомер + СимволFNC1 + "91" + КлючПроверки;

Важное замечание: Не пытайтесь вставить ASCII 232 напрямую через комбинацию Alt+0232 в текстовых редакторах. Это значение выходит за пределы стандартной кодировки и может быть искажено при сохранении файла (например, в формате CSV или при передаче через веб-сервисы).

Как проверить результат?

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

  1. Использование специализированных приложений: Установите на смартфон приложения вроде «Farma Scanner» или «Честный Знак». Они показывают наличие символа FNC1 в явном виде.
  2. Проверка через сканер в режиме эмуляции клавиатуры: Если сканер настроен на передачу AIM ID, то при сканировании правильного кода в блокноте вы увидите префикс ]d2. Если вы видите просто цифры 01..., значит, FNC1 отсутствует или сканер его «обрезает».
  3. Тестирование на кассе: Если код успешно преобразуется в тег 1162 (или 2108) и уходит в ОФД без ошибок «Код не распознан», значит, структура GS1 соблюдена.

Хранение и передача через Base64

Часто возникает вопрос: не «испортится» ли символ при хранении в базе данных или на сайте (например, Битрикс). Рассмотрим этот момент подробнее. Символ с кодом 29 является непечатаемым, но это вполне валидный байт данных. При кодировании строки в Base64 этот байт превращается в часть безопасной текстовой последовательности, которую можно передавать через любые API.

Главная опасность подстерегает на этапе записи данных в промежуточные файлы. При сохранении в CSV или TXT убедитесь, что используется кодировка UTF-8 и что ваша программа записи не делает «очистку» строк от управляющих символов. Лучшим решением будет хранить марку в базе 1С в исходном виде, а преобразовывать для печати или передачи в момент совершения операции.

Заключение

Подведем итог. Для корректной вставки FNC1 в маркировку не нужно пытаться «нарисовать» этот символ. Достаточно использовать Символ(29) в строке данных 1С и, что самое важное, убедиться, что компонента печати использует тип штрихкода GS1 DataMatrix (тип 24). Это гарантирует соблюдение стандартов и отсутствие проблем при проверке контролирующими органами.

← На главную