При переводе рабочих мест и сервера на 64-разрядную версию платформы «1С:Предприятие» разработчики и администраторы часто сталкиваются с критической ошибкой: перестают формироваться штрихкоды во внешних и типовых печатных формах. Выясним причину этой проблемы и подробно разберем все способы её решения — от срочных временных мер до правильного перевода конфигурации на современные технологии.
Причина сбоя: библиотека 1cbarcod.dll представляет собой устаревший 32-разрядный (x86) COM/ActiveX-компонент. Процесс 64-битного клиента «1С:Предприятия» (1cv8.exe) физически не может загрузить 32-битную динамическую библиотеку напрямую в собственное адресное пространство памяти. В результате при попытке создания COM-объекта через команду Новый COMОбъект("1C.Barcode") система выдает ошибку инициализации или создания объекта.
Если в системе используется множество внешних печатных форм и нет возможности оперативно переписать код печати штрихкодов, настроим запуск 32-битной библиотеки через суррогатный процесс операционной системы (dllhost.exe). В этом случае 64-битная 1С будет обращаться к 32-битной DLL через межпроцессное взаимодействие DCOM, а программный код печатных форм останется без изменений.
Разберем по шагам настройку службы компонентов Windows на рабочем месте:
1cbarcod.dll в системе с помощью 32-битной версии утилиты регистрации. Для этого запустим командную строку от имени администратора и выполним команду: C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКФайлу\1cbarcod.dll".Win + R, введем dcomcnfg или comexp.msc и откроем оснастку «Службы компонентов».1CBarcodeSurrogate, и выберем режим активации: «Серверное приложение» (Server application).1C.Barcode (или 1C:Печать штрихкодов).После выполнения этих шагов вызовы Новый COMОбъект("1C.Barcode") из 64-битного клиента будут успешно обрабатываться через суррогатный процесс Windows.
Проанализируем архитектуру клиент-серверного взаимодействия: 64-разрядный сервер «1С:Предприятия» (ragent.exe, rphost.exe) прекрасно работает с 32-разрядными клиентами. Если требуется немедленно восстановить работоспособность пользователей, установим на клиентские компьютеры 32-битную версию платформы «1С:Предприятие» той же версии сборки, что и сервер.
В этом случае клиентские сеансы продолжат полноценно использовать 32-битную библиотеку 1cbarcod.dll напрямую без дополнительных настроек COM+, а серверная часть останется 64-битной и сохранит все преимущества высокой производительности.
Рассмотренные выше методы являются временными или компромиссными. Правильное и современное решение — отказаться от устаревшей COM-библиотеки в пользу кроссплатформенной компоненты «1С:Печать штрихкодов» (Native API), которая входит в состав Библиотеки стандартных подсистем (БСП) и типовых конфигураций (например, «1С:Управление торговлей 11», «1С:ERP», «1С:Комплексная автоматизация»).
Преимущества технологии Native API:
regsvr32 на клиентских ПК.Посмотрим на пример программного подключения и генерации изображения штрихкода с помощью компоненты Native API:
// Подключение компоненты из общего макета конфигурации
Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "ШтрихкодNative", ТипВнешнейКомпоненты.Native);
Если Подключено Тогда
ОбъектШтрихкода = Новый("AddIn.ШтрихкодNative.Barcode");
// Задание параметров штрихкода
ОбъектШтрихкода.ТипКода = 4; // Например, Code 128
ОбъектШтрихкода.Текст = "4601234567890";
ОбъектШтрихкода.ОтображатьТекст = Истина;
ОбъектШтрихкода.АвтоМасштаб = Истина;
// Получение двоичных данных картинки штрихкода
ДвоичныеДанныеКартинки = ОбъектШтрихкода.СформироватьШтрихкод();
// Вывод картинки в область табличного документа
КартинкаШтрихкода = Новый Картинка(ДвоичныеДанныеКартинки);
РисунокТаблицы = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
РисунокТаблицы.Картинка = КартинкаШтрихкода;
КонецЕсли;
Если в конфигурации уже внедрена БСП, воспользуемся готовыми сервисными процедурами и функциями общего модуля ГенерацияШтрихкодаСервер или модуля штрихкодирования, как это сделано в типовой обработке печати этикеток и ценников.
Рассмотрим еще одну удобную альтернативу, полностью исключающую зависимость от внешних библиотек и битности платформы, — использование специализированных штрихкодовых шрифтов формата TrueType (например, для кодировок Code 128, EAN-13, Code 39):
Такой подход гарантирует одинаковое и быстрое формирование печатных форм на любых версиях платформы 1С независимо от разрядности клиента и сервера.