Как добавить штрихкод в виде графического изображения на этикетку в 1С:УНФ?

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

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

Почему штрихкод не выводится как картинка?

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

Различия в поведении макетов, когда на больших форматах штрихкод выводится корректно, а на стандартном размере 58х40 — нет, объясняются тем, что разработчики используют разные методы генерации для разных шаблонов. В простых форматах часто применяется имитация штрихкода с помощью специальных шрифтов (например, EAN13), что технически является текстом, а не графическим объектом.

Решение задачи: создание внешней печатной формы

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

  1. Создайте новую внешнюю обработку в режиме Конфигуратор.
  2. Добавьте макет типа ТабличныйДокумент, в котором разместите область для будущего штрихкода. В свойствах ячейки вместо Параметр используйте Рисунок, либо оставьте поле пустым для последующего программного внедрения объекта Картинка.
  3. В модуле объекта внешней печатной формы реализуйте процедуру формирования печатной формы.

Программная генерация штрихкода

Для корректного отображения штрихкода воспользуемся стандартными механизмами Библиотеки стандартных подсистем (БСП). Рассмотрим пример того, как программно создать объект штрихкода и поместить его в макет:


// Пример программного вывода штрихкода в область макета
// Получаем объект генератора штрихкодов из состава БСП
МенеджерОборудованияВызовСервера.ПолучитьКартинкуШтрихкода(ТипКода, СтрокаКода, Ширина, Высота);

// Далее создаем рисунок в табличном документе
Рисунок = ТабДок.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = ОбъектГенерацииШтрихкода;
Рисунок.Расположить(ОбластьЯчейкиМакета);

Особенности работы с кодами маркировки

Если ваша задача — печать кодов DataMatrix для системы «Честный ЗНАК», важно помнить, что это двухмерный штрихкод. Он принципиально отличается от линейных кодов EAN13 или Code128. Для его отрисовки необходимо передать строку кода маркировки со всеми служебными разделителями GS1 в специальный компонент DataMatrix. Попытка вывести его через обычные шрифты или методы линейных кодов приведет к нечитаемости маркировки для сканеров. При необходимости совместить вывод кодов маркировки и EAN-13 на этикетке можно использовать расширение для печати основного штрихкода на этикетке маркированного товара.

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

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

← На главную