При переходе с 32-битной на 64-битную версию платформы «1С:Предприятие» многие разработчики сталкиваются с серьезной технической преградой: привычные инструменты для генерации штрихкодов, такие как ActiveX "Ocvita Barcode", перестают функционировать. Пользователи получают ошибку «объект не найден», хотя в 32-битном клиенте всё работает корректно. В этой статье мы подробно проанализируем причины этой проблемы и разберем по шагам, как перевести печатные формы на современные технологии, совместимые с x64.
Разберем ситуацию с точки зрения архитектуры операционной системы. Компонента Ocvita представляет собой библиотеку ActiveX (COM), разработанную исключительно под 32-битную архитектуру. 64-битный процесс «1С» (1cv8.exe) физически не может загрузить в свое адресное пространство 32-битную DLL. Это фундаментальное ограничение Windows. Поскольку разработчик Ocvita прекратил поддержку продукта, 64-битной версии компоненты не существует. Следовательно, единственный путь — это смена технологического стека.
Наиболее стабильным и правильным решением является использование стандартной компоненты из состава БПО (Библиотеки подключаемого оборудования). В отличие от старых решений, современная компонента 1С построена по технологии Native API. Это дает нам несколько преимуществ:
regsvr32. Компонента загружается динамически из макета конфигурации.Рассмотрим, как правильно подключить такую компоненту программно. Проанализируем пример кода для загрузки нативной библиотеки из общего макета:
// Установим имя макета, где хранится бинарный файл компоненты
ИмяМакета = "ОбщийМакет.КомпонентаПечатиШтрихкодов";
ПутьККомпоненте = "";
// Пытаемся подключить компоненту
РезультатПодключения = ПодключитьВнешнююКомпоненту(ИмяМакета, "Barcode", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
// Создаем объект для генерации изображения
ОбъектШтрихкода = Новый("AddIn.Barcode.Barcode");
Иначе
Сообщить("Не удалось загрузить компоненту печати штрихкодов!");
КонецЕсли;
Особенность конфигурации «Управление торговлей 10.3» заключается в использовании обычных форм и «толстого клиента». В старых макетах Ocvita вставлялась как «Объект» непосредственно в таблицу. Для x64 клиента этот метод не подходит. Мы должны изменить логику формирования печатной формы: вместо использования ActiveX-объекта в макете, мы будем выводить обычную картинку (Рисунок), содержимое которой формируется программно.
Разберем алгоритм действий по шагам:
Ocvita.Рисунок (тип «Картинка»). Назовите его, например, РисунокШтрихкод.Рассмотрим пример кода, который формирует QR-код и помещает его в область макета:
// Настройка параметров штрихкода
ОбъектШтрихкода.ТипКода = 16; // 16 соответствует QR-коду
ОбъектШтрихкода.Текст = "https://example.com/check/12345";
ОбъектШтрихкода.Ширина = 300;
ОбъектШтрихкода.Высота = 300;
// Получаем картинку из компоненты
ДанныеКартинки = ОбъектШтрихкода.ПолучитьШтрихкод();
// Выводим в макет
ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
Рисунок = ОбластьМакета.Рисунки.РисунокШтрихкод;
Рисунок.Картинка = Новый Картинка(ДанныеКартинки);
ТабДок.Вывести(ОбластьМакета);
Если вы хотите полностью избежать зависимости от внешних библиотек (даже нативных), можно рассмотреть вариант генерации QR-кода через HTML и JavaScript. Этот метод абсолютно универсален для любой битности платформы. Мы создаем невидимое поле HTML-документа, передаем туда данные, а JS-библиотека рисует код. Затем мы можем «сфотографировать» результат или передать его как Base64 обратно в 1С. Однако этот метод сложнее в реализации для «толстого клиента» и требует аккуратной работы с объектом ПолеHTMLДокумента.
Важно помнить, что старая компонента Ocvita плохо справлялась с требованиями национальной системы маркировки (DataMatrix). При переходе на 64-битный клиент и нативную компоненту 1С вы автоматически решаете проблему печати кодов для «Честного Знака». Новая компонента корректно обрабатывает спецсимволы GS1, что критично для сканеров на кассах и складах.
Важный момент: если вы используете терминальный сервер (RDP), убедитесь, что компонента устанавливается в профиль пользователя. Нативная компонента не требует прав администратора для работы, так как она распаковывается в локальную папку временных файлов пользователя 1С.
Мы выяснили, что работа ActiveX Ocvita в x64 невозможна из-за архитектурных различий. Для успешной миграции рекомендуем следующий план:
Ocvita Barcode и старых версий 1CBarCode.ocx.Использование технологии Native API гарантирует, что ваша конфигурация будет стабильно работать на любых современных серверах и рабочих станциях, независимо от выбранной разрядности клиента 1С.