В практике администрирования систем на базе «1С:Предприятие 8» нередко возникают ситуации, когда после изменения системного времени на сервере или локальном компьютере регламентные задания перестают запускаться автоматически. Даже после возврата корректной даты планировщик может «замереть» и игнорировать расписание. Проанализируем, почему это происходит, выясним, где именно хранятся данные о выполнении заданий, и разберем способы восстановления нормальной работы системы.
Для начала разберем важный нюанс: информация о регламентных заданиях хранится в двух разных местах в зависимости от того, что именно нам нужно узнать. Проанализируем эти уровни хранения.
1. История выполнения (Журнал регистрации)
Если нам нужно узнать, когда задание запускалось в прошлом и с каким результатом завершилось, мы обращаемся к Журналу регистрации. В файловом варианте базы данных он физически находится в папке 1Cv8Log в каталоге базы и представляет собой файл с расширением *.lgd (в современных версиях платформы на основе SQLite). Здесь фиксируются события: Старт, Успешное завершение или Ошибка. Однако стоит помнить: если задание не запустилось вовсе из-за сбоя планировщика, в журнале регистрации записей за текущий период просто не будет.
2. Оперативное состояние (Системные таблицы базы данных)
Информация о том, когда задание должно запуститься в следующий раз, хранится непосредственно в базе данных. В клиент-серверном варианте это специальная системная таблица _ScheduledJobs. Здесь содержатся настройки, признаки включения и, самое главное, расчетный момент следующего старта. Именно эта запись блокирует работу, если дата на компьютере временно была переведена в будущее.
Разберем ситуацию, описанную в вопросе: на компьютере была установлена дата «август месяц» (будущее время). Планировщик заданий 1С работает по следующему алгоритму:
_ScheduledJobs как, например, «15 августа».Таким образом, простое исправление системных часов не помогает — нам нужно принудительно обновить «Дату следующего запуска» внутри самой 1С.
Самый быстрый и интерактивный способ — это перезапись задания. Посмотрим на алгоритм действий:
Консоль регламентных заданий (стандартная обработка с диска ИТС или встроенная в современные конфигурации БСП).При записи объекта РегламентноеЗадание платформа принудительно инициирует пересчет времени следующего запуска, опираясь на текущую (уже исправленную) системную дату. После этого планировщик увидит, что время старта пришло, и запустит процесс.
Если заданий много или вы хотите автоматизировать процесс «реанимации» планировщика, можно воспользоваться встроенным языком 1С. Рассмотрим пример кода, который обновит все регламентные задания в базе:
ВыборкаЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Задание Из ВыборкаЗаданий Цикл
Попытка
// Перезаписываем задание для пересчета времени следующего старта
Задание.Записать();
Сообщить("Задание обновлено: " + Задание.Метаданные.Имя);
Исключение
Сообщить("Ошибка при обновлении задания: " + ОписаниеОшибки());
КонецПопытки;
КонецЦикла;
Этот метод позволяет сбросить некорректные ожидания планировщика для всех процессов сразу. Объекты РегламентноеЗадание обновят свои внутренние счетчики в соответствии с текущим временем сервера.
Проанализируем разницу в поведении планировщиков, так как это влияет на диагностику:
1Cv8.1CD.Менеджер кластера сервера 1С. Планировщик ориентируется на время сервера приложений, а не клиентского компьютера. Однако, если даты на сервере приложений и сервере СУБД (SQL) сильно расходятся, это может привести к коллизиям при записи данных в таблицу _ScheduledJobs.Чтобы избежать подобных проблем в будущем, рекомендуется:
NTP на всех серверах и рабочих станциях, где запущена 1С.Подводя итог, отметим: хотя история запусков и хранится в журнале регистрации .lgd, причина остановки всегда кроется в системных данных внутри самой базы данных. Перезапись задания — это универсальный ключ к «сбросу» ошибочных таймеров планировщика.