Почему не срабатывает точка останова на сервере в 1С и как это исправить?

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

При разработке в 1С часто возникает ситуация, когда отладчик отлично работает на клиентском коде, но полностью игнорирует точки останова, установленные в серверных процедурах и функциях. При этом, если запустить клиентское приложение прямо на сервере, отладка может работать корректно как на клиенте, так и на сервере. Это сбивает с толку, но проблема имеет вполне логичное объяснение и решение.

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

Шаг 1. Включение режима отладки на сервере 1С

Первое и самое главное условие для серверной отладки — сервер «1С:Предприятия» должен быть запущен со специальным ключом -debug. Без этого ключа сервер не будет "знать", что к нему может подключиться отладчик, и будет игнорировать все попытки. Проверим и настроим это.

Самый надежный способ добавить этот ключ — через редактирование реестра Windows на машине, где установлен сервер 1С.

  1. Откройте редактор реестра. Для этого нажмите Win + R, введите regedit и нажмите Enter.
  2. Перейдите в ветку, где хранятся параметры запуска службы агента сервера 1С. Путь обычно выглядит так:
    Компьютер\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent (x86-64)
    Важно: Название службы может немного отличаться в зависимости от версии платформы и разрядности.
  3. Найдите в этой ветке параметр ImagePath. Он содержит строку запуска службы. Изначально она выглядит примерно так:
    
    "C:\Program Files\1cv8\8.3.15.1656\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo"
    
  4. Добавьте в самый конец этой строки ключ -debug. Строка должна принять следующий вид:
    
    "C:\Program Files\1cv8\8.3.15.1656\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
    
  5. После внесения изменений обязательно перезапустите службу "Агент сервера 1С:Предприятия 8.3" через консоль "Службы" (services.msc).

Для серверов на Linux: Если ваш сервер 1С работает под управлением ОС Linux, для включения отладки необходимо отредактировать конфигурационный файл. В файле srv1cv83 (обычно расположен в /etc/sysconfig или /etc/init.d) нужно установить параметр SRV1CV8_DEBUG в значение 1 и перезапустить службу.

Шаг 2. Настройка брандмауэра (Firewall) на компьютере разработчика

Это самая частая причина проблемы. Процесс отладки — это двусторонний обмен данными. Ваш Конфигуратор подключается к серверу, но затем серверный процесс (rphost.exe) должен подключиться обратно к вашему компьютеру, на котором запущен отладчик. По умолчанию брандмауэр Windows на вашем компьютере блокирует такие входящие подключения от неизвестных источников, и точка останова не срабатывает.

Проанализируем, как это исправить.

Решение А: Проверка и "перезапись" существующего правила

Иногда правило для 1С создается при установке платформы, но работает некорректно. Можно попробовать его "оживить".

  1. На вашем компьютере откройте "Брандмауэр Защитника Windows в режиме повышенной безопасности".
  2. Перейдите в "Правила для входящих подключений".
  3. Найдите правило, связанное с приложением 1С (например, 1cv8.exe).
  4. Убедитесь, что правило включено и разрешает подключения для вашего типа сети (частная, доменная).
  5. Откройте свойства правила. Как показала практика, иногда помогает сделать незначительное изменение и сохранить его. Например, на вкладке "Программы и службы" можно изменить путь с абсолютного (C:\Program Files\...) на путь с использованием переменной окружения (%ProgramFiles%\...). После применения изменений правило пересохраняется, что может решить проблему.

Решение Б: Создание явного правила для портов отладки (рекомендуется)

Это более надежный способ, который гарантирует, что нужные порты открыты.

  1. В "Правилах для входящих подключений" выберите "Создать правило...".
  2. Тип правила: "Для порта".
  3. Протокол: TCP.
  4. Определенные локальные порты: укажите стандартный диапазон портов отладки 1С — 1560-1591.
  5. Действие: "Разрешить подключение".
  6. Профиль: отметьте все профили (Доменный, Частный, Публичный) или только те, которые используются в вашей сети.
  7. Задайте понятное имя для правила, например, "1C Debugger Ports (TCP 1560-1591)".

После создания этого правила брандмауэр на вашем компьютере будет готов принять подключение от сервера 1С, и отладка должна заработать.

Шаг 3. Настройки в Конфигураторе

Убедимся, что и сам Конфигуратор настроен правильно для подключения к серверным процессам.

  1. Запустите Конфигуратор.
  2. Перейдите в меню "Отладка" → "Подключение...".
  3. В списке "Доступные предметы отладки" найдите "Сервер" и, если необходимо, "Фоновые задания" и "Клиентские и внешние соединения на сервере". Переместите их в правый список "Предметы отладки".
  4. Нажмите на кнопку "Автоматическое подключение...". В открывшемся окне установите флаги для тех предметов, к которым вы хотите подключаться автоматически, например, "Фоновые задания". Это очень удобно, чтобы не подключаться к каждому новому фоновому заданию вручную.
  5. Также убедитесь, что в параметрах запуска информационной базы (Сервис → Параметры → Запуск 1С:Предприятия → Дополнительные) установлен флаг "Устанавливать режим разрешения отладки".

Дополнительный совет: "Ловушка" для отладки Web-сервисов

Бывают ситуации, особенно при отладке Web- или HTTP-сервисов, когда внешний вызов выполняется так быстро, что отладчик не успевает "прицепиться" к процессу. Для таких случаев можно использовать небольшую хитрость — искусственную задержку в коде, чтобы у вас было время на подключение.

Посмотрим на пример такого кода, который можно вставить в самое начало отлаживаемого метода:


// Этот код имеет смысл использовать только в тестовой среде для отладки
ТестоваяБД = Константы.ТестоваяБаза.Получить();
Если ТестоваяБД Тогда
    // Создаем искусственную задержку, чтобы успеть подключить отладчик
    i = 0;
    Пока i < 3 Цикл // Задержка примерно на 3 секунды
        i = i + 1;
        // Используем команду ОС для паузы
        TimeoutWindows = "Timeout /T " + Формат(1, "ЧГ=0") + " /NoBreak";
        WScriptShell = Новый COMОбъект("WScript.Shell");
        WScriptShell.Run(TimeoutWindows, 0, -1);
        WScriptShell = Неопределено;
    КонецЦикла;
КонецЕсли;

// Здесь начинается основной код вашего метода,
// в котором можно ставить точку останова.

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

В заключение, помните, что включенный режим отладки на сервере (ключ -debug) незначительно снижает его производительность, так как объекты конфигурации загружаются динамически. Поэтому на продуктивных серверах рекомендуется включать этот режим только на время проведения работ и отключать после их завершения. Если штатную отладку на сервере включить невозможно, применимо расширение для отладки данных и запросов под пользователем.

← На главную