Как вставить штрихкод в печатную форму 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Метод 1. Использование специализированного шрифта (на примере eang000.ttf)

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

Разберем по шагам, как реализовать этот метод:

  1. Установка шрифта в операционную систему. Нам необходимо скачать файл шрифта (например, eang000.ttf) и установить его на рабочий компьютер. Для этого в Windows достаточно кликнуть по файлу правой кнопкой мыши и выбрать пункт «Установить для всех пользователей».
  2. Подготовка макета в 1С. Откроем макет нашей печатной формы. Выберем ячейку, в которой должен выводиться штрихкод. Откроем свойства этой ячейки и в поле «Шрифт» укажем установленный шрифт eang000 (или аналогичный).
  3. Формирование строки штрихкода. Посмотрим на важную особенность: просто передать цифры штрихкода (например, "4601234567890") в ячейку недостаточно. Чтобы сканер смог считать такой код, строка должна содержать стартовые и стоповые символы, а также контрольный символ, рассчитанный по специальному алгоритму. Обычно для этого в конфигурации пишется или используется готовая функция преобразования строки.

Преимущества метода:

Недостатки метода:

Метод 2. Использование внешней ActiveX-компоненты (1С:Печать штрихкодов)

Этот метод долгое время являлся стандартом для обычных форм и старых конфигураций 1С. Он базируется на использовании специальной библиотеки (обычно 1CBarCod.dll), которая регистрируется в операционной системе Windows как COM/ActiveX-объект.

Рассмотрим подробнее, как интегрировать этот объект в макет:

  1. Установка и регистрация компоненты. На рабочем месте пользователя должна быть установлена утилита «1С:Печать штрихкодов». При установке библиотека регистрируется в реестре Windows.
  2. Добавление объекта в макет. Откроем макет печатной формы. В меню выберем пункт «Таблица» -> «Рисунки» -> «Вставить объект». В появившемся списке выберем «Элемент управления» и найдем «1С:Печать штрихкодов» (ActiveX-компонента). На макете появится графическая область со штрихкодом по умолчанию. Зададим этому рисунку имя, например, Штрихкод.
  3. Программное заполнение. Теперь нам необходимо передать значение штрихкода в этот объект при формировании печатной формы.

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


ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
// Обращаемся к ActiveX-объекту через коллекцию Рисунки
РезультирующийШтрихкод = ОбластьМакета.Рисунки.Штрихкод.Объект;
// Задаем тип кода (например, 1 соответствует типу EAN13)
РезультирующийШтрихкод.ТипКода = 1;
// Передаем строку штрихкода для отображения
РезультирующийШтрихкод.Сообщение = "4601234567890";
// Выводим область в результирующий табличный документ
ТабличныйДокумент.Вывести(ОбластьМакета);

Преимущества метода:

Недостатки метода:

Метод 3. Современный подход — Генерация штрихкода на сервере через БСП

Выясним, как решать эту задачу в современных реалиях. В актуальных версиях конфигураций на управляемых формах (УТ 11, ERP, КА, УНФ) применяется современная Native-компонента генерации изображений штрихкодов, поставляемая в составе Библиотеки стандартных подсистем (БСП). Она полностью лишена недостатков предыдущих методов.

Главная особенность современного подхода заключается в том, что штрихкод генерируется на стороне сервера в виде обычной картинки (формата PNG) и помещается в стандартный графический рисунок табличного документа. Клиентскому компьютеру вообще не требуется иметь какие-либо установленные компоненты или шрифты.

Выполним интеграцию по шагам:

  1. Подготовка макета. В макете печатной формы создаем обычный рисунок типа «Картинка» (через меню «Таблица» -> «Рисунки» -> «Вставить картинку»). Не выбираем файлы, оставляем её пустой. Присваиваем рисунку имя Штрихкод в панели свойств.
  2. Написание серверного кода. Используем функции общего модуля БСП ГенерацияШтрихкодаВызовСервера для получения готового бинарного изображения штрихкода и передачи его в макет.

Рассмотрим подробнее пример программного кода для генерации штрихкода средствами БСП:


// Шаг 1. Инициализируем структуру параметров генерации
ПараметрыШтрихкода = ГенерацияШтрихкодаКлиентСервер.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.Штрихкод = "4601234567890"; // Наш штрихкод
ПараметрыШтрихкода.ТипКода  = 1; // Указываем тип EAN13
ПараметрыШтрихкода.Ширина   = 300; // Размеры картинки в пикселях
ПараметрыШтрихкода.Высота  = 100;
ПараметрыШтрихкода.ОтображатьТекст = Истина; // Выводить ли текстовые цифры под штрихами

// Шаг 2. Вызываем серверный метод БСП для генерации картинки
РезультатГенерации = -1;
Попытка
    РезультатГенерации = ГенерацияШтрихкодаВызовСервера.ИзображениеШтрихкода(ПараметрыШтрихкода);
Исключение
    ЗаписьЖурналаРегистрации("ПечатьШтрихкода", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка генерации: " + ОписаниеОшибки());
КонецПопытки;

// Шаг 3. Заполняем область макета полученным изображением
Если ТипЗнч(РезультатГенерации) = Тип("Структура") И РезультатГенерации.Результат Тогда
    ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
    // Помещаем полученную картинку в пустой рисунок на макете
    ОбластьМакета.Рисунки.Штрихкод.Картинка = РезультатГенерации.Картинка;
    ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
    ВызватьИсключение "Не удалось сгенерировать штрихкод для печатной формы.";
КонецЕсли;

Метод 4. Работа с двухмерными кодами (QR-код и DataMatrix)

Современные требования ведения бизнеса часто выходят за рамки линейных штрихкодов. Нам может потребоваться вывести двумерный QR-код (например, для систем быстрых платежей СБП) или код маркировки DataMatrix (для интеграции с ИС «Честный ЗНАК»).

Современная Native-компонента БСП с легкостью справляется с этой задачей. Нам достаточно изменить параметры генерации в коде:

Метод 5. Использование внешних Web-API (альтернатива без компонент)

Встречаются ситуации, когда мы работаем в сильно устаревшей или кастомной конфигурации без БСП, а развертывание и регистрация ActiveX-компонент невозможна из-за ограничений прав доступа или использования операционных систем семейства Linux на рабочих местах. В таком случае отличной альтернативой является отправка HTTP-запроса к внешним веб-сервисам генерации штрихкодов.

Проанализируем алгоритм этого решения:

  1. В коде формирования печатной формы мы конструируем HTTP-запрос к проверенному публичному API-генератору штрихкодов, передавая параметры (тип кода, значение, размеры) в строке запроса.
  2. Отправляем GET-запрос с помощью встроенного объекта 1С HTTPСоединение.
  3. Получаем двоичные данные ответа, содержащие картинку штрихкода.
  4. Создаем объект Картинка на основе полученных двоичных данных и помещаем его в макет.

Этот метод гарантирует абсолютную кроссплатформенность и не требует установки никаких библиотек на сервер или клиентские ПК, однако напрямую зависит от стабильности интернет-соединения.

Резюме и рекомендации

Мы подробно разобрали различные способы вывода штрихкодов в печатные формы 1С. Подводя итоги, дадим ключевые рекомендации разработчикам:

← На главную