Ситуация, когда годами работающее регламентное задание внезапно перестает запускаться автоматически в одном из узлов распределенной информационной базы (РИБ), — классическая проблема для файловых вариантов 1С. При этом ручной запуск через кнопку "Выполнить сейчас" или запуск через внешнюю обработку часто проходит успешно. Это вводит в заблуждение, так как код задания остается рабочим, но системный механизм вызова дает сбой. Рассмотрим подробно причины такого поведения и разберем по шагам методы восстановления работоспособности планировщика.
В отличие от клиент-серверного варианта, где за расписание отвечает сервер приложений 1С:Предприятия, в файловой базе механизм регламентных заданий требует наличия активного сеанса. Разберем этот момент подробнее. В файловой базе задания выполняет либо специально выделенный сеанс, либо тот пользователь, который зашел в базу первым. Если в конкретном магазине (точке РИБ) изменился порядок входа сотрудников или первым в базу заходит пользователь с ограниченными правами, планировщик может не инициализироваться должным образом.
Проанализируем также влияние публикации базы на веб-сервере (IIS/Apache). Если база опубликована, выполнение заданий может зависеть от параметра AllowExecuteScheduledJobs в файле настроек публикации default.vrd. Проверьте этот параметр: он должен иметь значение true. Также важно учитывать, что если к базе долго никто не обращается через веб-интерфейс, пул приложений IIS может "заснуть", что приведет к остановке всех фоновых процессов.
Выясним причину возможной блокировки на уровне всей информационной базы. Иногда после аварийного завершения работы или в результате некорректного обновления в системных установках включается запрет на выполнение регламентных заданий. Даже если в интерфейсе галочка "Включено" для конкретного задания стоит, общая блокировка будет приоритетнее.
Для проверки состояния блокировки выполним следующий код:
Блокировка = ПолучитьБлокировкуРегламентныхЗаданий();
Если Блокировка Тогда
Сообщить("Внимание: Выполнение регламентных заданий заблокировано на уровне базы!");
КонецЕсли;
Если вы обнаружили, что блокировка установлена, ее необходимо снять программно:
УстановитьБлокировкуРегламентныхЗаданий(Ложь);
Рассмотрим ситуацию, когда задание не запускается, потому что система "считает", что предыдущая итерация еще не завершена. В файловых базах при "вылете" сеанса статус задания в таблицах базы данных может застрять в состоянии Выполняется. Планировщик видит, что задание активно, и не запускает новое по расписанию.
Проанализируем список текущих фоновых заданий. Для этого удобно использовать консоль заданий или программный перебор:
Отбор = Новый Структура;
Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
СписокЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
Для Каждого Задание Из СписокЗаданий Цикл
// Проверяем по метаданным или имени, наше ли это задание
Если Задание.Наименование = "ИмяВашегоЗадания" Тогда
Сообщить("Найдено зависшее задание от " + Задание.Начало);
// Попробуем отменить его
Задание.Отменить();
КонецЕсли;
КонецЦикла;
Одной из самых действенных мер является очистка физического кэша планировщика. В папке с данными приложения на компьютере, где работает кассовый узел, существует подкаталог 1Cv8JobScheduler. В нем хранятся служебные файлы с расписаниями и состояниями очередей. Посмотрим на алгоритм очистки:
%AppData%\1C\1cv8\идентификатор_базы).1Cv8JobScheduler.В распределенных системах иногда случается "затирание" внутренних идентификаторов (UUID) объектов метаданных или данных. Если задание перестало работать только в одной точке РИБ, возможно, произошел сбой синхронизации системных таблиц планировщика. Попробуем обновить регистрацию задания в системе:
1. Зайдите в список регламентных заданий, снимите галочку "Включено" и запишите задание.
2. Измените расписание (например, сдвиньте время на одну минуту) и снова запишите.
3. Включите задание обратно.
Если это не помогло, проанализируем "Дату окончания последнего запуска" в консоли заданий. Если по какой-то причине (например, из-за сбоя системных часов на ПК) там зафиксирована дата из будущего, планировщик будет игнорировать запуски до наступления этого момента. В этом случае поможет только программная очистка истории выполнения или пересоздание задания.
Если ваша база 1С:Розница опубликована на IIS, выясним причину остановки процессов в настройках веб-сервера. Веб-сервер по умолчанию настроен на экономию ресурсов. Разберем, что нужно изменить:
DefaultAppPool или NetworkService). У этого пользователя должен быть доступ к сетевым ресурсам, если ваше задание обращается к внешним HTTP-сервисам.Важно помнить, что когда вы нажимаете "Выполнить сейчас", код выполняется в контексте вашего текущего сеанса с вашими правами. Когда задание запускается планировщиком, оно выполняется в фоновом сеансе. Проанализируем типичную ошибку: если задание обращается к внешним файлам или использует COM-объекты, у системной учетной записи может не быть прав на эти действия, хотя у "Полных прав" пользователя в 1С они есть. Рекомендуется всегда оборачивать основной код регламентного задания в блоки Попытка...Исключение с записью подробной ошибки в ЖурналРегистрации, чтобы увидеть реальную причину падения, если запуск все же происходит, но мгновенно прерывается.
Используя приведенный комплекс мер, мы сможем не только восстановить работу конкретного задания, но и обеспечить стабильность всей системы планирования в распределенной базе данных.