Как настроить печать штрихкодов на 64-разрядной платформе 1С:Предприятие 8.3?

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

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

Выясним причину проблемы

Классическая компонента 1С:Печать штрихкодов по своей архитектуре представляет собой 32-разрядный ActiveX/COM-объект. Процесс 1С x64 (как сервер, так и 64-битный тонкий или толстый клиент) физически не способен напрямую загрузить 32-разрядную DLL-библиотеку в свое адресное пространство.

Ручная регистрация файла внешней библиотеки в операционной системе через утилиту regsvr32 делает объект видимым исключительно для 32-битного окружения. В результате 64-битный процесс 1С выдает ошибку о том, что объект не найден или компонента не установлена.

Способ 1. Использование Native API компоненты из БПО

Наиболее современный и стабильный вариант для 64-разрядных систем — переход на Native API компоненту печати штрихкодов, входящую в состав конфигурации «Бриблиотека подключаемого оборудования» (БПО).

Несмотря на то, что актуальные релизы БПО ориентированы на управляемые формы, сама кроссплатформенная библиотека поставляется в виде макета. Ее можно извлечь и использовать в конфигурациях на обычных формах (например, в УТ 10.3 или самописных решениях).

Рассмотрим по шагам, как задействовать Native API компоненту:

  1. Откроем актуальную конфигурацию БПО в режиме конфигуратора и найдем общий макет с Native-компонентой печати штрихкодов (КомпонентаПечатиШтрихкодов).
  2. Экспортируем данный макет и перенесем его в свою конфигурацию как новый общий макет с типом ДвоичныеДанные.
  3. В коде формирования печатной формы подключим внешнюю компоненту из двоичных данных и вызовем методы генерации штрихкода. Нативная библиотека возвращает готовый объект Картинка, который затем помещается в поле табличного документа.

Способ 2. Генерация через консольную утилиту Zint

Еще один проверенный вариант — использование внешнего бесплатного генератора штрихкодов Zint через командную строку. Этот способ позволяет полностью отказаться от регистраций COM-объектов в Windows.

Схема работы выглядит следующим образом:

  1. Из кода 1С формируется команда запуска консольного приложения Zint с параметрами (тип штрихкода, кодируемое значение, путь для сохранения итогового файла картинки).
  2. Команда исполняется через метод ЗапуститьПриложение() или объект КомандаСистемы.
  3. Сформированный графический файл считывается объектом Картинка и выводится в макет печатной формы.

Способ 3. Выполнение 32-битного COM-объекта через COM+ (Службы компонентов Windows)

Если необходимо сохранить старый код обращения к ActiveX-компоненте без переработки логики формирования печатных форм, можно настроить исполнение 32-битной библиотеки в суррогатном процессе Windows dllhost.exe.

Проанализируем порядок настройки:

  1. Откроем оснастку «Службы компонентов» (команда dcomcnfg в консоли Windows).
  2. В разделе «Приложения COM+» создадим новое пустое приложение с типом «Серверное приложение».
  3. В созданное приложение добавим 32-разрядный компонент штрихкода.
  4. Укажем учетную запись, от имени которой будет запускаться процесс.

После этой настройки 64-битный процесс 1С сможет обращаться к 32-битному COM-объекту через межпроцессное взаимодействие (Out-of-process COM).

Способ 4. Использование 32-разрядного клиента 1С

Если сервер 1С:Предприятия работает в 64-разрядном режиме, а формирование печатных форм происходит на стороне пользователя, достаточно установить на рабочие места 32-разрядный клиент 1С (толстый или тонкий клиент). Сервер x64 отлично работает с 32-битными клиентами, и при формировании печатной формы на клиенте старая ActiveX-компонента будет подключаться без ошибок.

Способ 5. Специализированные шрифты и HTTP-сервисы

Для простых типов штрихкодов (Code128, EAN-13, Code39) можно применить специализированные TrueType-шрифты (TTF). В этом случае в ячейку табличного документа выводится обычная строка с рассчитанным контрольным символом, а для ячейки задается установленный в систему шрифт штрихкода.

Также возможна генерация графических изображений штрихкода через сторонние или локально развернутые HTTP-сервисы с помощью объектов HTTPСоединение и HTTPЗапрос.

Оптимизация качества изображения и разрешения

При использовании Native API библиотеки иногда можно заметить нечеткое отображение текста подписи или размытие линий штрихкода. Это происходящий эффект несовпадения растрового разрешения создаваемой картинки и масштаба рисунка в табличном документе.

Для получения четкой печати важно задавать параметры генерации (ширину, высоту и показатель DPI) исходя из физических характеристик принтера, а у свойства рисунка в макете ТабличныйДокумент устанавливать пропорциональный режим отображения РазмерКартинки.

← На главную