Регламентное задание 1С не выполняется: порядок проверки и скрипт для консоли
Иван Недомолков · Dərc edilib:
Если регламентное задание включено, расписание заполнено, а работы нет, первым делом выясните, запускалось ли оно вообще. Статус отвечает, чем кончился последний вызов, и ничего не говорит о том, были ли вызовы. Дальше проверки идут по цене: запрет заданий в кластере, отказы библиотеки стандартных подсистем при старте, учётная запись в поле “Имя пользователя”. В конце случай, где решило именно это поле: задание шестнадцать месяцев не запустилось ни разу, и журнал всё это время был чист.
Не запускается или работает впустую
Снаружи оба отказа выглядят одинаково: данных нет. Ищутся они в разных местах.
| Что видно | Что это значит | Куда смотреть |
|---|---|---|
| запусков по расписанию нет, ошибок нет | задание не стартует | кластер, поле “Имя пользователя” |
| запуск есть и сразу обрывается с текстом | запуск отменила проверка БСП | текст ошибки фонового задания |
| запуски успешные, а данных нет | работа идёт вхолостую | код, права, возраст данных в приёмнике |
| запуски есть, но тянутся часами | задание не влезает в окно | время по шагам |
Картину портят ручные запуски. Данные, которые довезли руками, выглядят как работа по расписанию, поэтому смотреть надо, кто запускал, а не есть ли результат.
Скрипт: задания базы, их пользователи и последний запуск
Код для консоли кода или внешней обработки. Выполнять на сервере под администратором: список регламентных заданий платформа отдаёт только ему.
Для Каждого Задание Из РегламентныеЗадания.ПолучитьРегламентныеЗадания() Цикл
Если Не Задание.Использование Тогда
Продолжить;
КонецЕсли;
ИмяПользователя = Задание.ИмяПользователя;
Если ПустаяСтрока(ИмяПользователя) Тогда
ОтКого = "имя не задано";
ИначеЕсли ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователя) = Неопределено Тогда
ОтКого = ИмяПользователя + " (такого пользователя в базе нет)";
Иначе
ОтКого = ИмяПользователя;
КонецЕсли;
Последнее = Задание.ПоследнееЗадание;
Если Последнее = Неопределено Тогда
Запуск = "последний запуск не найден";
Иначе
Запуск = Строка(Последнее.Начало) + ", " + Строка(Последнее.Состояние);
КонецЕсли;
Сообщить(Задание.Метаданные.Имя + " | " + Задание.Наименование + " | " + ОтКого + " | " + Запуск);
КонецЦикла;
В выводе стоит разобрать три вида строк. Пользователь, которого в базе нет. Включённое задание без последнего запуска: повод поднять его историю. И пустое имя: по описанию платформы такое задание выполняется пользователем по умолчанию с административными правами, и надо понимать, устраивает ли это вас.
Проверки по порядку
- История запусков. Если у механизма есть свой журнал, поднимите его целиком и разложите записи по датам и по тому, кто запускал. Среди фоновых заданий ищите хотя бы одно, связанное с этим регламентным.
- Блокировка регламентных заданий в кластере. У информационной базы в настройках кластера есть флаг, который выключает её регламентные задания целиком. Его вместе с остальными настройками базы показывает чек-ап сервера 1С, обработка лежит на Инфостарте.
- Отказы БСП при старте. Об этом ниже отдельно: задание стартует и тут же прерывается.
- Поле “Имя пользователя”. Существует ли учётная запись, из этой ли она базы, не заблокирована ли. После переноса обработки или базы эта проверка идёт первой.
- Привязка к команде. Если задание запускает команду дополнительной обработки, убедитесь, что оно ссылается на действующую команду. Иначе запись задания есть, а выполнять нечего.
- Расписание. Его стоит смотреть последним. В разборе ниже отличие расписаний между двумя базами нашлось и причиной не оказалось.
Когда задание отменяет сама БСП
Большинство типовых заданий на библиотеке стандартных подсистем, в том числе запуск дополнительных обработок по расписанию, начинают работу с общей проверки ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания. Если она решает, что запускать сейчас нельзя, задание прерывается, а причина остаётся в тексте ошибки фонового задания. По коду УТ 11.5.22.67 причин пять:
| Когда прерывает | Начало текста ошибки |
|---|---|
| обновление программы не завершено | ”Вход в приложение временно невозможен в связи с обновлением на новую версию” |
| в распределённой базе потеряна связь с главным узлом | ”Вход в приложение временно невозможен до восстановления связи с главным узлом” |
| сменилась строка соединения, а задание работает с внешними ресурсами | ”Изменилась строка соединения информационной базы. Возможно информационная база была перемещена” |
| задание недоступно по функциональным опциям | ”Регламентное задание недоступно по функциональным опциям” |
| не заданы начальные региональные настройки | ”Регламентное задание недоступно до установки начальных региональных настроек” |
В третьем и четвёртом случае БСП не только прерывает запуск, но и отключает задание. Если включённое задание вдруг оказалось выключенным, ищите эти два текста в истории его фоновых заданий. Первый обычно всплывает после копирования или переноса базы.
Случай: шестнадцать месяцев под учёткой из другой базы
Задание выгружало продажи партнёру. Использование включено, расписание каждый день с 06:00 до 10:30 раз в час, ошибок в журнале ноль. В истории механизма 580 записей, и все поставлены ручными прогонами: автоматических нет ни за один день с апреля 2025 года.
Первой версией было “задание видит недавний успех и пропускает запуск”. Её сняли замером: удалили запись об успешном прогоне, руками довезли данные за нужный день и стали ждать. Четыре дня ни одного запуска.
Дальше сравнивали с соседней базой, где тот же код срабатывает каждый день в 23:45. Запрет заданий в кластере был снят, в модели сервиса база не работала, привязка команды оказалась верной, права на внешние соединения совпали у обеих баз. Отличие нашлось в расписании: у соседа простое “раз в день”, у нас окно с повтором. Причиной оно тоже не было.
Решило поле “Имя пользователя”. Там стояла учётная запись из базы, откуда обработку когда-то скопировали вместе с настройками задания. Поле поправили, задание пошло само, а разрыв за дни разбора закрыли вручную: 271 пакет без единой ошибки. Как платформа обрабатывает запуск под учётной записью, которой нет в базе, мы изнутри не разбирали: причина названа по результату.
Контроль снаружи
Задание, которое не стартовало, не напишет ни ошибки, ни отметки о работе. Любая диагностика внутри его кода до этого места просто не доживает. Такой отказ видит только проверка снаружи: дата последнего изменения данных, которые задание обязано менять, рядом с сегодняшней датой. Хватит отчёта на две строки или пункта в мониторинге 1С, лишь бы проверка жила вне задания, за которым следит.