Почему отладка 1С на сервере работает для одной базы, но не работает для другой по TCP/IP?

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

В практике администраторов и разработчиков 1С периодически возникает специфическая проблема: на одном и том же сервере 1С:Предприятие 8.3 серверная отладка по протоколу TCP/IP успешно функционирует в одной информационной базе, но отказывается работать в другой. При этом обе базы могут находиться на одном сервере приложений, а точка останова в серверном коде проблемной базы просто игнорируется платформой.

Рассмотрим подробно причины возникновения такой неполадки, проанализируем базовые и скрытые нюансы настройки сетевого взаимодействия кластера и разберем пошаговый алгоритм восстановления отладки.

Главная причина: Использование IP-адреса вместо сетевого имени в свойствах кластера

Разберем основную причину, с которой чаще всего сталкиваются на практике. Если при добавлении рабочего сервера в консоли administration (или в свойствах информационной базы) указан IP-адрес (например, 192.168.1.10), а в списке баз у пользователя или в настройках подключения указано сетевое имя (например, server-1c), возникнет рассинхронизация при попытке платформы сопоставить отладочные сеансы.

Протокол TCP/IP при серверной отладке опирается на точное совпадение адресации и идентификаторов процессов rphost.exe. Когда клиентское приложение подключается к базе, использующей сетевое имя сервера, а кластер видит рабочий процесс через IP-адрес, менеджер кластера не может корректно перенаправить отладочные события разработчику.

Для устранения этой проблемы выполним следующие шаги:

  1. Откроем консоль администрирования кластера серверов 1С:Предприятия.
  2. Перейдем в ветку Рабочие серверы и откроем свойства текущего сервера.
  3. В поле Сетевое имя закроем IP-адрес и укажем точное доменное или NetBIOS-имя сервера (например, server-1c).
  4. Проверим список информационных баз в кластере и убедимся, что адрес сервера БД и параметры подключения также используют буквенные имена, а не IP-адреса.
  5. Перезапустим службу 1C:Enterprise 8.3 Server Agent.

Проверка ключа отладки в службе 1С:Предприятия

Выясним еще одно важное условие: запущен ли сам агент сервера с разрешением отладки. Без параметра -debug серверный код не будет останавливаться ни для управляемых, ни для обычных форм.

Проанализируем процесс включения ключа отладки в реестре Windows:

  1. Остановим службу 1C:Enterprise 8.3 Server Agent через оснастку управления службами (services.msc).
  2. Запустим редактор реестра (regedit).
  3. Перейдем в ветку реестра службы 1С (название может незначительно отличаться в зависимости от версии платформы):

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent

  4. Найдем параметр ImagePath и откроем его для редактирования.
  5. Добавим параметр -debug в конец строки запуска (через пробел). Пример итоговой строки:

    "C:\Program Files\1cv8\8.3.11.2867\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -debug

  6. Сохраним изменения и запустим службу сервера 1С заново.

Совпадение имен информационных баз и проверка регистра

Посмотрим на настройки подключения со стороны Конфигуратора. Платформа 1С чувствительна к регистру символов и точному написанию имени информационной базы на сервере.

Проверим следующие моменты:

  1. Имя базы в списке кластера и имя базы в строке подключения клиентского приложения / Конфигуратора должны полностью совпадать с точностью до регистра букв (например, Trade_Base и trade_base могут восприниматься компонентами отладки как разные базы).
  2. В меню Конфигуратора выберем Отладка -> Подключение..., нажмем кнопку Автоматическое подключение и убедимся, что установлены флаги напротив пунктов Фоновые задания и Серверные соединения.

Разрешение имен DNS, сетевые порты и брандмауэр

Протокол отладки TCP/IP работает по схеме обратного соединения: сервер приложений 1С (процесс rphost.exe) самостоятельно инициализирует входящее TCP-подключение к компьютеру разработчика, на котором запущен Конфигуратор.

Если для одной базы отладка работает, а для другой — нет, это может быть связано со следующими факторами:

  1. Исчерпание диапазонов портов: По умолчанию для отладки выделен диапазон портов 1560–1591. Если на сервере работает много рабочих процессов rphost.exe или активны несколько информационных баз, свободных портов для новых сеансов конкретной базы может не хватить.
  2. Блокировка входящих соединений брандмауэром на ПК разработчика: Местный брандмауэр Windows на рабочем месте программиста может блокировать входящий трафик от сервера. Необходимо создать разрешающее правило для файла 1cv8.exe или для диапазонов портов 1560–1591.
  3. Проблемы DNS и IPv6: Если сервер не может определить IP-адрес компьютера разработчика по его сетевому имени, обратное подключение сорвется. Для проверки пропишем статическое соответствие имен в файле hosts на сервере 1С:

    C:\Windows\System32\drivers\etc\hosts

    
    192.168.1.10 server-1c
    192.168.1.50 dev-pc
    
    Также при нестабильной работе сетевых протоколов рекомендуется отключить неиспользуемый IPv6 в свойствах сетевого адаптера сервера.

Альтернативное решение: Переход на протокол HTTP

Начиная с версии платформы 8.3.7, компания 1С рекомендует использовать отладку по протоколу HTTP вместо TCP/IP. HTTP-отладка избавлена от проблем с обратным соединением, так как весь трафик передается через единый порт отладочного сервера (по умолчанию 1550).

Рассмотрим, как перевести сервер на HTTP-отладку:

  1. В параметрах запуска службы 1C:Enterprise 8.3 Server Agent заменим ключ -debug на комбинацию -debug -http.
  2. Перезапустим службу сервера 1С.
  3. В Конфигураторе откроем меню Сервис -> Параметры -> вкладка Отладка.
  4. Переключим переключатель с Отладка по протоколу TCP/IP на Отладка по протоколу HTTP и перезапустим Конфигуратор.

Использование HTTP-протокола полностью снимает проблемы с блокировкой входящих портов на машине разработчика и решает большинство трудностей, связанных с резолвом сетевых имен в кластере.

← На главную