Как восстановить печать штрихкодов при переходе на 64-битный клиент 1С и отказе 1cbarcod.dll?

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

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

Причина сбоя: библиотека 1cbarcod.dll представляет собой устаревший 32-разрядный (x86) COM/ActiveX-компонент. Процесс 64-битного клиента «1С:Предприятия» (1cv8.exe) физически не может загрузить 32-битную динамическую библиотеку напрямую в собственное адресное пространство памяти. В результате при попытке создания COM-объекта через команду Новый COMОбъект("1C.Barcode") система выдает ошибку инициализации или создания объекта.

Решение 1. Быстрый обход проблемы без изменения программного кода (настройка COM+)

Если в системе используется множество внешних печатных форм и нет возможности оперативно переписать код печати штрихкодов, настроим запуск 32-битной библиотеки через суррогатный процесс операционной системы (dllhost.exe). В этом случае 64-битная 1С будет обращаться к 32-битной DLL через межпроцессное взаимодействие DCOM, а программный код печатных форм останется без изменений.

Разберем по шагам настройку службы компонентов Windows на рабочем месте:

  1. Зарегистрируем библиотеку 1cbarcod.dll в системе с помощью 32-битной версии утилиты регистрации. Для этого запустим командную строку от имени администратора и выполним команду: C:\Windows\SysWOW64\regsvr32.exe "C:\ПутьКФайлу\1cbarcod.dll".
  2. Нажмем комбинацию клавиш Win + R, введем dcomcnfg или comexp.msc и откроем оснастку «Службы компонентов».
  3. Перейдем по дереву: Службы компонентов -> Компьютеры -> Мой компьютер -> Приложения COM+.
  4. Кликнем правой кнопкой мыши по папке «Приложения COM+», выберем Создать -> Приложение. В открывшемся мастере нажмем «Далее» и выберем «Создать новое приложение».
  5. Укажем понятное имя приложения, например 1CBarcodeSurrogate, и выберем режим активации: «Серверное приложение» (Server application).
  6. На шаге выбора учетной записи укажем «Текущий пользователь» (или выберем специальную сервисную учетную запись).
  7. После создания приложения откроем его свойства, перейдем на вкладку «Дополнительно» (Advanced) и установим флаг «Включить 32-разрядный процесс» (32-bit execution mode).
  8. Внутри созданного приложения развернем узел, нажмем правой кнопкой мыши на папку «Компоненты» -> Создать -> Компонент. Выберем вариант «Установка уже зарегистрированных компонентов» и найдем в списке 1C.Barcode (или 1C:Печать штрихкодов).

После выполнения этих шагов вызовы Новый COMОбъект("1C.Barcode") из 64-битного клиента будут успешно обрабатываться через суррогатный процесс Windows.

Решение 2. Экспресс-возврат: использование 32-битного толстого или тонкого клиента

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

В этом случае клиентские сеансы продолжат полноценно использовать 32-битную библиотеку 1cbarcod.dll напрямую без дополнительных настроек COM+, а серверная часть останется 64-битной и сохранит все преимущества высокой производительности.

Решение 3. Правильный переход на нативную компоненту Native API из БСП

Рассмотренные выше методы являются временными или компромиссными. Правильное и современное решение — отказаться от устаревшей COM-библиотеки в пользу кроссплатформенной компоненты «1С:Печать штрихкодов» (Native API), которая входит в состав Библиотеки стандартных подсистем (БСП) и типовых конфигураций (например, «1С:Управление торговлей 11», «1С:ERP», «1С:Комплексная автоматизация»).

Преимущества технологии Native API:

  1. Нативная работа как в 32-битных, так и в 64-битных клиентах и на сервере 1С под управлением Windows и Linux.
  2. Компонента хранится непосредственно в общем макете конфигурации (в виде zip-архива) и не требует прав администратора или вызова regsvr32 на клиентских ПК.
  3. Возможность генерации штрихкода на стороне сервера без передачи тяжелых COM-объектов на клиент.

Посмотрим на пример программного подключения и генерации изображения штрихкода с помощью компоненты Native API:


// Подключение компоненты из общего макета конфигурации
Подключено = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентаПечатиШтрихкодов", "ШтрихкодNative", ТипВнешнейКомпоненты.Native);

Если Подключено Тогда
    ОбъектШтрихкода = Новый("AddIn.ШтрихкодNative.Barcode");
    
    // Задание параметров штрихкода
    ОбъектШтрихкода.ТипКода = 4; // Например, Code 128
    ОбъектШтрихкода.Текст = "4601234567890";
    ОбъектШтрихкода.ОтображатьТекст = Истина;
    ОбъектШтрихкода.АвтоМасштаб = Истина;
    
    // Получение двоичных данных картинки штрихкода
    ДвоичныеДанныеКартинки = ОбъектШтрихкода.СформироватьШтрихкод();
    
    // Вывод картинки в область табличного документа
    КартинкаШтрихкода = Новый Картинка(ДвоичныеДанныеКартинки);
    РисунокТаблицы = ОбластьМакета.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
    РисунокТаблицы.Картинка = КартинкаШтрихкода;
КонецЕсли;

Если в конфигурации уже внедрена БСП, воспользуемся готовыми сервисными процедурами и функциями общего модуля ГенерацияШтрихкодаСервер или модуля штрихкодирования, как это сделано в типовой обработке печати этикеток и ценников.

Решение 4. Формирование штрихкодов через шрифты (TrueType Fonts)

Рассмотрим еще одну удобную альтернативу, полностью исключающую зависимость от внешних библиотек и битности платформы, — использование специализированных штрихкодовых шрифтов формата TrueType (например, для кодировок Code 128, EAN-13, Code 39):

  1. Установим необходимый TTF-шрифт в операционную систему.
  2. В коде печатной формы рассчитаем контрольный символ по стандартному алгоритму кодировки и переведем исходную строку в последовательность символов шрифта.
  3. Для ячейки табличного документа зададим соответствующий шрифт штрихкода и выведем подготовленную текстовую строку.

Такой подход гарантирует одинаковое и быстрое формирование печатных форм на любых версиях платформы 1С независимо от разрядности клиента и сервера.

← На главную