Переход на новые релизы платформы 1С, особенно в ветке 8.3.21, часто сопровождается неожиданными сбоями в механизмах, которые годами работали стабильно. Одной из наиболее острых проблем является отказ фоновых заданий, использующих V83.COMConnector для интеграции между базами (например, в конфигурации УПП 1.3). При этом часто наблюдается странный симптом: код, запущенный через внешнюю обработку интерактивно, работает идеально, но то же самое действие в фоновом задании выдает ошибку «Объект не обнаружен».
В этой статье мы подробно разберем, почему так происходит, проанализируем типичные ошибки в коде и изучим технические настройки сервера, необходимые для стабильной работы COM в современных реалиях платформы 1С.
Рассмотрим ситуацию, с которой столкнулся автор темы. Проанализируем фрагмент кода, который использовался для подключения:
Соединение = Новый COMОбъект("V83.COMConnector");
ПараметрыДоступа = "Srvr=""" + ПутьКБазе + """;Ref="""+База+""";Usr="""+ Пользователь + """;Pwd=""" + ПарольПользователя + """;";
Попытка
База = Соединение.Connect(ПараметрыДоступа);
Исключение
// Обработка ошибки
КонецПопытки;
Обработка = База.Обработки.УниверсальныйОбменДаннымиXML.Создать;
Выясним причину ошибки, на которую указали участники обсуждения. Обратите внимание на переменную База. В начале формирования строки ПараметрыДоступа переменная База, очевидно, содержит строковое значение (имя базы на сервере). Однако далее результат метода Соединение.Connect() записывается в ту же самую переменную База.
В контексте фонового задания, особенно при выполнении на серверной стороне, такая двойная инициализация или «затирание» типа переменной может приводить к непредсказуемому поведению. Если на этапе Соединение.Connect произошла ошибка, которая была подавлена пустым блоком Исключение, переменная База останется строкой или примет неопределенное значение. В итоге при обращении к База.Обработки система закономерно сообщит, что объект или свойство не обнаружены.
Решение в коде: Всегда используйте разные, осмысленные имена переменных. Например, ИмяБазыНаСервере для строки и comСоединениеОбъект для результата подключения. Это исключит путаницу при отладке и выполнении.
Проанализируем ситуацию глубже. Почему во внешней обработке (на клиенте) всё работает, а в фоновом задании (на сервере) — нет? Это ключевой вопрос, ответ на который кроется в разнице окружений. Рассмотрим основные причины:
comcntr.dll должна быть корректно зарегистрирована и доступна именно для 64-битного окружения.USR1CV8). У этой записи может не быть прав на инициализацию COM-объектов или на доступ к веткам реестра.Если после исправления кода проблема сохраняется, значит, причина носит системный характер. Для платформы 8.3.21 и выше рекомендуется использовать механизм приложения COM+. Это позволяет изолировать работу V83.COMConnector в отдельном процессе dllhost.exe, что решает проблемы разрядности и прав доступа.
Разберем по шагам процесс настройки приложения COM+:
1C_COM_Connector) и выберите тип «Серверное приложение».USR1CV8 или другого системного администратора, от имени которого будет работать шлюз.comcntr.dll из папки bin именно той версии платформы (в данном случае 8.3.21.1895), которая установлена на сервере.Часто после обновления платформы права доступа системного пользователя USR1CV8 «слетают» или требуют пересмотра. Проанализируем, какие области требуют проверки:
Реестр Windows: Проверьте ветку HKEY_CLASSES_ROOT\CLSID для GUID, соответствующего V83.COMConnector. Убедитесь, что у пользователя, под которым работает сервер 1С, есть права на чтение этой ветки. Также критично, чтобы путь InprocServer32 вел к актуальному файлу comcntr.dll в папке новой платформы.
Доступ к папке bin: Убедитесь, что пользователь службы 1С имеет полные права (включая «Выполнение») на каталог C:\Program Files\1cv8\8.3.21.1895\bin. При установке нового релиза система создает новую папку, и права на нее могут не унаследоваться автоматически.
В новых версиях платформы 1С (начиная с 8.3.18+) усилен контроль безопасности. Если в кластере 1С настроены Профили безопасности, работа с внешними объектами (к которым относится COM) может быть заблокирована.
Разберем, что нужно проверить в консоли администрирования кластера:
V83.COMConnector в список разрешенных COM-классов.Также не стоит забывать про очистку серверного кэша. После обновления платформы в каталоге srvinfo могут остаться временные файлы метаданных, которые мешают корректному сопоставлению объектов при COM-соединении. Выполните остановку службы 1С и очистите содержимое папок snccntxt и reg_1541 (кроме файлов конфигурации кластера).
Подводя итог, если у вас перестало работать фоновое задание с COM-соединением после обновления на 8.3.21.1895, придерживайтесь следующего алгоритма:
Новый COMОбъект("V83.COMConnector.1").comcntr.dll в реестре и убедитесь, что путь ведет к актуальному релизу.USR1CV8.Такой комплексный подход позволит восстановить работоспособность обменов в УПП 1.3 и обеспечить стабильную работу системы на новой платформе.