Как исправить перескакивание точки останова при отладке фоновых заданий в 1С?

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

Многие разработчики 1С сталкиваются с крайне раздражающей проблемой при отладке клиент-серверных баз: при попытке пошаговой отладки фонового задания точка останова внезапно перескакивает на совершенно другую строку модуля или вообще в другой модуль. Вы нажимаете клавишу шага отладки, а фокус перебрасывается, как говорят на форумах, «прыгает как сайгак». Очистка кэша сервера 1С в таких ситуациях, как правило, не помогает. Давайте разберем по шагам, почему возникает эта проблема и как ее грамотно решить.

Выясним причину «скачков» отладчика

Главная причина неадекватного поведения отладчика кроется в механизме так называемого «веерного подключения». Когда вы заходите в настройки конфигуратора и включаете автоматическое подключение фоновых заданий (в меню «Отладка» — «Подключение» — «Автоматическое подключение»), отладчик 1С начинает жадно перехватывать абсолютно все фоновые и регламентные процессы, которые в данный момент запускаются на сервере.

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

Рассмотрим подробнее несколько проверенных способов решения этой задачи.

Способ 1: Использование ключа запуска (рекомендуемый)

Если ваша конфигурация построена на базе Библиотеки стандартных подсистем (БСП), то самым правильным и безопасным способом будет запуск сеанса со специальным параметром. Это позволит избежать изменения типового кода.

Чтобы подсистема БСП понимала, что вы проводите отладку, и выполняла код в рамках текущего сеанса (а не создавала отдельное фоновое задание), проанализируем следующие действия:

  1. В Конфигураторе откройте меню Сервис, затем выберите Параметры.
  2. Перейдите на вкладку Запуск 1С:Предприятия и выберите раздел Основные.
  3. В поле «Параметры запуска» впишите значение РежимОтладки (для новых платформ, начиная с версии 8.3.25, используйте написание со слешем: /РежимОтладки).
  4. Примените настройки и запустите сеанс в режиме отладки.

При таком подходе многие фоновые задания будут выполняться в рамках вашего клиентского сеанса. Более того, в стандартной обработке «Регламентные и фоновые задания» при таком запуске появится удобная кнопка «Выполнить не в фоне», что делает процесс тестирования максимально комфортным.

Способ 2: Программное переопределение параметров выполнения (метод автора)

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

В конфигурациях на БСП за запуск фоновых задач часто отвечает общий модуль ДлительныеОперации. Вы можете найти в нем процедуру ВыполнитьВФоне и временно переопределить параметры, которые в нее передаются. Посмотрим на пример кода, который нужно добавить в самое начало процедуры:


ПараметрыВыполнения.ЗапуститьВФоне = Ложь;
ПараметрыВыполнения.ЗапуститьНеВФоне = Истина;

При таком вмешательстве система проигнорирует попытку создания фонового потока и выполнит весь алгоритм линейно в текущем сеансе. Точки останова перестанут слетать. Важно: не забудьте удалить этот код после завершения отладки, чтобы не нарушить логику работы базы в рабочей среде!

Способ 3: Трюк с быстрым отключением автоподключения

Если код менять нельзя, а ключ запуска не спасает, применим хитрость с настройками самого конфигуратора. Это позволит отладить именно нужное задание, отсекая все остальные (параллельные) процессы сервера.

  1. В Конфигураторе включите автоматическое подключение для фоновых заданий.
  2. Выполните в пользовательском режиме действие, которое инициирует старт вашего задания.
  3. Дождитесь, когда отладчик перехватит выполнение и остановится на вашей точке останова.
  4. Сразу же откройте настройки отладки (Отладка — Подключение — Автоматическое подключение) и снимите флажок с фоновых заданий!

После снятия флажка конфигуратор перестанет перехватывать новые (чужие) процессы. Ваш текущий поток уже подключен, и вы сможете спокойно проходить код клавишами пошаговой отладки, не боясь, что фокус «упрыгает» в другой модуль.

Способ 4: Изоляция кода через внешнюю обработку

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

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

Проверка сетевых настроек (Firewall)

Если вы заметили, что отладчик ведет себя крайне нестабильно, сеансы периодически «отваливаются», или фоновые задания вообще не подключаются, проанализируем настройки брандмауэра на сервере.

Для корректной работы механизмов отладки (особенно при разделенных клиенте и сервере) на сервере 1С должен быть открыт специальный диапазон сетевых портов. Убедитесь, что ваш системный администратор разрешил TCP-трафик по портам в диапазоне от 1560 до 1591. Если эти порты блокируются или фильтруются, нормальной отладки фоновых процессов добиться не получится.

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

← На главную