Работа с внешними офисными пакетами через технологию COM является классическим, но зачастую проблемным способом интеграции в среде 1С. Рассмотрим, почему при попытке вывести печатную форму в OpenOffice или LibreOffice возникает критическая ошибка Класс не зарегистрирован или Фильтр сообщений выдал диагностику о занятости приложения, и как это исправить.
Основная сложность заключается в несовместимости архитектур 32-битных приложений и 64-битных процессов сервера 1С. Большинство офисных пакетов (OpenOffice/LibreOffice) до сих пор опираются на старые механизмы COM-взаимодействия, которые проектировались для 32-битной среды. Когда 64-битная платформа 1С пытается инициализировать com.sun.star.ServiceManager, операционная система часто блокирует доступ или не находит нужные записи в реестре из-за различий в путях SysWOW64 и System32.
Первым делом необходимо убедиться, что используемая библиотека корректно зарегистрирована в системе. Если вы подозреваете, что компонента повреждена или настройки сбились после обновления базы, попробуйте перерегистрировать её вручную через командную строку с правами администратора.
Для 32-битной версии компоненты выполните команду:
regsvr32.exe C:\ПутьКФайлу\componenta.dll
Однако помните, что для x64-систем этот метод может быть осложнен тем, что вы пытаетесь зарегистрировать 32-битную dll в 64-битном окружении. В таких случаях лучше найти путь к файлу компоненты и использовать соответствующий путь к regsvr32, который находится в папке SysWOW64 для 32-битных библиотек.
Если манипуляции с реестром и правами доступа не приносят результата, самым надежным методом на текущий момент является приведение всей цепочки взаимодействия к единой разрядности. Практический опыт показывает, что 64-битные версии платформы 1С крайне плохо работают с COM-объектами офисных пакетов.
Рассмотрим пошаговый алгоритм настройки стабильно работающей связки:
Program Files, ProgramData и AppData.После проведения данных манипуляций вызов кода, отвечающего за инициализацию, будет выглядеть следующим образом:
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);
Если вы не можете отказаться от использования 64-битной платформы 1С, вам придется настраивать параметры безопасности DCOM. Это сложный процесс, требующий глубокого понимания прав учетных записей:
dcomcnfg.Настройка DCOM объект soffice или com.sun.star.ServiceManager.Удостоверение установите Интерактивный пользователь или укажите конкретную учетную запись с правами администратора.Безопасность предоставьте права на «Запуск и активацию» пользователю, под которым запущена служба сервера 1С (обычно USR1CV8).Технология COM-объектов является устаревшей и нестабильной для высоконагруженных серверных систем. Если задача позволяет, мы настоятельно рекомендуем переработать механизм формирования печатных форм, перейдя на использование встроенного в 1С табличного документа SpreadsheetDocument. Это избавит вас от зависимости от стороннего ПО, необходимости установки LibreOffice на сервере кластера и бесконечных проблем с регистрацией классов и правами доступа в реестре Windows. Если же использование OpenOffice критично, старайтесь использовать 32-битные сборки ПО для обеспечения максимальной совместимости.