Разберем одну из самых распространенных и неприятных проблем, с которой сталкиваются разработчики и администраторы при настройке печати этикеток и штрихкодов в «1С:Предприятие» — ошибку «Класс не зарегистрирован» при инициализации COM-объекта V8.Barcod.1. Эта проблема обычно возникает в коде при попытке создать объект генерации программно:
КомпонентШК = Новый COMОбъект("V8.Barcod.1");
Чаще всего с этой ситуацией сталкиваются при переносе баз данных на новые компьютеры под управлением 64-битных версий Windows или при обновлении платформы 1С. В этой статье мы подробно проанализируем причины возникновения этой ошибки и рассмотрим по шагам несколько эффективных способов ее решения — от простых административных действий до продвинутых архитектурных изменений.
Прежде чем приступать к исправлению, давайте разберем техническую суть проблемы. Ошибка «Класс не зарегистрирован» в контексте технологии COM/ActiveX практически всегда означает одно: несоответствие разрядности (32-бит и 64-бит) вызывающего приложения и вызываемой библиотеки.
Классический дистрибутив печати штрихкодов от фирмы 1С (например, 1CBarCode_8.0.16.4.exe) содержит в себе библиотеку 1CBarcode.dll. Эта библиотека является строго 32-разрядной (x86). Процессы в операционной системе Windows устроены так, что 64-разрядный процесс физически не может загрузить в свое адресное пространство 32-разрядную динамическую библиотеку (DLL) напрямую через COM-интерфейс.
Таким образом, если на вашем компьютере установлена 64-битная Windows и вы запускаете 64-битный клиент «1С:Предприятие» (или код выполняется на стороне 64-битного сервера 1С), система при попытке инициализировать V8.Barcod.1 обращается к реестру, не находит соответствующего 64-битного класса и выдает ошибку «Класс не зарегистрирован».
Рассмотрим детально четыре практических способа решения этой проблемы.
---
Это самый простой и быстрый способ, не требующий сложных системных настроек. Если база данных работает в файловом режиме или вы используете клиент-серверный вариант, но запуск происходит на стороне пользователя, достаточно установить и использовать 32-битную версию платформы 1С.
Выполним следующие шаги:
Теперь при запуске системы 32-битный процесс 1С сможет без труда инициализировать 32-битную библиотеку 1CBarcode.dll, и печать штрихкодов заработает в штатном режиме.
---
Иногда библиотека оказывается установленной, но операционная система Windows регистрирует ее некорректно, путая ветки реестра для 32-битных и 64-битных приложений. Чтобы принудительно зарегистрировать компоненту в нужном системном окружении, проделаем следующую процедуру:
regsvr32, которая располагается в системной директории SysWOW64. Введем команду (путь к библиотеке укажите актуальный для вашего компьютера):
C:\Windows\SysWOW64\regsvr32.exe "C:\Program Files (x86)\1C\1CBarcode\1CBarcode.dll"
После выполнения команды должно появиться системное сообщение об успешной регистрации библиотеки. Попробуем запустить 1С и проверить печать штрихкодов.
---
Что делать, если вам жизненно необходимо использовать именно 64-битный клиент 1С (например, из-за нехватки оперативной памяти при формировании тяжелых отчетов) или генерация штрихкодов должна происходить на стороне 64-битного сервера 1С? В этом случае нам поможет стандартный механизм Windows — создание COM+-приложения, которое выступит мостом-оберткой между x64-процессом 1С и x86-компонентой.
Рассмотрим этот процесс по шагам:
Win + R, введем команду dcomcnfg и нажмем Enter. Откроется окно «Службы компонентов».1CBarcode_Wrapper) и укажем способ активации: «Серверное приложение» (это заставит библиотеку работать в выделенном системном процессе dllhost.exe).1CBarcode.dll (по умолчанию она лежит в C:\Program Files (x86)\1C\1CBarcode\).V8.Barcod.1, перейдем на вкладку «Безопасность» и снимем галочку «Принудительная проверка доступа для приложений».Благодаря этой настройке 64-битный процесс платформы 1С будет обращаться к COM-объекту через системную прослойку Windows, которая автоматически обеспечит взаимодействие между процессами разной разрядности.
---
Если вы разрабатываете новую конфигурацию или модернизируете старую систему под управлением платформы «1С:Предприятие 8.3», лучшим архитектурным решением будет полный отказ от устаревшей технологии ActiveX (COM) в пользу современных Native-компонент, поставляемых в составе Библиотеки стандартных подсистем (БСП).
Современный механизм печати штрихкодов в БСП устроен следующим образом:
КомпонентПечатиШтрихкодов. Этот макет содержит скомпилированные кроссплатформенные Native-библиотеки для всех популярных операционных систем (Windows, Linux, macOS) и любых разрядностей (x86 и x64).Рассмотрим пример программного кода, который заменяет использование старого COM-объекта на вызов современной встроенной компоненты:
// Подключаем компоненту из макета конфигурации
УстановитьРасширениеВывода() // Для некоторых версий платформы
РезультатПодключения = ПодключитьВнешнююКомпоненту("ОбщийМакет.КомпонентПечатиШтрихкодов", "Barcode", ТипВнешнейКомпоненты.Native);
Если РезультатПодключения Тогда
Компонента = Новый("AddIn.Barcode.Barcode");
// Настраиваем свойства штрихкода напрямую через объект компоненты
Компонента.ТипКода = 1; // Указываем тип, например EAN13
Компонента.Сообщение = "4601234567890"; // Наш штрихкод
Компонента.Ширина = 300;
Компонента.Высота = 120;
// Получаем картинку штрихкода
ДвоичныеДанныеКартинки = Компонента.ПолучитьШтрихкодУвеличено();
КартинкаШК = Новый Картинка(ДвоичныеДанныеКартинки);
// Помещаем картинку в табличный документ
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("МакетПечати");
Область = Макет.ПолучитьОбласть("СтрокаШтрихкода");
Рисунок = Область.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Картинка = КартинкаШК;
Рисунок.ГраницыСверху = 0;
Рисунок.ГраницыСнизу = 0;
ТабДок.Вывести(Область);
КонецЕсли;
Такой подход полностью избавляет систему от зависимости от внешнего окружения операционной системы, повышает общую стабильность работы программы и гарантирует бесперебойную печать штрихкодов на любых компьютерах пользователей, независимо от разрядности их операционной системы и версии Windows.