Часто разработчики 1С сталкиваются с ситуацией, которая поначалу кажется нелогичной: при запуске отладки из Конфигуратора под своей учетной записью администратора все серверные процессы видны и доступны для подключения, но стоит запустить сеанс под обычным пользователем, как серверный предмет отладки таинственным образом исчезает. Становится доступен только клиентский сеанс, что делает невозможным анализ серверного кода.
Проанализируем эту проблему и разберем по шагам, как настроить все необходимое для полноценной серверной отладки под любым пользователем. Причина кроется не в одной, а в нескольких настройках, которые должны быть выполнены корректно.
Первое и самое фундаментальное требование, без которого никакая серверная отладка невозможна в принципе, — это запуск службы сервера 1С в специальном отладочном режиме. По умолчанию для максимальной производительности сервер работает в обычном режиме. При подготовке серверной среды, особенно если вы используете бесплатные инструменты, вам может пригодиться инструкция по установке комьюнити-лицензии разработчика на сервер 1С.
Служба Агент сервера 1С:Предприятия должна быть запущена с ключом -debug. Проверим и настроим это:
1C:Enterprise 8.3 Server Agent (x86-64) (версия и разрядность могут отличаться), и остановите ее.Win+R, введите regedit и нажмите Enter.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)ImagePath. Его значение — это строка, содержащая путь к исполняемому файлу ragent.exe и другие параметры. Нам нужно в самый конец этой строки, через пробел, дописать ключ -debug.
"C:\Program Files\1cv8\8.3.20.1234\bin\ragent.exe" -srvc -agent ... -d "C:\Program Files\1cv8\srvinfo"
"C:\Program Files\1cv8\8.3.20.1234\bin\ragent.exe" -srvc -agent ... -d "C:\Program Files\1cv8\srvinfo" -debug
Важно: без этого шага ни один пользователь, включая администратора, не сможет отлаживать серверный код. Если у вас отладка под администратором уже работает, значит, этот шаг, скорее всего, выполнен.
Вторая по популярности причина проблем с отладкой — заблокированные сетевые порты. Отладчик (в Конфигураторе) и предмет отладки (клиентский или серверный сеанс) взаимодействуют друг с другом по сети, используя протокол TCP/IP. Для этого взаимодействия платформа 1С по умолчанию использует определенный диапазон портов.
Необходимо убедиться, что порты в диапазоне 1560-1591 открыты для входящих и исходящих соединений. Проверку нужно выполнить на двух машинах:
Проверьте правила брандмауэра Windows или любого другого сетевого экрана, который используется в вашей организации. Если порты закрыты, отладчик просто не сможет "увидеть" серверный процесс и не добавит его в список предметов отладки.
Итак, сервер запущен в режиме отладки, порты открыты, но под пользователем все равно не видно серверного сеанса. Это и есть ключевой момент. Часто это случается при работе с внешними объектами. Например, если вы разрабатываете печатные формы, удобно использовать универсальную форму отладки для внешних печатных форм или специальное расширение для отладки внешних обработок, которое помогает поймать точку останова.
В целях безопасности платформа 1С по умолчанию запрещает подключение отладчика к активному сеансу пользователя. Чтобы исправить это:
Сразу после этого в вашем Конфигураторе должен появиться серверный сеанс этого пользователя. Если же вам нужно отладить код, который выполняется асинхронно, полезно знать, как исполнить метод внешней обработки в фоновом задании с выводом подробного лога.
В ходе обсуждения возник еще один логичный вопрос: почему, заходя под администратором, разработчик видит в списке отладки сеансы всех пользователей, а при запуске под обычным пользователем — только свой собственный?
Это не ошибка, а штатное поведение системы разграничения прав. Пользователь с полными правами в системе 1С обладает расширенными полномочиями. Для более эффективной работы в тонком клиенте администраторы часто используют дополнительные инструменты разработчика «Инструментики», которые включают консоли запросов и редакторы объектов.
Обычный пользователь из соображений безопасности может видеть и отлаживать только те процессы, которые были инициированы им самим. Таким образом, система защищает сеансы пользователей от несанкционированного вмешательства.
Подведем итог. Для успешной отладки серверного кода под конкретным пользователем необходимо последовательно убедиться в выполнении трех условий: сервер 1С запущен с ключом -debug, сетевые порты 1560-1591 открыты, и в самом сеансе пользователя явно разрешена отладка по TCP/IP.