Как найти и отключить скрытое или невидимое регламентное задание в 1С

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

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

1. Анализ журнала регистрации и сеансов пользователей

Первым делом проанализируем события в журнале регистрации непосредственно в момент срабатывания процедуры (например, в 08:00):

  1. Откроем Журнал регистрации и установим фильтр по точному интервалу времени запуска.
  2. Обратим внимание на колонку Имя приложения. Если запуск произошел не из регламентного задания, там может быть указано Тонкий клиент, Толстый клиент, COM-соединение или Web-сервис.
  3. Проверим колонку Пользователь. Часто сторонние интеграции или пакетные скрипты запускаются от имени сервисных учетных записей или администраторов.
  4. Изучим фоновые задания через типовую обработку Консоль регламентных и фоновых заданий на вкладке Фоновые задания, чтобы увидеть фактический список запущенных потоков в момент события.

2. Программное логирование контекста и стека вызовов

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


ЗаписьЖурналаРегистрации(
    "ДиагностикаЗапуска",
    УровеньЖурналаРегистрации.Информация,
    ,
    ,
    "Пользователь: " + ИмяПользователя() + Chr(10) +
    "Приложение: " + ПолучитьТекущийСеансИнформационнойБазы().ИмяПриложения + Chr(10) +
    "Номер сеанса: " + Строка(ПолучитьТекущийСеансИнформационнойБазы().НомерСеанса) + Chr(10) +
    "Стек вызовов: " + Chr(10) + ПолучитьСтекВызовов()
);

Метод ПолучитьСтекВызовов() (доступен в платформе 1С 8.3) запишет всю цепочку родительских процедур и функций, что позволит мгновенно определить инициатора вызова.

3. Использование отладки на сервере и технологического журнала

Для гарантированного перехвата выполнения используем средства платформы:

  1. Серверная отладка: убедимся, что служба кластера серверов 1С запущена с флагом -debug или настроена отладка по протоколу HTTP/TCP. Установим точку останова в целевой процедуре общего модуля. При срабатывании в назначенное время отладчик остановится на точке, и в окне Стек вызовов будет виден полный путь выполнения.
  2. Технологический журнал: настроим сбор событий CALL или SCALL с фильтром по имени модуля и метода. Это зафиксирует серверный процесс rphost, контекст и время обращения без необходимости постоянного дежурства у отладчика.

4. Проверка разницы часовых поясов (UTC vs Local Time)

Обратим внимание на разницу во времени между расписанием задания (4:00) и фактическим выполнением (8:00). Разница ровно в 4 часа часто указывает на несовпадение часовых поясов:

  1. Сервер 1С или СУБД работает по времени UTC, а клиентские приложения отображают местное время со смещением (например, UTC+4).
  2. В типовых конфигурациях расписание регламентных заданий может интерпретироваться в часовом поясе сервера. В результате задание, запланированное на 04:00 UTC, запускается ровно в 08:00 по местному времени.

5. Поиск скрытых источников и внешних сценариев запуска

Если в коде конфигурации прямых вызовов нет, рассмотрим альтернативные механизмы инициализации:

  1. Планировщик задач операционной системы (Cron / Task Scheduler): задание может запускаться внешней bat-командой или скриптом с параметром командной строки /Execute <ПутьКОбработке>.
  2. Копии информационных баз: проверим тестовые и архивные копии базы на других серверах. Часто разработчики забывают отключить регламентные задания в развернутых копиях, и они продолжают обращаться к боевым почтовым серверам или сервисам.
  3. Программный запуск фонового задания: процедура может запускаться из другого активного процесса через конструкцию:

ФоновыеЗадания.Выполнить("ИмяОбщегоМодуля.ИмяПроцедуры", ПараметрыЗапуска, КлючЗадания, "Наименование фонового задания");
  1. Расширения конфигурации: проверим подключенные расширения. Глобальный поиск по основной конфигурации не затрагивает расширения, где могут быть перехватчики &Перед, &После, &Вместо или собственные регламентные задания.
  2. Подписки на события: запуск процедуры может быть привязан к событию записи объекта (например, загрузка документов внешним сервисом в 8:00 вызывает подписку ПриЗаписи).

6. Экспресс-проверка блокировкой кластера

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

  1. Если в 8:00 процедура не выполнилась — запуск происходит через внутренний планировщик кластера 1С (регламентное задание в базе, расширении или области данных).
  2. Если процедура все равно выполнилась — источник находится вне планировщика регламентных заданий 1С (клиентский сеанс, внешняя обработка по расписанию ОС, COM-соединение или копия базы).
← На главную