Вывод штрихкода в печатную форму — это стандартная задача, с которой регулярно сталкиваются разработчики при автоматизации складского учета, розничной торговли и логистики. В зависимости от версии платформы, используемой конфигурации и операционной системы, эту задачу можно решить несколькими способами. Рассмотрев опыт разработчиков и современные стандарты платформы «1С:Предприятие 8.3», мы детально разберем все доступные методы: от классических (с использованием шрифтов и внешних компонент) до современных кроссплатформенных решений.
Проанализируем самый простой с точки зрения программирования способ — вывод штрихкода с помощью специального шрифта, установленного в операционной системе. Суть метода заключается в том, что обычная текстовая строка в ячейке табличного документа отображается в виде штрихов благодаря выбранному шрифту семейства EAN.
Разберем по шагам, как реализовать этот метод:
eang000.ttf) и установить его на рабочий компьютер. Для этого в Windows достаточно кликнуть по файлу правой кнопкой мыши и выбрать пункт «Установить для всех пользователей».eang000 (или аналогичный).Преимущества метода:
Недостатки метода:
Этот метод долгое время являлся стандартом для обычных форм и старых конфигураций 1С. Он базируется на использовании специальной библиотеки (обычно 1CBarCod.dll), которая регистрируется в операционной системе Windows как COM/ActiveX-объект.
Рассмотрим подробнее, как интегрировать этот объект в макет:
Штрихкод.Посмотрим на пример программного кода, который используется для управления объектом на макете:
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
// Обращаемся к ActiveX-объекту через коллекцию Рисунки
РезультирующийШтрихкод = ОбластьМакета.Рисунки.Штрихкод.Объект;
// Задаем тип кода (например, 1 соответствует типу EAN13)
РезультирующийШтрихкод.ТипКода = 1;
// Передаем строку штрихкода для отображения
РезультирующийШтрихкод.Сообщение = "4601234567890";
// Выводим область в результирующий табличный документ
ТабличныйДокумент.Вывести(ОбластьМакета);
Преимущества метода:
Недостатки метода:
1CBarCod.dll на компьютере пользователя.Выясним, как решать эту задачу в современных реалиях. В актуальных версиях конфигураций на управляемых формах (УТ 11, ERP, КА, УНФ) применяется современная Native-компонента генерации изображений штрихкодов, поставляемая в составе Библиотеки стандартных подсистем (БСП). Она полностью лишена недостатков предыдущих методов.
Главная особенность современного подхода заключается в том, что штрихкод генерируется на стороне сервера в виде обычной картинки (формата PNG) и помещается в стандартный графический рисунок табличного документа. Клиентскому компьютеру вообще не требуется иметь какие-либо установленные компоненты или шрифты.
Выполним интеграцию по шагам:
Штрихкод в панели свойств.ГенерацияШтрихкодаВызовСервера для получения готового бинарного изображения штрихкода и передачи его в макет.Рассмотрим подробнее пример программного кода для генерации штрихкода средствами БСП:
// Шаг 1. Инициализируем структуру параметров генерации
ПараметрыШтрихкода = ГенерацияШтрихкодаКлиентСервер.ПараметрыГенерацииШтрихкода();
ПараметрыШтрихкода.Штрихкод = "4601234567890"; // Наш штрихкод
ПараметрыШтрихкода.ТипКода = 1; // Указываем тип EAN13
ПараметрыШтрихкода.Ширина = 300; // Размеры картинки в пикселях
ПараметрыШтрихкода.Высота = 100;
ПараметрыШтрихкода.ОтображатьТекст = Истина; // Выводить ли текстовые цифры под штрихами
// Шаг 2. Вызываем серверный метод БСП для генерации картинки
РезультатГенерации = -1;
Попытка
РезультатГенерации = ГенерацияШтрихкодаВызовСервера.ИзображениеШтрихкода(ПараметрыШтрихкода);
Исключение
ЗаписьЖурналаРегистрации("ПечатьШтрихкода", УровеньЖурналаРегистрации.Ошибка, , , "Ошибка генерации: " + ОписаниеОшибки());
КонецПопытки;
// Шаг 3. Заполняем область макета полученным изображением
Если ТипЗнч(РезультатГенерации) = Тип("Структура") И РезультатГенерации.Результат Тогда
ОбластьМакета = Макет.ПолучитьОбласть("СтрокаШтрихкода");
// Помещаем полученную картинку в пустой рисунок на макете
ОбластьМакета.Рисунки.Штрихкод.Картинка = РезультатГенерации.Картинка;
ТабличныйДокумент.Вывести(ОбластьМакета);
Иначе
ВызватьИсключение "Не удалось сгенерировать штрихкод для печатной формы.";
КонецЕсли;
Современные требования ведения бизнеса часто выходят за рамки линейных штрихкодов. Нам может потребоваться вывести двумерный QR-код (например, для систем быстрых платежей СБП) или код маркировки DataMatrix (для интеграции с ИС «Честный ЗНАК»).
Современная Native-компонента БСП с легкостью справляется с этой задачей. Нам достаточно изменить параметры генерации в коде:
ДанныеQRКода, которая принимает текстовую строку (например, ссылку на оплату) и параметры размера, возвращая готовое изображение для вставки в макет печатной формы.ТипКода присваивается значение, соответствующее стандарту DataMatrix (например, значение 24 для GS1 DataMatrix). Компонента автоматически сформирует компактный двумерный код высокой плотности, готовый для считывания 2D-сканерами на складе или кассе.Встречаются ситуации, когда мы работаем в сильно устаревшей или кастомной конфигурации без БСП, а развертывание и регистрация ActiveX-компонент невозможна из-за ограничений прав доступа или использования операционных систем семейства Linux на рабочих местах. В таком случае отличной альтернативой является отправка HTTP-запроса к внешним веб-сервисам генерации штрихкодов.
Проанализируем алгоритм этого решения:
HTTPСоединение.Картинка на основе полученных двоичных данных и помещаем его в макет.Этот метод гарантирует абсолютную кроссплатформенность и не требует установки никаких библиотек на сервер или клиентские ПК, однако напрямую зависит от стабильности интернет-соединения.
Мы подробно разобрали различные способы вывода штрихкодов в печатные формы 1С. Подводя итоги, дадим ключевые рекомендации разработчикам: