Как вывести код маркировки Честный Знак в печатную форму 1С

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

При реализации задач по маркировке товаров в системе 1С программисты часто сталкиваются с проблемой: сформированный в печатной форме код визуально похож на оригинал, но напрочь отказывается считываться приложением Честный Знак или промышленными сканерами. В этой статье мы подробно разберем, как правильно сформировать двухмерный штрихкод стандарта DataMatrix (в этом поможет генератор кодов Data Matrix непосредственно в 1С), какие параметры использовать и как избежать типичных ошибок с управляющими символами.

Различие между QR-кодом и DataMatrix

Первое, на что мы должны обратить внимание — это терминология. Несмотря на то, что многие пользователи называют код маркировки «QR-кодом», технически это GS1 DataMatrix. В отличие от обычного QR-кода, который часто используется для ссылок, DataMatrix позволяет упаковать большой объем информации в очень компактный квадрат. Рассмотрим основные отличия, важные для реализации в 1С:

  1. Структура: DataMatrix не имеет характерных «квадратов» по углам, которые есть у QR-кода. Вместо этого он использует L-образную рамку по двум краям.
  2. Стандарт GS1: Для системы «Честный Знак» используется не просто DataMatrix, а его модификация GS1. Это означает, что внутри строки кода должны присутствовать специальные невидимые идентификаторы применения (AI) и разделители.
  3. Спецсимволы: Самым важным элементом является символ FNC1, который сообщает сканеру, что перед ним именно код стандарта GS1.

Выбор инструмента для печати

Проанализируем доступные инструменты в среде 1С для генерации таких кодов. Как правило, у разработчика есть два основных пути:

  1. Внешняя компонента 1С:Печать штрихкодов: Классический способ. Он до сих пор актуален, если вы используете универсальный передаточный документ (УПД) 2026 для УТ 11.1 или другие старые конфигурации.
  2. Методы БСП (Библиотеки стандартных подсистем): Современный подход. Однако для очень старых релизов, например, когда нужен УПД для 1С: УТ 11.0, часто применяются внешние обработки — для таких задач есть обработка печати штрихкода GTIN и DataMatrix на этикетках.

Если мы используем типовые конфигурации (УТ 11, КА 2, ERP, Бухгалтерия 3), лучше всего обратиться к функционалу модуля МенеджерОборудованияВызовСервера. Это особенно важно, когда в системе настроено создание номенклатуры по данным контрагента через ЭДО с автоматическим определением вида маркировки.

Настройка параметров штрихкода

При формировании структуры ПараметрыШтрихкода крайне важно правильно указать тип кода. Рассмотрим пример настройки для компоненты печати:


ПараметрыШтрихкода = Новый Структура;
ПараметрыШтрихкода.Вставить("ТипВходныхДанных", 0); // Данные передаются как строка
ПараметрыШтрихкода.Вставить("ТипКода", 24);         // 24 соответствует стандарту DataMatrix GS1
ПараметрыШтрихкода.Вставить("ОтображатьТекст", Ложь);
ПараметрыШтрихкода.Вставить("УголПоворота", 0);

Обратите внимание на значение 24 для параметра ТипКода. Если установить тип 18 (обычный DataMatrix), система «Честный Знак» может не распознать код. Для автоматизации процесса часто используется печать кодов маркировки Честного знака с порядковыми номерами — для этого подойдёт обработка автоматической печати кодов Честного Знака на принтерах этикеток.

Работа с управляющим символом GS (FNC1)

Выясним причину, по которой обычное копирование строки КИЗ (Кода Идентификации Заказа) в штрихкод не работает. Код маркировки содержит так называемый «криптохвост» (ключ проверки и код проверки). Чтобы сканер понял, где заканчивается серийный номер и начинается проверочная часть, используются разделители группы — символ GS (Group Separator), код ASCII 29.

В языке 1С этот символ получается функцией Символ(29). Проанализируем правильный алгоритм сборки строки для вывода на печать:


// Определяем символ-разделитель
СимволFNC1 = Символ(29);

// Собираем строку: сначала символ FNC1, затем основные данные, затем снова разделитель перед криптохвостом
// Предположим, что Стр.КИЗ содержит полную строку маркировки, полученную из СУЗ
СтрокаДляПечати = СимволFNC1 + Лев(Стр.КИЗ, 31) + СимволFNC1 + Сред(Стр.КИЗ, 32);

ПараметрыШтрихкода.Вставить("Штрихкод", СтрокаДляПечати);

Важный нюанс: если вы сканируете код ручным сканером в «Блокнот» для проверки, вы, скорее всего, не увидите эти спецсимволы, так как большинство сканеров по умолчанию их отсекают. Для проверки корректности формирования лучше использовать мобильное приложение «Честный Знак» или специализированные утилиты для тестирования штрихкодов.

Особенности печати на термопринтерах

Разберем ситуацию с качеством печати. DataMatrix очень чувствителен к разрешению принтера. Для продуктов питания или лекарств коды могут быть очень мелкими.

  1. Масштабирование: Никогда не растягивайте область рисунка в табличном документе 1С вручную мышкой. Это приводит к размытию границ модулей (точек) кода. Пропорции должны быть строго квадратными.
  2. Разрешение: Для печати мелких кодов рекомендуется использовать принтеры с разрешением не менее 300 dpi. На стандартных 203 dpi мелкие элементы могут «слипаться».
  3. Тихая зона: Оставляйте вокруг кода небольшое белое поле (минимум 1-2 мм). Если текст или рамки печатной формы будут прилегать вплотную к коду, сканер не сможет зацепиться за границы DataMatrix.

Использование методов БСП для вывода в Табличный Документ

Если мы хотим реализовать печать современным способом, рассмотрим использование методов БСП. Это избавит нас от прямой работы с объектами рисунков. Пример функции для формирования картинки штрихкода:


// В типовых конфигурациях используем менеджер оборудования
ДанныеШтрихкода = Новый Структура;
ДанныеШтрихкода.Вставить("Штрихкод", СтрокаДляПечати);
ДанныеШтрихкода.Вставить("ТипШтрихкода", ПороговоеЗначениеТипа); // Соответствует DataMatrix в перечислениях БСП

// Формируем картинку
Результат = МенеджерОборудованияВызовСервера.СформироватьШтрихкод(ДанныеШтрихкода);

Если Результат.Результат Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("ОбластьКода");
    Рисунок = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    Рисунок.Картинка = Результат.Картинка;
    // Настраиваем положение и размер программно
КонецЕсли;

Этот метод предпочтительнее, так как платформа сама заботится о правильной отрисовке модулей штрихкода в зависимости от передаваемых параметров.

Хранение кодов в базе данных

Проанализируем вопрос хранения КИЗ. Не рекомендуется хранить коды в формате Base64 или в виде готовых картинок, так как это сильно раздувает объем базы данных. Правильнее всего хранить исходную символьную строку, включая спецсимволы. При необходимости печати мы просто передаем эту строку в генератор кода с правильными параметрами GS1.

Помните, что корректно настроенный сканер в режиме эмуляции COM-порта передаст в 1С все скрытые символы, что позволит вам сохранить их в исходном виде и в дальнейшем безошибочно воспроизвести на печатной форме.

← На главную