В процессе работы с маркируемой продукцией (обувь, одежда, табак) пользователи 1С:Управление нашей фирмой (УНФ) часто сталкиваются с необходимостью разместить на одной этикетке сразу два идентификатора: привычный линейный штрихкод EAN-13 (для складского учета и кассы) и обязательный код DataMatrix (для системы «Честный ЗНАК»). Стандартные механизмы печати этикеток в 1С зачастую ориентированы на вывод только одного типа кода, что создает определенные трудности. Рассмотрим подробнее, как решить эту задачу технически.
Для начала проанализируем ситуацию с хранением данных. В 1С:УНФ эти два кода хранятся в разных местах, что и вызывает основную сложность при формировании единого макета:
ШтрихкодыНоменклатуры. Он привязан к конкретной карточке товара или характеристике.ШтрихкодыУпаковокИТоваров или генерируется динамически в документе Эмиссия кодов маркировки ИС МП.Стандартный шаблон этикетки для маркировки настроен таким образом, что поле Штрихкод жестко зарезервировано под DataMatrix. Если мы просто добавим еще одну область со штрихкодом в редакторе, система может выдать ошибку или продублировать один и тот же код в обоих полях. Для автоматизации этого процесса можно применить готовое расширение для вывода основного штрихкода номенклатуры EAN-13 на этикетку маркированного товара.
Если вы используете 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);
После генерации этих картинок мы программно выводим их в соответствующие области макета ТабличныйДокумент.
Если версия программы позволяет вносить изменения (ПРОФ или КОРП), можно модифицировать саму логику выбора полей в шаблоне этикетки. Посмотрим на пример изменения запроса в схеме компоновки данных (СКД), которая отвечает за «Поля шаблона».
Нам необходимо добавить в запрос получение данных из регистра ШтрихкодыНоменклатуры. Проанализируем ситуацию: код 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 из обычного списка товаров, вам придется создать новый шаблон типа «Для товаров», но через расширение или доработку добавить в него возможность считывания данных из регистра кодов маркировки.
При программном формировании этикетки важно правильно настроить параметры объекта МенеджерОборудованияВызовСервера. Рассмотрим важные параметры, которые влияют на читаемость кода сканером:
УровеньКоррекцииОшибок: Для DataMatrix рекомендуется устанавливать значение, обеспечивающее избыточность (обычно тип ECC200), чтобы код считывался даже при частичном повреждении этикетки.Масштабировать: Установите в Истина, чтобы штрихкод вписывался в границы рисунка на макете.Пропорционально: Обязательно для DataMatrix, так как искажение соотношения сторон сделает код нечитаемым.Проанализировав все способы, можно сделать вывод: наиболее надежным и «чистым» методом для УНФ является создание внешней печатной формы. Это позволит вам гибко управлять размещением элементов, использовать произвольное количество штрихкодов и при этом сохранить конфигурацию на поддержке для беспроблемного обновления.