При разработке и сопровождении систем на платформе 1С:Предприятие 8.3 программисты часто сталкиваются с необходимостью отладки фоновых заданий. Стандартный механизм автоматического подключения в конфигураторе зачастую работает избыточно: при активации опции "Фоновые задания" отладчик начинает перехватывать абсолютно все процессы, запускаемые на сервере. В результате вместо анализа своего кода разработчик вынужден закрывать десятки окон с модулями параметров сеанса, проверками обновлений и регламентными процедурами БСП. Разберем подробно, как сфокусироваться на конкретном задании и сделать процесс отладки комфортным.
Проанализируем ситуацию с технической стороны. В серверном варианте работы фоновые задания выполняются в процессах rphost. Когда в конфигураторе включено автоматическое подключение к фоновым заданиям, отладчик подключается не к конкретной логической задаче, а к серверному процессу, который ее обслуживает. Поскольку один и тот же rphost может одновременно выполнять несколько фоновых потоков (например, ваше задание и системную проверку почты), отладчик реагирует на точки останова во всех этих потоках. Именно поэтому на каждый шаг по F10 могут открываться новые окна с чужим кодом.
Самый надежный способ отладить логику фонового задания — это временно отказаться от его выполнения в фоновом режиме. Если код позволяет, мы можем вызвать целевую процедуру напрямую из обработки или формы. Проанализируем, как это реализовать:
При таком подходе код будет выполняться в контексте вашего текущего сеанса (тонкого или толстого клиента), и отладчик сработает штатно, не отвлекаясь на серверные процессы других пользователей. Важный нюанс: помните, что фоновые задания всегда выполняются на сервере под полными правами (если не указан конкретный пользователь). При синхронном запуске от своего имени вы можете столкнуться с ограничениями прав доступа (RLS), которые не возникли бы в фоне.
Если ваша конфигурация построена на базе БСП, рассмотрим возможности подсистемы ДлительныеОперации. Разработчики библиотеки предусмотрели специальные механизмы для упрощения жизни программиста. Разберем работу с параметром РежимОтладки.
При запуске фонового задания через функцию ДлительныеОперации.ВыполнитьВФоне, в структуру параметров можно передать признак отладки. Рассмотрим пример кода:
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
ПараметрыВыполнения.НаименованиеФоновогоЗадания = "ОтладкаМоегоЗадания";
// Ключевой момент:
ПараметрыВыполнения.ВыполнитьВместе = Истина;
Результат = ДлительныеОперации.ВыполнитьВФоне("МойОбщийМодуль.МояПроцедура", ПараметрыПроцедуры, ПараметрыВыполнения);
Установка свойства ВыполнитьВместе в значение Истина заставляет систему выполнить код синхронно, если это возможно в текущем контексте. Это избавляет от необходимости подключаться к фоновым заданиям в принципе.
Если задание обязательно должно выполниться именно в фоне (например, проверяется специфика серверного контекста), мы можем использовать метод контролируемой паузы. Это позволит нам подключиться к конкретному сеансу вручную, не включая автоматический режим для всех заданий.
Разберем алгоритм действий:
Приостановить (в новых версиях платформы) или простой цикл.Пример кода для паузы:
// Временно добавляем код для отладки
ВремяОжидания = ТекущаяДата() + 30; // Ждем 30 секунд
Пока ТекущаяДата() < ВремяОжидания Цикл
// В это время мы вручную подключаемся через меню "Подключение"
КонецЦикла;
После того как отладчик подключился, вы можете установить точку останова сразу после цикла и продолжить работу. По завершении отладки не забудьте удалить этот вспомогательный код.
Если вы все же используете автоматическое подключение ко всем фоновым заданиям, проанализируем, как минимизировать количество лишних остановок. Платформа позволяет задавать условия для точек останова. Это мощный инструмент, который часто игнорируют.
Предположим, ваше задание обрабатывает данные конкретного контрагента или имеет уникальный набор параметров. Рассмотрим, как настроить точку останова:
СтруктураПараметров.ИмяСобытия = "МойУникальныйИдентификатор".В этом случае отладчик будет подключаться ко всем процессам rphost, но окно с кодом откроется только тогда, когда условие выполнится. Все остальные фоновые задания будут пролетать эту точку без остановки, не создавая "мусорных" окон.
Если ваш сервер настроен на использование протокола HTTP для отладки, возможности фильтрации значительно расширяются. В окне "Настройка отладки" можно указать фильтр по имени пользователя.
Посмотрим на этот метод подробнее:
Если регламентное задание запускается от имени конкретного служебного пользователя (например, "Robot_Debugger"), вы можете указать это имя в настройках подключения. После этого отладчик будет игнорировать все фоновые процессы, запущенные от имени System или других пользователей, и сфокусируется только на вашем процессе. Это один из самых "чистых" способов отладки на загруженных серверах.
Проанализируем дополнительные настройки, которые помогут стабилизировать процесс:
rphost. Это уменьшит вероятность того, что отладчик "потеряет" сессию при перебросе задания между процессами.Используя предложенные методы — от синхронного запуска до условных точек останова — мы можем существенно ускорить процесс разработки и избежать раздражающего хаоса из лишних окон отладчика.