Нередко разработчики и администраторы 1С сталкиваются с ситуацией, когда определенный программный код (например, обмен данными или рассылка писем) продолжает выполняться строго по расписанию, хотя соответствующее регламентное задание в конфигураторе или в консоли заданий отключено. Разберем по шагам все возможные причины такого поведения и способы обнаружения реального источника запуска процедуры.
Первым делом проанализируем события в журнале регистрации непосредственно в момент срабатывания процедуры (например, в 08:00):
Тонкий клиент, Толстый клиент, COM-соединение или Web-сервис.Консоль регламентных и фоновых заданий на вкладке Фоновые задания, чтобы увидеть фактический список запущенных потоков в момент события.Если глобальный поиск по конфигурации не дает результатов, а регламентное задание отключено, процедура может вызываться динамически или через цепочку других методов. Выясним точный контекст вызова, добавив в начало исполняемой процедуры логирование:
ЗаписьЖурналаРегистрации(
"ДиагностикаЗапуска",
УровеньЖурналаРегистрации.Информация,
,
,
"Пользователь: " + ИмяПользователя() + Chr(10) +
"Приложение: " + ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения + Chr(10) +
"Номер сеанса: " + Строка(ПолучитьТекущийСеансИнформационнойБазы().НомерСеанса) + Chr(10) +
"Стек вызовов: " + Chr(10) + ПолучитьСтекВызовов()
);
Метод ПолучитьСтекВызовов() (доступен в платформе 1С 8.3) запишет всю цепочку родительских процедур и функций, что позволит мгновенно определить инициатора вызова.
Для гарантированного перехвата выполнения используем средства платформы:
-debug или настроена отладка по протоколу HTTP/TCP. Установим точку останова в целевой процедуре общего модуля. При срабатывании в назначенное время отладчик остановится на точке, и в окне Стек вызовов будет виден полный путь выполнения.CALL или SCALL с фильтром по имени модуля и метода. Это зафиксирует серверный процесс rphost, контекст и время обращения без необходимости постоянного дежурства у отладчика.Обратим внимание на разницу во времени между расписанием задания (4:00) и фактическим выполнением (8:00). Разница ровно в 4 часа часто указывает на несовпадение часовых поясов:
Если в коде конфигурации прямых вызовов нет, рассмотрим альтернативные механизмы инициализации:
/Execute <ПутьКОбработке>.
ФоновыеЗадания.Выполнить("ИмяОбщегоМодуля.ИмяПроцедуры", ПараметрыЗапуска, КлючЗадания, "Наименование фонового задания");
&Перед, &После, &Вместо или собственные регламентные задания.ПриЗаписи).Чтобы быстро локализовать проблему, откроем консоль администрирования кластера серверов 1С, зайдем в свойства информационной базы и установим флаг Блокировка регламентных заданий включена: