Как в 1С 7.7 отключить печать текста под штрихкодом при использовании OcvitaBarcode

Программист 1С v7.7 IT и автоматизация бизнеса
← На главную

При разработке печатных форм в среде 1С:Предприятие 7.7 часто возникает необходимость вывода штрихкода без сопровождающего его текста (Human Readable Text). Это актуально при формировании компактных этикеток, бейджей сотрудников или при печати акцизных марок. Компонента OcvitaBarcode, являющаяся мощным инструментом на базе движка Zint, предоставляет широкие возможности, но настройка отображения текста в ней имеет свои нюансы.

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

Метод 1: Использование свойства show_hrt в OcvitaBarcode

Проанализируем архитектуру компоненты OcvitaBarcode. Она базируется на открытой библиотеке Zint, где за отображение текста отвечает параметр show_hrt (Human Readable Text). В ранних версиях компоненты это свойство могло отсутствовать или не быть выведено в COM-интерфейс, что приводило к ошибке Поле агрегатного объекта не обнаружено (text) или аналогичным при попытке прямого обращения.

Если вы используете актуальную версию библиотеки (или модифицированную сообществом), для отключения подписи под штрихкодом необходимо использовать свойство show_hrt. Разберем программный код настройки объекта:


Процедура УстановитьПараметрыШК(ОбъектШК, ЗначениеКода)
    // Указываем сам код
    ОбъектШК.barcode = СокрЛП(ЗначениеКода);
    
    // Выбираем тип штрихкода (например, Code-128)
    ОбъектШК.symbology = 20; 
    
    // Ключевая настройка: отключаем текст под ШК
    // 1 - включено, 0 - выключено
    Попытка
        ОбъектШК.show_hrt = 0;
    Исключение
        Сообщить("Данная версия компоненты не поддерживает управление текстом!", "!");
    КонецПопытки;
КонецПроцедуры

Важный нюанс: если при выполнении этого кода система выдает ошибку, значит, ваша версия .ocx файла устарела. В этом случае рекомендуется либо обновить компоненту до версии, поддерживающей show_hrt, либо воспользоваться альтернативными методами, описанными ниже.

Метод 2: Альтернатива через внешнюю компоненту FormEx

Многие разработчики 1С 7.7 предпочитают минимизировать количество используемых внешних библиотек. Если в вашей конфигурации уже используется FormEx (что является стандартом для расширения возможностей «семерки»), целесообразно перевести печать штрихкодов на её механизмы. Это позволит избавиться от «зоопарка» компонент и обеспечит более стабильную работу.

Рассмотрим, как реализовать печать штрихкода без текста с помощью FormEx. Для этого используется объект Сервис и метод НарисоватьШтрихкод. Посмотрим на пример реализации:


// Создаем объект Сервис из FormEx
Сервис = СоздатьОбъект("Сервис");

Процедура ВывестиШКВТаблицу(Таб, ЗначениеШК)
    // Параметры метода НарисоватьШтрихкод:
    // 1. Объект (картинка в таблице)
    // 2. Тип штрихкода (20 = Code-128)
    // 3. Значение штрихкода
    // 4. Флаг отображения текста (0 = скрыть, 1 = показать)
    
    // В макете должна быть секция с объектом типа "Рисунок" (например, с именем "ШК")
    Таб.ВывестиСекцию("СтрокаШК");
    РисунокШК = Таб.ТекущийОбъект; // Получаем ссылку на только что выведенный рисунок
    
    Сервис.НарисоватьШтрихкод(РисунокШК, 20, СокрЛП(ЗначениеШК), 0);
КонецПроцедуры

Преимущество этого метода в том, что FormEx корректно обрабатывает параметр отсутствия текста и динамически генерирует изображение штрихкода непосредственно в объекте «Рисунок» макета таблицы.

Метод 3: Особенности 2D-штрихкодов (QR, DataMatrix, PDF417)

Выясним интересную особенность движка Zint, на котором построена OcvitaBarcode. Для двумерных штрихкодов (2D) вывод текста под кодом не предусмотрен стандартами в том виде, в котором это реализовано для линейных кодов. Если ваша задача позволяет сменить тип кодирования, это может стать самым простым решением.

Проанализируем пример печати DataMatrix или PDF417, которые часто используются для маркировки и акцизных марок:


Процедура Печать2D(Объект)
    Объект.barcode = ТекстМарки;
    
    Если ДлинаМарки > 68 Тогда
        // Тип ШК DataMatrix
        Объект.symbology = 71; 
    Иначе
        // Тип ШК PDF417
        Объект.symbology = 55; 
    КонецЕсли;
    
    // Для этих типов show_hrt игнорируется, текст не печатается по умолчанию
КонецПроцедуры

Если вы переключитесь на QR-код (symbology = 58), текст также исчезнет автоматически. Однако помните, что для считывания таких кодов у пользователя должен быть 2D-сканер (имиджер).

Дополнительные настройки OcvitaBarcode

Для достижения идеального результата при печати без текста, стоит обратить внимание на сопутствующие свойства компоненты, которые помогают управлять геометрией кода:

  1. Масштабирование (scale): Позволяет пропорционально изменять размер штрихов. Это гораздо лучше, чем просто растягивать картинку в 1С. Например: Объект.scale = 2;.
  2. Угол поворота (rotate): Если штрихкод нужно разместить вертикально. Принимает значения 0, 90, 180, 270.
  3. Свойства Option (option_1, option_2): Используются для специфических настроек. Например, в PDF417 через option_1 можно задать количество столбцов, а через option_2 — уровень коррекции ошибок.
  4. Тихие зоны (whitespace_width): Если после отключения текста штрихкод перестал читаться, попробуйте увеличить пустые поля по бокам, чтобы сканер мог четко определить границы кода.

Технические нюансы регистрации компоненты

Поскольку OcvitaBarcode является ActiveX объектом (файл с расширением .ocx), она требует регистрации в операционной системе. Разберем по шагам, как это сделать правильно, особенно в современных версиях Windows (10 или 11):

  1. Скопируйте файл OcvitaBarcode.ocx в системную папку (например, C:\Windows\SysWOW64 для 64-битных систем).
  2. Запустите командную строку от имени администратора.
  3. Выполните команду регистрации: regsvr32 C:\Windows\SysWOW64\OcvitaBarcode.ocx.
  4. В 1С 7.7 создавайте объект через СоздатьОбъект("OcvitaBarcode.Barcode").

Если вы не хотите регистрировать компоненту в системе (например, из-за ограничений прав пользователей), рассмотрите вариант использования zint.exe (консольной версии). В этом случае вы сможете генерировать картинку штрихкода через КомандаСистемы() с ключом --notext, сохранять её во временный файл и подгружать в таблицу 1С методом ЗагрузитьКартинку(). Это более трудоемкий, но максимально «чистый» с точки зрения установки способ.

← На главную