В процессе администрирования баз данных 1С, особенно в файловом варианте, специалисты иногда сталкиваются с неприятной ситуацией: из-за технических работ или ошибок администрирования на сервере или рабочем ПК переводится системная дата на несколько дней или даже лет вперед. Если в этот момент срабатывает планировщик, регламентное задание фиксирует дату своего последнего выполнения «в будущем». После возврата системного времени в актуальное состояние задание перестает запускаться, так как система считает, что время очередного запуска еще не наступило. Проблема усугубляется тем, что свойство ПоследнееЗадание.Начало доступно только для чтения, и простым интерактивным изменением его не поправить.
В данной статье мы разберем несколько эффективных методов решения этой проблемы, начиная от простых манипуляций с интерфейсом и заканчивая программным сбросом настроек планировщика.
Проанализируем ситуацию, когда регламентное задание создано не в конфигураторе, а является частью механизма «Дополнительные отчеты и обработки». В современных конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0, такие задания имеют свои особенности управления.
Для исправления ситуации выполним следующие шаги:
Почему это помогает? При такой интерактивной перезаписи в программном коде срабатывают обработчики событий, которые физически пересоздают запись в справочнике ДополнительныеОтчетыИОбработки и обновляют связанные с ним записи планировщика, что часто приводит к очистке метаданных о последнем запуске.
Если стандартное включение и выключение задания в общем списке регламентных заданий не приносит результата, рассмотрим более глубокий способ «обмана» планировщика через настройки самого расписания.
Разберем алгоритм действий:
Этот метод заставляет систему заново инициализировать счетчик следующего запуска, игнорируя предыдущую ошибочную запись о выполнении, так как статус задания был принудительно изменен.
Когда интерактивные методы бессильны, на помощь приходит встроенный язык 1С. Мы можем программно «обнулить» расписание, что приведет к перегенерации внутренней структуры задания в таблицах базы данных (например, в таблице JOBS для файловых баз).
Посмотрим на пример кода, который можно выполнить во внешней обработке или через консоль кода:
// Имя задания должно соответствовать имени в метаданных
ИмяЗадания = "ОбновлениеИндексаПолнотекстовогоПоиска";
Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания[ИмяЗадания]);
Если Задание <> Неопределено Тогда
// Сохраняем текущее расписание во временную переменную
СтароеРасписание = Задание.Расписание;
// Очищаем расписание, создавая новый пустой объект
Задание.Расписание = Новый РасписаниеРегламентногоЗадания;
Задание.Записать();
// Возвращаем настройки расписания обратно
Задание.Расписание = СтароеРасписание;
Задание.Записать();
Сообщить("Состояние задания успешно сброшено");
КонецЕсли;
Рассмотрим подробнее, что происходит: при записи пустого расписания 1С удаляет информацию о планировании данного задания. Последующая запись старого расписания создает «чистую» запись, где дата последнего выполнения еще не заполнена, и задание начнет выполняться согласно текущему системному времени.
Проанализируем возможности специализированных инструментов. Стандартный интерфейс БП 3.0 часто скрывает технические детали. Рекомендуется использовать внешнюю обработку «Консоль заданий» (ее можно найти на дисках ИТС или в составе инструментов разработчика).
В консоли доступны функции, которые отсутствуют в обычном пользовательском режиме:
РегламентноеЗадание.В файловом варианте 1С (файл 1Cv8.1CD) работа планировщика тесно связана с сеансом пользователя, который выполняет роль обработчика заданий. Если дата «зависла», проанализируем состояние кэша.
Выполним следующие регламентные действия:
%AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8.Если проблема возникла с предопределенным заданием, которое невозможно удалить обычным способом, и база позволяет вносить изменения в конфигурацию, можно прибегнуть к следующему алгоритму:
Важно: этот метод гарантированно создает «абсолютно новую» запись для задания, очищая всю историю его запусков и любые ошибочные даты. Однако помните, что после этой процедуры настройки расписания могут сброситься к значениям по умолчанию, заданным в Конфигураторе, и их потребуется настроить заново в пользовательском режиме.
Выяснив причину и выбрав подходящий метод, вы сможете оперативно восстановить автоматическую работу системы без необходимости пересоздания всей базы данных или ручного запуска процедур.