При переходе на 64-разрядную версию клиента «1С:Предприятия» разработчики и системные администраторы часто сталкиваются с неприятной ошибкой: перестает работать привычная компонента печати штрихкодов. На экране появляется сообщение о том, что компонента не установлена, хотя локально на компьютере или терминальном сервере всё зарегистрировано корректно. Выясним причину этой проблемы и разберем по шагам наиболее эффективные способы ее решения.
Прежде всего проанализируем техническую суть проблемы. Устаревшая компонента «1С:Печать штрихкодов» версии 8.0.16.4 (и более ранних версий) построена на базе технологии ActiveX (COM-объект V8.Barcod.1). Это исключительно 32-битная динамическая библиотека (DLL).
В операционных системах Windows архитектура процессов устроена так, что 64-разрядное приложение (в нашем случае — 64-битный клиент 1С) физически не может загрузить в свое адресное пространство 32-разрядную библиотеку. Платформа 1С делает попытку вызвать COM-объект, операционная система блокирует этот вызов, и в результате процесс печати прерывается с ошибкой.
Рассмотрим также вопрос о необходимости установки компоненты на сервере 1С. Нужно ли её туда ставить? Всё зависит от того, где именно формируется печатная форма:
Для решения этой проблемы мы можем использовать два основных подхода: современный перевод конфигурации на Native API компоненту или быструю установку 32-разрядного клиента 1С. Рассмотрим их подробно.
Фирма 1С давно отказалась от поддержки ActiveX-технологий в пользу кроссплатформенной технологии Native API. Современная компонента печати штрихкодов поставляется в составе Библиотеки стандартных подсистем (БСП) или Библиотеки подключаемого оборудования (БПО). Она отлично работает на 32- и 64-битных клиентах, на сервере под Windows и Linux.
Выясним, как уйти от OLE-объекта в макете и переписать код под Native API:
КомпонентаПечатиШтрихкодов. Сохраните этот макет как двоичные данные (в формате ZIP-архива) на свой диск.КомпонентаПечатиШтрихкодов и загрузите туда сохраненный ранее ZIP-архив.ИмяРисункаШтрихкода.Посмотрим на пример программной реализации подключения компоненты и генерации штрихкода:
// Подключаем внешнюю компоненту из общего макета
Если ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "Barcode", ТипВнешнейКомпоненты.Native) Тогда
// Создаем объект компоненты
ГенераторШтрихкода = Новый("AddIn.Barcode.Barcode");
// Устанавливаем параметры штрихкода
ГенераторШтрихкода.ТипКода = 1; // 1 — это EAN13, параметры типов смотрите в документации к БСП
ГенераторШтрихкода.Сообщение = "4601234567890"; // Наш штрихкод
ГенераторШтрихкода.Ширина = 300;
ГенераторШтрихкода.Высота = 100;
// Получаем картинку в формате двоичных данных
КартинкаДвоичныеДанные = ГенераторШтрихкода.ПолучитьШтрихкодУнарный();
Если КартинкаДвоичныеДанные <> Неопределено Тогда
// Помещаем картинку в рисунок табличного документа
НоваяКартинка = Новый Картинка(КартинкаДвоичныеДанные);
ОбластьМакета = Макет.ПолучитьОбласть("Строка");
ОбластьМакета.Рисунки.ИмяРисункаШтрихкода.Картинка = НоваяКартинка;
КонецЕсли;
Иначе
ВызватьИсключение "Не удалось подключить компоненту генерации штрихкодов!";
КонецЕсли;
Преимущество этого метода очевидно: вы раз и навсегда избавляетесь от привязки к разрядности платформы, операционной системе и необходимости регистрировать библиотеки в реестре Windows через regsvr32.
Если конфигурация сильно кастомизирована, находится на поддержке или у вас нет времени прямо сейчас переписывать программный код формирования макетов, можно применить административное решение.
Для этого выполним следующие действия:
8.3.14.1694). Наличие x64 сервера 1С этому никак не мешает.После этого база у данного пользователя будет гарантированно открываться в 32-битном режиме, и старый ActiveX-объект продолжит функционировать без каких-либо доработок конфигурации.
Существует еще один изящный способ вывода одномерных штрихкодов, который вообще не требует использования внешних библиотек (ни ActiveX, ни Native API). Это использование специализированных шрифтов.
Проанализируем этот метод по шагам:
"*123456*", чтобы сканер мог определить начало и конец кода.Этот способ крайне производителен, но требует обязательной установки шрифта на каждом рабочем месте, где будет происходить печать или просмотр документов.
Для быстрого исправления «здесь и сейчас» используйте принудительный запуск базы через 32-разрядный клиент 1С. В долгосрочной перспективе обязательно запланируйте перевод печатных форм на кроссплатформенную Native API компоненту из состава БСП — это гарантирует стабильную работу вашей системы при любых обновлениях ИТ-инфраструктуры.