При переходе от файлового варианта работы к клиент-серверному (SQL) разработчики часто сталкиваются с парадоксальной ситуацией: код, который идеально работал локально, начинает выдавать ошибки на сервере, а привычные инструменты, такие как отладчик, перестают функционировать. Рассмотрим подробнее причины этого явления и разберем по шагам, как привести систему в рабочее состояние.
Ситуация, когда Новый COMОбъект успешно отрабатывает в SQL-варианте, но выдает «Отказано в доступе» в файловом, или наоборот, связана в первую очередь с контекстом безопасности Windows. Проанализируем, под какими учетными записями выполняется код:
HKEY_CLASSES_ROOT или на выполнение конкретной dll, система выдаст ошибку доступа.USR1CV8).Для решения проблемы в файловом режиме попробуем запустить 1С «От имени администратора». Если это помогло, значит, проблема в правах. Выясним причину глубже: компонента может быть не зарегистрирована в системе. Для ручной регистрации используем команду:
regsvr32 "C:\Path\To\Your\Component.dll"
Если используется 64-битный сервер 1С, а COM-объект 32-битный, прямое создание не сработает. Разберем, как это обойти через «Службы компонентов» (DCOM):
Часто отладчик на сервере не работает, хотя в файловой базе всё в порядке. Посмотрим на настройку службы сервера. Для включения возможности отладки необходимо запустить службу 1C:Enterprise 8.3 Server Agent с ключом -debug.
Проверим строку запуска в реестре Windows по пути: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent. Параметр ImagePath должен выглядеть примерно так:
"C:\Program Files\1cv8\8.3.x.x\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\ProgramData\1C\1cv8" -debug
Важный момент по портам: Отладка в 1С требует открытия целого диапазона портов. Проанализируем сетевые настройки брандмауэра (Firewall). Для работы традиционной отладки по протоколу TCP должны быть открыты:
Если сервер и клиент находятся в разных подсетях, администратору необходимо убедиться, что трафик разрешен в обе стороны, так как сервер должен иметь возможность «достучаться» до клиентского отладчика.
Начиная с версии платформы 8.3.7, мы можем использовать более стабильный протокол отладки через HTTP. Это особенно актуально, если между разработчиком и сервером стоят сложные сетевые экраны или VPN. Рассмотрим, как её включить:
conf.cfg в папке bin/conf) или при запуске службы указываем использование HTTP-отладки.Преимущество этого метода в том, что он использует стандартные HTTP-порты и не требует открытия широкого диапазона TCP-портов, что значительно упрощает жизнь системным администраторам.
Выясним причину, по которой автор темы видел работающий отладчик в файловой базе. В файловом режиме «клиент» и «сервер» — это один и тот же процесс на одной машине. Там нет сетевых задержек, нет блокировок портов брандмауэром и нет разделения прав доступа между пользователем и системной службой. Переход на SQL — это переход к распределенной архитектуре, требующий явной настройки взаимодействия между узлами системы.
Используем следующий чек-лист для проверки работоспособности в клиент-сервере:
-debug в параметрах службы.rphost.exe и порты 1560-1591.comcntr.dll) на самом сервере 1С, а не только на ПК пользователя.