Часто при работе с современными конфигурациями 1С мы сталкиваемся с ситуацией, когда при запуске какой-либо тяжелой операции (например, загрузки банковских выписок или закрытия месяца) появляется окно ожидания с анимацией — так называемый «желтый кот». Это сигнализирует о том, что выполнение кода передано на сервер в фоновое задание. Прямая попытка поставить точку останова в коде в этом случае не сработает, так как фоновое задание — это отдельный сеанс на сервере, к которому конфигуратор по умолчанию не подключен. Разберем пошагово, как настроить систему для «поимки» такого кода.
Первым делом нам необходимо подготовить сам Конфигуратор, чтобы он автоматически «подхватывал» новые сеансы, создаваемые сервером для фоновых задач. Проанализируем стандартный алгоритм действий:
Важный нюанс: после установки этих настроек конфигуратор начнет отслеживать появление новых фоновых процессов. Однако это сработает только в том случае, если на сервере 1С включен режим отладки.
Если сервер 1С:Предприятие запущен в обычном режиме, отладка серверного кода (включая фоновые задания) будет недоступна. Выясним, как это проверить и исправить. Если вы используете сервер на ОС Windows, режим отладки включается в реестре или в параметрах запуска службы. Рассмотрим пример изменения параметров в реестре:
1C:Enterprise 8.3 Server Agent.ImagePath добавим ключ -debug.Пример строки запуска может выглядеть следующим образом:
"C:\Program Files\1cv8\8.3.XX.XXXX\bin\ragent.exe" -srvc -agent -regport 1541 -port 1540 -range 1560:1591 -d "C:\Program Files\1cv8\srvinfo" -debug
После внесения изменений службу необходимо запустить. Только после этого конфигуратор сможет подключаться к серверным процессам.
В новых версиях платформы (начиная с 8.3.7) появился более стабильный протокол отладки — HTTP. Он работает значительно надежнее в сложных сетях и через брандмауэры. Чтобы использовать его, при запуске сервера вместо ключа -debug следует использовать связку параметров.
Проанализируем пример настройки HTTP-отладки:
-debug -http -httpUrl http://server_name:port
В Конфигураторе при этом в меню Сервис — Параметры на закладке Отладка должен быть выбран протокол HTTP, а в поле «Адрес отладки» указан адрес сервера отладки. Это позволяет избежать многих проблем с «отваливающимися» точками останова в фоновых заданиях.
Если мы видим «желтого кота», значит, разработчики конфигурации использовали Библиотеку стандартных подсистем (БСП) и модуль ДлительныеОперации. Чтобы найти конкретный участок кода, который создает документы (например, при загрузке выписок), нам нужно понять, какая процедура запускается в фоне.
Рассмотрим метод поиска:
ДлительныеОперации.ЗапуститьВыполнениеВФоне.Пример типичного вызова:
ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор);
Результат = ДлительныеОперации.ЗапуститьВыполнениеВФоне(
"МойОбщийМодульСервер.ВыполнитьЗагрузкуДанных",
СтруктураПараметров,
ПараметрыВыполнения
);
В данном случае точку останова следует ставить в начале процедуры ВыполнитьЗагрузкуДанных в модуле МойОбщийМодульСервер.
В некоторых сложных обработках обмена данными разработчики предусматривают специальный флаг РежимОтладки (или ЗапускатьФоново). Если этот флаг доступен в настройках (иногда он скрыт и его можно изменить только программно в отладчике непосредственно перед запуском), система может выполнить код не в фоне, а непосредственно в текущем сеансе клиента.
Это самый простой способ отладки, так как вам не нужно настраивать сервер. Посмотрите на программный код перед вызовом фонового задания:
Если Параметры.РежимОтладки Тогда
// Выполняем код напрямую в текущем сеансе
МойОбщийМодульСервер.ВыполнитьЗагрузкуДанных(СтруктураПараметров);
Иначе
// Запускаем фоновое задание
ДлительныеОперации.ЗапуститьВыполнениеВФоне(...);
КонецЕсли;
Если вы принудительно установите РежимОтладки = Истина в отладчике, код выполнится синхронно, и вы сразу попадете в нужную процедуру.
Если настроить отладку на сервере нет возможности (например, на рабочем сервере в разгар рабочего дня), а найти место создания документа жизненно необходимо, можно воспользоваться методом «грубой силы». В предполагаемом месте кода вставьте строку:
ВызватьИсключение "Стоп-код для поиска стека вызовов";
При запуске фоновое задание завершится с ошибкой. После этого откройте Журнал регистрации. В тексте ошибки будет отображен полный стек вызовов — вы увидите все модули и номера строк, которые привели к этому месту. Это позволит точно определить, где именно происходит логика создания документов СписаниеБезналичныхДенежныхСредств или ПоступлениеНаРасчетныйСчет.
Для эффективной отладки фонового кода мы рекомендуем сочетать системную настройку сервера (-debug или -http) с правильной конфигурацией автоматического подключения в самом Конфигураторе. Если же фоновое задание выполняется слишком быстро и отладчик не успевает к нему подключиться, используйте временную задержку в коде с помощью ВвестиСтроку (для файловых баз) или циклов ожидания, чтобы дать себе время на ручное подключение к сеансу.