При переходе на 64-разрядную версию платформы 1С:Предприятие 8.3 многие разработчики и администраторы сталкиваются с проблемой: привычные механизмы формирования и печати штрихкодов перестают работать. Попробуем разобраться, с чем связано это ограничение и какими способами можно организовать вывод штрихкодов в обычных формах и самописных конфигурациях.
Классическая компонента 1С:Печать штрихкодов по своей архитектуре представляет собой 32-разрядный ActiveX/COM-объект. Процесс 1С x64 (как сервер, так и 64-битный тонкий или толстый клиент) физически не способен напрямую загрузить 32-разрядную DLL-библиотеку в свое адресное пространство.
Ручная регистрация файла внешней библиотеки в операционной системе через утилиту regsvr32 делает объект видимым исключительно для 32-битного окружения. В результате 64-битный процесс 1С выдает ошибку о том, что объект не найден или компонента не установлена.
Наиболее современный и стабильный вариант для 64-разрядных систем — переход на Native API компоненту печати штрихкодов, входящую в состав конфигурации «Бриблиотека подключаемого оборудования» (БПО).
Несмотря на то, что актуальные релизы БПО ориентированы на управляемые формы, сама кроссплатформенная библиотека поставляется в виде макета. Ее можно извлечь и использовать в конфигурациях на обычных формах (например, в УТ 10.3 или самописных решениях).
Рассмотрим по шагам, как задействовать Native API компоненту:
КомпонентаПечатиШтрихкодов).ДвоичныеДанные.Картинка, который затем помещается в поле табличного документа.Еще один проверенный вариант — использование внешнего бесплатного генератора штрихкодов Zint через командную строку. Этот способ позволяет полностью отказаться от регистраций COM-объектов в Windows.
Схема работы выглядит следующим образом:
ЗапуститьПриложение() или объект КомандаСистемы.Картинка и выводится в макет печатной формы.Если необходимо сохранить старый код обращения к ActiveX-компоненте без переработки логики формирования печатных форм, можно настроить исполнение 32-битной библиотеки в суррогатном процессе Windows dllhost.exe.
Проанализируем порядок настройки:
dcomcnfg в консоли Windows).После этой настройки 64-битный процесс 1С сможет обращаться к 32-битному COM-объекту через межпроцессное взаимодействие (Out-of-process COM).
Если сервер 1С:Предприятия работает в 64-разрядном режиме, а формирование печатных форм происходит на стороне пользователя, достаточно установить на рабочие места 32-разрядный клиент 1С (толстый или тонкий клиент). Сервер x64 отлично работает с 32-битными клиентами, и при формировании печатной формы на клиенте старая ActiveX-компонента будет подключаться без ошибок.
Для простых типов штрихкодов (Code128, EAN-13, Code39) можно применить специализированные TrueType-шрифты (TTF). В этом случае в ячейку табличного документа выводится обычная строка с рассчитанным контрольным символом, а для ячейки задается установленный в систему шрифт штрихкода.
Также возможна генерация графических изображений штрихкода через сторонние или локально развернутые HTTP-сервисы с помощью объектов HTTPСоединение и HTTPЗапрос.
При использовании Native API библиотеки иногда можно заметить нечеткое отображение текста подписи или размытие линий штрихкода. Это происходящий эффект несовпадения растрового разрешения создаваемой картинки и масштаба рисунка в табличном документе.
Для получения четкой печати важно задавать параметры генерации (ширину, высоту и показатель DPI) исходя из физических характеристик принтера, а у свойства рисунка в макете ТабличныйДокумент устанавливать пропорциональный режим отображения РазмерКартинки.