Как добавить штрихкод EAN-13 на этикетку с кодом DataMatrix в 1С:УНФ

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

При работе с маркируемыми товарами («Честный ЗНАК») пользователи часто сталкиваются с ограничением стандартного редактора этикеток в 1С:Управление нашей фирмой, особенно в облачном сервисе 1С:Фреш. Стандартный функционал печати кодов маркировки зачастую не позволяет вывести на одну этикетку одновременно и DataMatrix, и обычный линейный штрихкод EAN-13. Рассмотрим подробно, как можно решить эту задачу различными способами, проанализируем технические нюансы и разберем примеры реализации.

Проблема использования стандартного редактора

В типовом интерфейсе печати кодов маркировки 1С использует упрощенные макеты. Основная сложность заключается в том, что данные для DataMatrix и данные для обычного штрихкода хранятся в разных структурах. Чтобы не настраивать всё с нуля, можно использовать набор готовых примеров макетов ценников и этикеток. В режиме «Печать кодов маркировки» система «видит» GTIN и серийный номер, но не всегда дает прямой доступ к полю Штрихкод из карточки номенклатуры или характеристики. Кроме того, сервис 1С:Фреш накладывает ограничения на изменение системных шрифтов и использование внешних компонент.

Метод 1: Использование шрифта EAN-13 (символьное преобразование)

Одним из самых быстрых способов добавить штрихкод в текстовое поле этикетки является использование специализированных шрифтов, таких как EanGnivc или EAN13.ttf. Суть метода заключается в том, что мы выводим обычное текстовое поле, но меняем его шрифт на штрихкод. Однако важно понимать: нельзя просто вывести цифры 460... и получить сканируемый код. Линейный штрихкод имеет свою структуру, включающую стартовые/стоповые символы и контрольное число.

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

Проанализируем пример кода для подготовки такой строки:


Функция СформироватьСтрокуДляШрифтаEAN13(Знач Штрихкод) Экспорт
    // Штрихкод должен состоять из 13 цифр
    Если СтрДлина(Штрихкод) <> 13 Тогда
        Возврат Штрихкод;
    КонецЕсли;

    // Контрольный символ уже должен быть рассчитан
    ЛеваяЧасть = Лев(Штрихкод, 1);
    ПерваяГруппа = Сред(Штрихкод, 2, 6);
    ВтораяГруппа = Прав(Штрихкод, 6);

    // Пример упрощенной логики преобразования (зависит от конкретного шрифта)
    // Для каждого шрифта используется своя таблица соответствия символов
    Результат = ЛеваяЧасть + " " + ПреобразоватьПервуюГруппу(ПерваяГруппа) + "|" + ПреобразоватьВторуюГруппу(ВтораяГруппа) + "!";
    
    Возврат Результат;
КонецФункции

Важный момент: если вы работаете в 1С:Фреш через тонкий клиент, шрифт должен быть установлен на локальном компьютере пользователя. В настройках шаблона этикетки в поле «Шрифт» вы сможете выбрать установленный EAN13, если он доступен в системе. Если же используется веб-клиент, данный метод может работать нестабильно, так как сервер «Фреша» не знает о вашем локальном шрифте.

Метод 2: Использование внешней печатной формы (EPF)

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

Разберем, как это работает по шагам:

  1. Создаем новый макет этикетки в виде Табличного документа.
  2. В макет добавляем два объекта типа Рисунок.
  3. Для первого рисунка устанавливаем тип «Штрихкод» и выбираем формат DataMatrix.
  4. Для второго рисунка устанавливаем тип «Штрихкод» и выбираем формат EAN-13.
  5. В коде обработки заполняем параметры этих рисунков значениями из данных маркировки и данных номенклатуры.

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


// Пример заполнения штрихкода в табличном документе
ОбластьМакета = Макет.ПолучитьОбласть("Этикетка");
РисунокШК = ОбластьМакета.Рисунки.ШтрихкодEAN;

// Используем стандартную компоненту 1С для генерации изображения
ПараметрыШК = Новый Структура;
ПараметрыШК.Вставить("ТипКода", 1); // 1 соответствует EAN13
ПараметрыШК.Вставить("Штрихкод", ОбъектПечати.ШтрихкодНоменклатуры);
ПараметрыШК.Вставить("ОтображатьТекст", Истина);

// Передаем данные в объект рисунка
РисунокШК.Объект.Сообщение = ПараметрыШК.Штрихкод;
РисунокШК.Объект.ТипКода = ПараметрыШК.ТипКода;

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

Метод 3: Преобразование GTIN-14 в EAN-13

Часто в данных маркировки доступен только GTIN, состоящий из 14 знаков. Пользователи путаются, как превратить его в привычный штрихкод. Выясним причину: GTIN-14 для единичной упаковки — это чаще всего обычный EAN-13 с добавленным в начале нулем.

Алгоритм действий:

  1. Проанализируем строку GTIN. Если она начинается с "0", просто отсекаем этот символ.
  2. Полученные 13 цифр передаем в поле для печати EAN-13.
  3. Если GTIN начинается не с нуля (например, для групповых упаковок используется формат ITF-14), то печатать его как EAN-13 нельзя — сканер не сможет его распознать.

Рекомендации по размещению кодов на этикетке

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

Слишком близкое расположение: Если DataMatrix и EAN-13 находятся вплотную друг к другу, современные 2D-сканеры могут ошибочно считывать не тот код, который требуется в данный момент. Рекомендуется выдерживать расстояние между кодами не менее 5 мм.

Масштабирование: При добавлении EAN-13 на небольшую этикетку (например, 58х40 мм), старайтесь не сжимать штрихкод по горизонтали. Нарушение пропорций штрихов и пробелов приведет к тому, что код будет выглядеть корректно, но не будет читаться.

Особенности для облака 1С:Фреш

Поскольку во «Фреше» нельзя напрямую менять код конфигурации, наиболее жизнеспособным решением будет Расширение конфигурации. Рассмотрим преимущества этого подхода:

  1. Расширение может добавить в структуру данных печати этикеток поле со штрихкодом характеристики или номенклатуры.
  2. После установки расширения в стандартном редакторе шаблонов этикеток появится новое доступное поле, которое можно просто перетащить в макет.
  3. Это сохраняет возможность использовать типовой механизм печати, но расширяет набор доступных данных.

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

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

← На главную