Как обеспечить работу штрихкодов и QR-кодов в 64-битном клиенте 1С (замена Ocvita Barcode)

Программист 1С v8.3 (Обычные формы) 1С:Управление торговлей Торговля и дистрибуция
← На главную

При переходе с 32-битной на 64-битную версию платформы «1С:Предприятие» многие разработчики сталкиваются с серьезной технической преградой: привычные инструменты для генерации штрихкодов, такие как ActiveX "Ocvita Barcode", перестают функционировать. Пользователи получают ошибку «объект не найден», хотя в 32-битном клиенте всё работает корректно. В этой статье мы подробно проанализируем причины этой проблемы и разберем по шагам, как перевести печатные формы на современные технологии, совместимые с x64.

Выясним причину: почему Ocvita Barcode не работает в x64

Разберем ситуацию с точки зрения архитектуры операционной системы. Компонента Ocvita представляет собой библиотеку ActiveX (COM), разработанную исключительно под 32-битную архитектуру. 64-битный процесс «1С» (1cv8.exe) физически не может загрузить в свое адресное пространство 32-битную DLL. Это фундаментальное ограничение Windows. Поскольку разработчик Ocvita прекратил поддержку продукта, 64-битной версии компоненты не существует. Следовательно, единственный путь — это смена технологического стека.

Решение 1: Переход на нативную компоненту «1С:Печать штрихкодов»

Наиболее стабильным и правильным решением является использование стандартной компоненты из состава БПО (Библиотеки подключаемого оборудования). В отличие от старых решений, современная компонента 1С построена по технологии Native API. Это дает нам несколько преимуществ:

  1. Кроссплатформенность: Она работает и в 32-битных, и в 64-битных клиентах под Windows и Linux.
  2. Отсутствие регистрации: Больше не нужно использовать regsvr32. Компонента загружается динамически из макета конфигурации.
  3. Поддержка современных форматов: Полноценная работа с QR-кодами, DataMatrix (для маркировки «Честный Знак») и другими типами штрихкодов.

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


// Установим имя макета, где хранится бинарный файл компоненты
ИмяМакета = "ОбщийМакет.КомпонентаПечатиШтрихкодов";
ПутьККомпоненте = "";

// Пытаемся подключить компоненту
РезультатПодключения = ПодключитьВнешнююКомпоненту(ИмяМакета, "Barcode", ТипВнешнейКомпоненты.Native);

Если РезультатПодключения Тогда
    // Создаем объект для генерации изображения
    ОбъектШтрихкода = Новый("AddIn.Barcode.Barcode");
Иначе
    Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
КонецЕсли;

Решение 2: Адаптация печатных форм в «1С:Управление торговлей 10.3»

Особенность конфигурации «Управление торговлей 10.3» заключается в использовании обычных форм и «толстого клиента». В старых макетах Ocvita вставлялась как «Объект» непосредственно в таблицу. Для x64 клиента этот метод не подходит. Мы должны изменить логику формирования печатной формы: вместо использования ActiveX-объекта в макете, мы будем выводить обычную картинку (Рисунок), содержимое которой формируется программно.

Разберем алгоритм действий по шагам:

  1. Откройте макет печатной формы.
  2. Удалите старый объект Ocvita.
  3. Вставьте на это место Рисунок (тип «Картинка»). Назовите его, например, РисунокШтрихкод.
  4. В модуле формирования печатной формы используйте нативную компоненту для генерации изображения.

Рассмотрим пример кода, который формирует QR-код и помещает его в область макета:


// Настройка параметров штрихкода
ОбъектШтрихкода.ТипКода = 16; // 16 соответствует QR-коду
ОбъектШтрихкода.Текст = "https://example.com/check/12345";
ОбъектШтрихкода.Ширина = 300;
ОбъектШтрихкода.Высота = 300;

// Получаем картинку из компоненты
ДанныеКартинки = ОбъектШтрихкода.ПолучитьШтрихкод();

// Выводим в макет
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
Рисунок = ОбластьМакета.Рисунки.РисунокШтрихкод;
Рисунок.Картинка = Новый Картинка(ДанныеКартинки);
ТабДок.Вывести(ОбластьМакета);

Альтернативный метод: Использование HTML-поля (без компонент)

Если вы хотите полностью избежать зависимости от внешних библиотек (даже нативных), можно рассмотреть вариант генерации QR-кода через HTML и JavaScript. Этот метод абсолютно универсален для любой битности платформы. Мы создаем невидимое поле HTML-документа, передаем туда данные, а JS-библиотека рисует код. Затем мы можем «сфотографировать» результат или передать его как Base64 обратно в 1С. Однако этот метод сложнее в реализации для «толстого клиента» и требует аккуратной работы с объектом ПолеHTMLДокумента.

Проанализируем ситуацию с маркировкой

Важно помнить, что старая компонента Ocvita плохо справлялась с требованиями национальной системы маркировки (DataMatrix). При переходе на 64-битный клиент и нативную компоненту 1С вы автоматически решаете проблему печати кодов для «Честного Знака». Новая компонента корректно обрабатывает спецсимволы GS1, что критично для сканеров на кассах и складах.

Важный момент: если вы используете терминальный сервер (RDP), убедитесь, что компонента устанавливается в профиль пользователя. Нативная компонента не требует прав администратора для работы, так как она распаковывается в локальную папку временных файлов пользователя 1С.

Итоги и рекомендации

Мы выяснили, что работа ActiveX Ocvita в x64 невозможна из-за архитектурных различий. Для успешной миграции рекомендуем следующий план:

Использование технологии Native API гарантирует, что ваша конфигурация будет стабильно работать на любых современных серверах и рабочих станциях, независимо от выбранной разрядности клиента 1С.

← На главную