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

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

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

Выясняем причину ограничений и структуру данных

Для начала проанализируем ситуацию с хранением данных. В 1С:УНФ эти два кода хранятся в разных местах, что и вызывает основную сложность при формировании единого макета:

  1. EAN-13 (или GTIN): Обычно хранится в регистре сведений ШтрихкодыНоменклатуры. Он привязан к конкретной карточке товара или характеристике.
  2. DataMatrix: Это уникальный код маркировки для каждой единицы продукции. Он хранится в справочнике ШтрихкодыУпаковокИТоваров или генерируется динамически в документе Эмиссия кодов маркировки ИС МП.

Стандартный шаблон этикетки для маркировки настроен таким образом, что поле Штрихкод жестко зарезервировано под DataMatrix. Если мы просто добавим еще одну область со штрихкодом в редакторе, система может выдать ошибку или продублировать один и тот же код в обоих полях. Для автоматизации этого процесса можно применить готовое расширение для вывода основного штрихкода номенклатуры EAN-13 на этикетку маркированного товара.

Способ 1: Использование внешней печатной формы (для базовых версий)

Если вы используете 1С:УНФ Базовая, прямое изменение конфигурации невозможно, так как это лишит программу автоматических обновлений. В этом случае мы рекомендуем использовать механизм внешних печатных форм и обработок. Разберем по шагам, как это реализовать:

Во-первых, создадим внешнюю обработку печати, которая будет перехватывать данные из документа Эмиссия кодов маркировки. Во-вторых, в макете этой обработки мы создадим два графических объекта (типа «Рисунок»). Одному присвоим имя РисунокШтрихкодEAN, другому — РисунокШтрихкодDM.

Рассмотрим пример кода в модуле обработки, который отвечает за формирование этих изображений:


// Параметры для генерации линейного штрихкода
ПараметрыEAN = МенеджерОборудованияВызовСервера.ПараметрыГенерацииШтрихкода();
ПараметрыEAN.ТипКода = 1; // Соответствует EAN13
ПараметрыEAN.Штрихкод = СтрокаGTIN; // Получаем из данных номенклатуры
ПараметрыEAN.Ширина = 150;
ПараметрыEAN.Высота = 50;

// Генерируем картинку EAN-13
КартинкаEAN = МенеджерОборудованияВызовСервера.СформироватьШтрихкод(ПараметрыEAN);

// Параметры для генерации DataMatrix
ПараметрыDM = МенеджерОборудованияВызовСервера.ПараметрыГенерацииШтрихкода();
ПараметрыDM.ТипКода = 16; // Соответствует DataMatrix
ПараметрыDM.Штрихкод = СтрокаКодаМаркировки;
ПараметрыDM.Ширина = 100;
ПараметрыDM.Высота = 100;

// Генерируем картинку DataMatrix
КартинкаDM = МенеджерОборудованияВызовСервера.СформироватьШтрихкод(ПараметрыDM);

После генерации этих картинок мы программно выводим их в соответствующие области макета ТабличныйДокумент.

Способ 2: Модификация схемы компоновки данных (СКД) в шаблоне

Если версия программы позволяет вносить изменения (ПРОФ или КОРП), можно модифицировать саму логику выбора полей в шаблоне этикетки. Посмотрим на пример изменения запроса в схеме компоновки данных (СКД), которая отвечает за «Поля шаблона».

Нам необходимо добавить в запрос получение данных из регистра ШтрихкодыНоменклатуры. Проанализируем ситуацию: код DataMatrix уже содержит в себе GTIN (это первые 14 цифр после префикса 01). Мы можем использовать это для «парсинга» кода прямо на лету.

Для выделения EAN-13 из кода маркировки в коде печати можно использовать следующую логику:


Если Лев(СтрокаМаркировки, 2) = "01" Тогда
    // Извлекаем GTIN (14 символов после префикса 01)
    ЧистыйGTIN = Сред(СтрокаМаркировки, 3, 14);
    // Если нужно преобразовать 14-символьный GTIN в 13-символьный EAN
    Если Лев(ЧистыйGTIN, 1) = "0" Тогда
        КодEAN13 = Сред(ЧистыйGTIN, 2);
    Иначе
        КодEAN13 = ЧистыйGTIN;
    КонецЕсли;
КонецЕсли;

Затем это значение КодEAN13 передается в параметр макета. Важно помнить, что в редакторе шаблонов этикеток 1С поле должно быть определено как Штрихкод, чтобы система вызвала компоненту печати. Чтобы обмануть систему и вывести два кода, придется в модуле менеджера или в процедуре ПечатьЭтикетокИЦенников добавить условие, которое будет обрабатывать дополнительное поле (например, названное ДополнительныйШтрихкод) аналогично основному. Для смежных задач доработки шаблонов ИСМП в УНФ также подойдёт расширение для добавления текущей даты на макет этикетки.

Почему шаблон «Этикетка для маркировки» не виден в общем списке?

Часто возникает вопрос: почему созданный шаблон «Этикетка (обувь, одежда, табак...)» не отображается в рабочем месте Печать этикеток и ценников? Выясним причину.

В 1С:УНФ реализовано жесткое разделение типов шаблонов:

Совет: Если вы хотите печатать этикетку с DataMatrix из обычного списка товаров, вам придется создать новый шаблон типа «Для товаров», но через расширение или доработку добавить в него возможность считывания данных из регистра кодов маркировки.

Особенности работы с компонентой печати штрихкодов

При программном формировании этикетки важно правильно настроить параметры объекта МенеджерОборудованияВызовСервера. Рассмотрим важные параметры, которые влияют на читаемость кода сканером:

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

← На главную