При работе с маркируемыми товарами («Честный ЗНАК») пользователи часто сталкиваются с ограничением стандартного редактора этикеток в 1С:Управление нашей фирмой, особенно в облачном сервисе 1С:Фреш. Стандартный функционал печати кодов маркировки зачастую не позволяет вывести на одну этикетку одновременно и DataMatrix, и обычный линейный штрихкод EAN-13. Рассмотрим подробно, как можно решить эту задачу различными способами, проанализируем технические нюансы и разберем примеры реализации.
В типовом интерфейсе печати кодов маркировки 1С использует упрощенные макеты. Основная сложность заключается в том, что данные для DataMatrix и данные для обычного штрихкода хранятся в разных структурах. Чтобы не настраивать всё с нуля, можно использовать набор готовых примеров макетов ценников и этикеток. В режиме «Печать кодов маркировки» система «видит» GTIN и серийный номер, но не всегда дает прямой доступ к полю Штрихкод из карточки номенклатуры или характеристики. Кроме того, сервис 1С:Фреш накладывает ограничения на изменение системных шрифтов и использование внешних компонент.
Одним из самых быстрых способов добавить штрихкод в текстовое поле этикетки является использование специализированных шрифтов, таких как EanGnivc или EAN13.ttf. Суть метода заключается в том, что мы выводим обычное текстовое поле, но меняем его шрифт на штрихкод. Однако важно понимать: нельзя просто вывести цифры 460... и получить сканируемый код. Линейный штрихкод имеет свою структуру, включающую стартовые/стоповые символы и контрольное число.
Рассмотрим алгоритм преобразования числовой строки в строку для шрифта. Нам необходимо реализовать функцию, которая преобразует 13 цифр в специальный набор символов (буквы разного регистра и знаки), которые при отображении шрифтом превратятся в полоски штрихкода.
Проанализируем пример кода для подготовки такой строки:
Функция СформироватьСтрокуДляШрифтаEAN13(Знач Штрихкод) Экспорт
// Штрихкод должен состоять из 13 цифр
Если СтрДлина(Штрихкод) <> 13 Тогда
Возврат Штрихкод;
КонецЕсли;
// Контрольный символ уже должен быть рассчитан
ЛеваяЧасть = Лев(Штрихкод, 1);
ПерваяГруппа = Сред(Штрихкод, 2, 6);
ВтораяГруппа = Прав(Штрихкод, 6);
// Пример упрощенной логики преобразования (зависит от конкретного шрифта)
// Для каждого шрифта используется своя таблица соответствия символов
Результат = ЛеваяЧасть + " " + ПреобразоватьПервуюГруппу(ПерваяГруппа) + "|" + ПреобразоватьВторуюГруппу(ВтораяГруппа) + "!";
Возврат Результат;
КонецФункции
Важный момент: если вы работаете в 1С:Фреш через тонкий клиент, шрифт должен быть установлен на локальном компьютере пользователя. В настройках шаблона этикетки в поле «Шрифт» вы сможете выбрать установленный EAN13, если он доступен в системе. Если же используется веб-клиент, данный метод может работать нестабильно, так как сервер «Фреша» не знает о вашем локальном шрифте.
Это наиболее надежный и профессиональный способ, который подходит и для локальных версий, и для облака. Мы создаем внешнюю обработку, которая заменяет стандартную печатную форму. В этом случае мы не ограничены стандартным редактором и можем программно управлять объектами макета.
Разберем, как это работает по шагам:
DataMatrix.EAN-13.Посмотрим на пример кода, который инициализирует печать штрихкода программно через компоненту печати штрихкодов 1С:
// Пример заполнения штрихкода в табличном документе
ОбластьМакета = Макет.ПолучитьОбласть("Этикетка");
РисунокШК = ОбластьМакета.Рисунки.ШтрихкодEAN;
// Используем стандартную компоненту 1С для генерации изображения
ПараметрыШК = Новый Структура;
ПараметрыШК.Вставить("ТипКода", 1); // 1 соответствует EAN13
ПараметрыШК.Вставить("Штрихкод", ОбъектПечати.ШтрихкодНоменклатуры);
ПараметрыШК.Вставить("ОтображатьТекст", Истина);
// Передаем данные в объект рисунка
РисунокШК.Объект.Сообщение = ПараметрыШК.Штрихкод;
РисунокШК.Объект.ТипКода = ПараметрыШК.ТипКода;
Преимущество этого метода в том, что 1С сама генерирует картинку штрихкода. Это избавляет от необходимости устанавливать шрифты на каждый компьютер и гарантирует стопроцентную считываемость кода сканером.
Часто в данных маркировки доступен только GTIN, состоящий из 14 знаков. Пользователи путаются, как превратить его в привычный штрихкод. Выясним причину: GTIN-14 для единичной упаковки — это чаще всего обычный EAN-13 с добавленным в начале нулем.
Алгоритм действий:
GTIN. Если она начинается с "0", просто отсекаем этот символ.EAN-13.GTIN начинается не с нуля (например, для групповых упаковок используется формат ITF-14), то печатать его как EAN-13 нельзя — сканер не сможет его распознать.При совмещении двух кодов на одной бирке (особенно в легкой промышленности) важно соблюдать «зоны отчуждения» (пустые поля вокруг кода). Проанализируем типичные ошибки:
Слишком близкое расположение: Если DataMatrix и EAN-13 находятся вплотную друг к другу, современные 2D-сканеры могут ошибочно считывать не тот код, который требуется в данный момент. Рекомендуется выдерживать расстояние между кодами не менее 5 мм.
Масштабирование: При добавлении EAN-13 на небольшую этикетку (например, 58х40 мм), старайтесь не сжимать штрихкод по горизонтали. Нарушение пропорций штрихов и пробелов приведет к тому, что код будет выглядеть корректно, но не будет читаться.
Поскольку во «Фреше» нельзя напрямую менять код конфигурации, наиболее жизнеспособным решением будет Расширение конфигурации. Рассмотрим преимущества этого подхода:
Для реализации через расширение потребуется программист 1С, который перехватит процедуру заполнения данных для печати (обычно это процедуры в модулях МенеджерОборудованияВызовСервера или специализированные модули подсистемы маркировки) и добавит туда штрихкод из карточки товара.
Подводя итог, отметим: если вам нужно «быстро и дешево» — попробуйте метод со шрифтами (помня о преобразовании строки). Если же требуется стабильное решение для массовой печати на производстве — заказывайте внешнюю печатную форму или расширение, использующее встроенную компоненту печати штрихкодов 1С.