Как отладить конкретное фоновое задание в 1С и избавиться от лишних окон

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

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

Выясним причину: почему открывается так много окон

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

Способ 1. Синхронный запуск кода (выполнение "здесь и сейчас")

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

  1. Создадим внешнюю обработку или добавим команду в существующую форму.
  2. В обработчике команды подготовим структуру параметров, которую обычно получает фоновое задание.
  3. Вызовем экспортную процедуру серверного модуля напрямую.

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

Способ 2. Использование возможностей БСП (Библиотека стандартных подсистем)

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

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


ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "ОтладкаМоегоЗадания";
// Ключевой момент:
ПараметрыВыполнения.ВыполнитьВместе = Истина; 
Результат = ДлительныеОперации.ВыполнитьВФоне("МойОбщийМодуль.МояПроцедура", ПараметрыПроцедуры, ПараметрыВыполнения);

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

Способ 3. Ручное подключение через "зацикливание"

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

Разберем алгоритм действий:

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

Пример кода для паузы:


// Временно добавляем код для отладки
ВремяОжидания = ТекущаяДата() + 30; // Ждем 30 секунд
Пока ТекущаяДата() < ВремяОжидания Цикл
    // В это время мы вручную подключаемся через меню "Подключение"
КонецЦикла;

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

Способ 4. Точки останова с условием

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

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

  1. Установите точку останова в общем модуле.
  2. Нажмите на нее правой кнопкой мыши и выберите "Условие...".
  3. Напишите выражение на языке 1С, которое будет истинным только для вашего задания. Например: СтруктураПараметров.ИмяСобытия = "МойУникальныйИдентификатор".

В этом случае отладчик будет подключаться ко всем процессам rphost, но окно с кодом откроется только тогда, когда условие выполнится. Все остальные фоновые задания будут пролетать эту точку без остановки, не создавая "мусорных" окон.

Способ 5. Фильтрация по пользователю при HTTP-отладке

Если ваш сервер настроен на использование протокола HTTP для отладки, возможности фильтрации значительно расширяются. В окне "Настройка отладки" можно указать фильтр по имени пользователя.

Посмотрим на этот метод подробнее: Если регламентное задание запускается от имени конкретного служебного пользователя (например, "Robot_Debugger"), вы можете указать это имя в настройках подключения. После этого отладчик будет игнорировать все фоновые процессы, запущенные от имени System или других пользователей, и сфокусируется только на вашем процессе. Это один из самых "чистых" способов отладки на загруженных серверах.

Рекомендации по настройке окружения

Проанализируем дополнительные настройки, которые помогут стабилизировать процесс:

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

← На главную