При разработке печатных форм в среде 1С:Предприятие 7.7 часто возникает необходимость вывода штрихкода без сопровождающего его текста (Human Readable Text). Это актуально при формировании компактных этикеток, бейджей сотрудников или при печати акцизных марок. Компонента OcvitaBarcode, являющаяся мощным инструментом на базе движка Zint, предоставляет широкие возможности, но настройка отображения текста в ней имеет свои нюансы.
Рассмотрим подробно, как решить задачу отключения текста, проанализируем возможные ошибки и изучим альтернативные способы реализации печати штрихкодов.
Проанализируем архитектуру компоненты OcvitaBarcode. Она базируется на открытой библиотеке Zint, где за отображение текста отвечает параметр show_hrt (Human Readable Text). В ранних версиях компоненты это свойство могло отсутствовать или не быть выведено в COM-интерфейс, что приводило к ошибке Поле агрегатного объекта не обнаружено (text) или аналогичным при попытке прямого обращения.
Если вы используете актуальную версию библиотеки (или модифицированную сообществом), для отключения подписи под штрихкодом необходимо использовать свойство show_hrt. Разберем программный код настройки объекта:
Процедура УстановитьПараметрыШК(ОбъектШК, ЗначениеКода)
// Указываем сам код
ОбъектШК.barcode = СокрЛП(ЗначениеКода);
// Выбираем тип штрихкода (например, Code-128)
ОбъектШК.symbology = 20;
// Ключевая настройка: отключаем текст под ШК
// 1 - включено, 0 - выключено
Попытка
ОбъектШК.show_hrt = 0;
Исключение
Сообщить("Данная версия компоненты не поддерживает управление текстом!", "!");
КонецПопытки;
КонецПроцедуры
Важный нюанс: если при выполнении этого кода система выдает ошибку, значит, ваша версия .ocx файла устарела. В этом случае рекомендуется либо обновить компоненту до версии, поддерживающей show_hrt, либо воспользоваться альтернативными методами, описанными ниже.
Многие разработчики 1С 7.7 предпочитают минимизировать количество используемых внешних библиотек. Если в вашей конфигурации уже используется FormEx (что является стандартом для расширения возможностей «семерки»), целесообразно перевести печать штрихкодов на её механизмы. Это позволит избавиться от «зоопарка» компонент и обеспечит более стабильную работу.
Рассмотрим, как реализовать печать штрихкода без текста с помощью FormEx. Для этого используется объект Сервис и метод НарисоватьШтрихкод. Посмотрим на пример реализации:
// Создаем объект Сервис из FormEx
Сервис = СоздатьОбъект("Сервис");
Процедура ВывестиШКВТаблицу(Таб, ЗначениеШК)
// Параметры метода НарисоватьШтрихкод:
// 1. Объект (картинка в таблице)
// 2. Тип штрихкода (20 = Code-128)
// 3. Значение штрихкода
// 4. Флаг отображения текста (0 = скрыть, 1 = показать)
// В макете должна быть секция с объектом типа "Рисунок" (например, с именем "ШК")
Таб.ВывестиСекцию("СтрокаШК");
РисунокШК = Таб.ТекущийОбъект; // Получаем ссылку на только что выведенный рисунок
Сервис.НарисоватьШтрихкод(РисунокШК, 20, СокрЛП(ЗначениеШК), 0);
КонецПроцедуры
Преимущество этого метода в том, что FormEx корректно обрабатывает параметр отсутствия текста и динамически генерирует изображение штрихкода непосредственно в объекте «Рисунок» макета таблицы.
Выясним интересную особенность движка Zint, на котором построена OcvitaBarcode. Для двумерных штрихкодов (2D) вывод текста под кодом не предусмотрен стандартами в том виде, в котором это реализовано для линейных кодов. Если ваша задача позволяет сменить тип кодирования, это может стать самым простым решением.
Проанализируем пример печати DataMatrix или PDF417, которые часто используются для маркировки и акцизных марок:
Процедура Печать2D(Объект)
Объект.barcode = ТекстМарки;
Если ДлинаМарки > 68 Тогда
// Тип ШК DataMatrix
Объект.symbology = 71;
Иначе
// Тип ШК PDF417
Объект.symbology = 55;
КонецЕсли;
// Для этих типов show_hrt игнорируется, текст не печатается по умолчанию
КонецПроцедуры
Если вы переключитесь на QR-код (symbology = 58), текст также исчезнет автоматически. Однако помните, что для считывания таких кодов у пользователя должен быть 2D-сканер (имиджер).
Для достижения идеального результата при печати без текста, стоит обратить внимание на сопутствующие свойства компоненты, которые помогают управлять геометрией кода:
Объект.scale = 2;.option_1 можно задать количество столбцов, а через option_2 — уровень коррекции ошибок.Поскольку OcvitaBarcode является ActiveX объектом (файл с расширением .ocx), она требует регистрации в операционной системе. Разберем по шагам, как это сделать правильно, особенно в современных версиях Windows (10 или 11):
OcvitaBarcode.ocx в системную папку (например, C:\Windows\SysWOW64 для 64-битных систем).regsvr32 C:\Windows\SysWOW64\OcvitaBarcode.ocx.СоздатьОбъект("OcvitaBarcode.Barcode").Если вы не хотите регистрировать компоненту в системе (например, из-за ограничений прав пользователей), рассмотрите вариант использования zint.exe (консольной версии). В этом случае вы сможете генерировать картинку штрихкода через КомандаСистемы() с ключом --notext, сохранять её во временный файл и подгружать в таблицу 1С методом ЗагрузитьКартинку(). Это более трудоемкий, но максимально «чистый» с точки зрения установки способ.