Почему при вызове COM-объекта OpenOffice в 1С возникает ошибка «Класс не зарегистрирован»?

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

Работа с внешними офисными пакетами через технологию COM является классическим, но зачастую проблемным способом интеграции в среде 1С. Рассмотрим, почему при попытке вывести печатную форму в OpenOffice или LibreOffice возникает критическая ошибка Класс не зарегистрирован или Фильтр сообщений выдал диагностику о занятости приложения, и как это исправить.

Разбор причин возникновения ошибки

Основная сложность заключается в несовместимости архитектур 32-битных приложений и 64-битных процессов сервера 1С. Большинство офисных пакетов (OpenOffice/LibreOffice) до сих пор опираются на старые механизмы COM-взаимодействия, которые проектировались для 32-битной среды. Когда 64-битная платформа 1С пытается инициализировать com.sun.star.ServiceManager, операционная система часто блокирует доступ или не находит нужные записи в реестре из-за различий в путях SysWOW64 и System32.

Шаг 1: Проверка регистрации компонентов

Первым делом необходимо убедиться, что используемая библиотека корректно зарегистрирована в системе. Если вы подозреваете, что компонента повреждена или настройки сбились после обновления базы, попробуйте перерегистрировать её вручную через командную строку с правами администратора.

Для 32-битной версии компоненты выполните команду:

regsvr32.exe C:\ПутьКФайлу\componenta.dll

Однако помните, что для x64-систем этот метод может быть осложнен тем, что вы пытаетесь зарегистрировать 32-битную dll в 64-битном окружении. В таких случаях лучше найти путь к файлу компоненты и использовать соответствующий путь к regsvr32, который находится в папке SysWOW64 для 32-битных библиотек.

Шаг 2: Радикальное решение проблемы разрядности

Если манипуляции с реестром и правами доступа не приносят результата, самым надежным методом на текущий момент является приведение всей цепочки взаимодействия к единой разрядности. Практический опыт показывает, что 64-битные версии платформы 1С крайне плохо работают с COM-объектами офисных пакетов.

Рассмотрим пошаговый алгоритм настройки стабильно работающей связки:

  1. Полностью удалите 64-битную версию платформы 1С с сервера. Важно вручную зачистить все следы установки в папках Program Files, ProgramData и AppData.
  2. Установите 32-битную версию платформы 1С. Это позволит избежать проблем с разрядностью при вызове COM-объектов.
  3. Установите 32-битную версию LibreOffice (рекомендуется версия 6.4.7 или актуальная стабильная ветка).
  4. Установите 32-битный SDK для LibreOffice.

После проведения данных манипуляций вызов кода, отвечающего за инициализацию, будет выглядеть следующим образом:


ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager");
Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop");
Scr = Новый COMОбъект("MSScriptControl.ScriptControl");
Scr.Language = "javascript";
Args = Scr.Eval("new Array()");
// Инициализация объекта для работы с документом
OpenOffice = Desktop.LoadComponentFromURL(ПреобразоватьВURL(ИмяВрем), "_blank", 0, Args);

Шаг 3: Настройка прав доступа (DCOM)

Если вы не можете отказаться от использования 64-битной платформы 1С, вам придется настраивать параметры безопасности DCOM. Это сложный процесс, требующий глубокого понимания прав учетных записей:

Заключение и рекомендации

Технология COM-объектов является устаревшей и нестабильной для высоконагруженных серверных систем. Если задача позволяет, мы настоятельно рекомендуем переработать механизм формирования печатных форм, перейдя на использование встроенного в 1С табличного документа SpreadsheetDocument. Это избавит вас от зависимости от стороннего ПО, необходимости установки LibreOffice на сервере кластера и бесконечных проблем с регистрацией классов и правами доступа в реестре Windows. Если же использование OpenOffice критично, старайтесь использовать 32-битные сборки ПО для обеспечения максимальной совместимости.

← На главную