При автоматизации складской логистики или производственных процессов часто возникает необходимость прямой печати этикеток на принтерах Zebra. Для этого используется специализированная внешняя компонента FlowExt1C. Однако при попытке программного создания объекта в коде 1С разработчики нередко сталкиваются с ошибкой: «Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Недопустимая строка с указанием класса». В этой статье мы подробно разберем, как локализовать проблему, правильно зарегистрировать библиотеку и обеспечить стабильную работу печати.
Прежде всего, разберем ситуацию. Ошибка с кодом 0x800401F3 однозначно указывает на то, что операционная система Windows не может найти запись в реестре для указанного программного идентификатора (ProgID) — в нашем случае это FlowExt1C.Printer. Проблема возникает в строке кода:
// Попытка создания объекта для управления принтером
Принтер = Новый COMОбъект("FlowExt1C.Printer");
Рассмотрим подробнее основные причины, почему система может «потерять» этот класс даже после его регистрации:
regsvr32.FlowExt1C.dll.Выясним, где взять нужный файл, если на новом компьютере его нет. Поскольку FlowExt1C не является типовым компонентом поставки 1С, она обычно распространяется вместе с отраслевыми решениями (WMS или системы управления производством). Проанализируем файловую систему того компьютера, где печать работает корректно. Ищите файл FlowExt1C.dll в следующих местах:
bin).System32 или SysWOW64).Скопируйте найденный файл на новый компьютер, предпочтительно в отдельную папку, к которой у пользователя 1С есть права на чтение (например, C:\1C_Components\).
Посмотрим на процесс регистрации. Важно помнить, что в 64-битных версиях Windows существует две версии утилиты regsvr32.exe. Разберем по шагам, как выполнить регистрацию правильно:
SysWOW64:
C:\Windows\SysWOW64\regsvr32.exe "C:\1C_Components\FlowExt1C.dll"
C:\Windows\System32\regsvr32.exe "C:\1C_Components\FlowExt1C.dll"
После успешной регистрации вы должны увидеть сообщение «DllRegisterServer в ... успешно завершено».
Проанализируем ситуацию, когда 1С работает в 64-битном режиме, а компонента FlowExt1C существует только в 32-битном исполнении. В этом случае прямая регистрация не поможет — вы всё равно будете получать ошибку «Недопустимая строка с указанием класса». Нам потребуется создать «суррогатный» процесс. Рассмотрим подробнее, как это сделать:
FlowExt1C_Bridge) и выберите тип «Серверное приложение».FlowExt1C.dll.Этот метод позволяет 64-битному процессу 1С обращаться к 32-битной DLL через системный мост Windows.
Выясним причину, почему даже при работающей компоненте печать может не идти на сетевой принтер. В коде 1С при работе с FlowExt1C.Printer обычно требуется указать имя принтера. Если принтер сетевой, возможны нюансы:
Вариант А: Использование системного имени. Проверьте, как принтер установлен в Windows. Если он подключен как \\Server\Zebra, именно это имя нужно передавать в параметры объекта. Рассмотрим пример:
Попытка
ПринтерОбъект = Новый COMОбъект("FlowExt1C.Printer");
// Указываем сетевой путь к принтеру
ПринтерОбъект.PrinterName = "\\192.168.1.50\Zebra_GK420";
// Отправка команды на языке ZPL
ПринтерОбъект.SendToPrinter("^XA^FO50,50^A0N,50,50^FDTest Print^FS^XZ");
Исключение
Сообщить("Ошибка печати: " + ОписаниеОшибки());
КонецПопытки;
Вариант Б: Запуск на сервере. Если код выполняется на стороне сервера 1С (в серверном модуле), помните, что серверная служба ragent работает от имени технического пользователя (например, USR1CV8). У этого пользователя в сессии не установлены ваши сетевые принтеры. В этом случае принтер нужно устанавливать локально на сервере через TCP/IP порт или использовать прямую отправку RAW-данных по IP-адресу, если компонента это поддерживает.
Подведем итог: работа с компонентой FlowExt1C требует внимательного отношения к системному окружению. Основным решением проблемы «Недопустимая строка с указанием класса» является совмещение разрядности клиента 1С и DLL-библиотеки, а также использование консоли «Службы компонентов» для создания COM-обертки в сложных случаях. Проанализировав эти шаги, вы сможете настроить стабильную печать этикеток на любом рабочем месте.