Как сбросить дату последнего выполнения регламентного задания в 1С, если она оказалась в будущем?

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

В процессе администрирования баз данных 1С, особенно в файловом варианте, специалисты иногда сталкиваются с неприятной ситуацией: из-за технических работ или ошибок администрирования на сервере или рабочем ПК переводится системная дата на несколько дней или даже лет вперед. Если в этот момент срабатывает планировщик, регламентное задание фиксирует дату своего последнего выполнения «в будущем». После возврата системного времени в актуальное состояние задание перестает запускаться, так как система считает, что время очередного запуска еще не наступило. Проблема усугубляется тем, что свойство ПоследнееЗадание.Начало доступно только для чтения, и простым интерактивным изменением его не поправить.

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

Метод 1. Манипуляция с флагом использования для дополнительных обработок

Проанализируем ситуацию, когда регламентное задание создано не в конфигураторе, а является частью механизма «Дополнительные отчеты и обработки». В современных конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0, такие задания имеют свои особенности управления.

Для исправления ситуации выполним следующие шаги:

  1. Перейдем в раздел Администрирование — Печатные формы, отчеты и обработки.
  2. Откроем список Дополнительные отчеты и обработки.
  3. Найдем в списке нужную обработку, выполнение которой «зависло» из-за даты.
  4. В карточке обработки перейдем к настройке расписания.
  5. Нам необходимо выполнить цикл перезаписи: сначала снимем галочку Выполнять команду по расписанию, нажмем Записать и закрыть.
  6. Затем снова откроем карточку, установим галочку обратно и снова сохраним объект.

Почему это помогает? При такой интерактивной перезаписи в программном коде срабатывают обработчики событий, которые физически пересоздают запись в справочнике ДополнительныеОтчетыИОбработки и обновляют связанные с ним записи планировщика, что часто приводит к очистке метаданных о последнем запуске.

Метод 2. Хитрость с установкой даты окончания в расписании

Если стандартное включение и выключение задания в общем списке регламентных заданий не приносит результата, рассмотрим более глубокий способ «обмана» планировщика через настройки самого расписания.

Разберем алгоритм действий:

  1. Зайдем в стандартную форму управления регламентными заданиями (через консоль или функции для технического специалиста).
  2. Откроем настройку расписания проблемного задания.
  3. В окне настройки расписания найдем поле Дата окончания. Установим там дату, которая заведомо находится в прошлом (например, вчерашний день по отношению к текущей реальной дате).
  4. Сохраним изменения. В этот момент планировщик 1С анализирует объект и помечает его как «Завершенное», так как дата окончания уже прошла.
  5. Сразу после этого снова зайдем в расписание, очистим поле Дата окончания (или вернем нужное значение) и сохраним задание.

Этот метод заставляет систему заново инициализировать счетчик следующего запуска, игнорируя предыдущую ошибочную запись о выполнении, так как статус задания был принудительно изменен.

Метод 3. Программный сброс через обновление объекта расписания

Когда интерактивные методы бессильны, на помощь приходит встроенный язык 1С. Мы можем программно «обнулить» расписание, что приведет к перегенерации внутренней структуры задания в таблицах базы данных (например, в таблице JOBS для файловых баз).

Посмотрим на пример кода, который можно выполнить во внешней обработке или через консоль кода:


// Имя задания должно соответствовать имени в метаданных
ИмяЗадания = "ОбновлениеИндексаПолнотекстовогоПоиска"; 
Задание = РегламентныеЗадания.НайтиПредопределенное(Метаданные.РегламентныеЗадания[ИмяЗадания]);

Если Задание <> Неопределено Тогда
    // Сохраняем текущее расписание во временную переменную
    СтароеРасписание = Задание.Расписание;
    
    // Очищаем расписание, создавая новый пустой объект
    Задание.Расписание = Новый РасписаниеРегламентногоЗадания;
    Задание.Записать();
    
    // Возвращаем настройки расписания обратно
    Задание.Расписание = СтароеРасписание;
    Задание.Записать();
    
    Сообщить("Состояние задания успешно сброшено");
КонецЕсли;

Рассмотрим подробнее, что происходит: при записи пустого расписания 1С удаляет информацию о планировании данного задания. Последующая запись старого расписания создает «чистую» запись, где дата последнего выполнения еще не заполнена, и задание начнет выполняться согласно текущему системному времени.

Метод 4. Использование внешней «Консоли заданий»

Проанализируем возможности специализированных инструментов. Стандартный интерфейс БП 3.0 часто скрывает технические детали. Рекомендуется использовать внешнюю обработку «Консоль заданий» (ее можно найти на дисках ИТС или в составе инструментов разработчика).

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

Метод 5. Очистка кэша и работа с файловой базой

В файловом варианте 1С (файл 1Cv8.1CD) работа планировщика тесно связана с сеансом пользователя, который выполняет роль обработчика заданий. Если дата «зависла», проанализируем состояние кэша.

Выполним следующие регламентные действия:

  1. Полностью завершим все сеансы работы с базой данных.
  2. Удалим временные файлы (кэш), расположенные в директориях %AppData%\Local\1C\1Cv8 и %AppData%\Roaming\1C\1Cv8.
  3. В некоторых случаях помогает радикальный маневр: на короткое время перевести дату на ПК обратно в то самое «будущее», запустить 1С, полностью отключить (снять галочку Использование) у задания, вернуть дату назад и включить задание снова.

Метод 6. Изменение метаданных (для предопределенных заданий)

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

  1. Откроем базу в режиме Конфигуратор.
  2. Найдем проблемное регламентное задание в дереве метаданных.
  3. Временно снимем у него свойство Предопределенное (установим значение Ложь).
  4. Выполним обновление конфигурации базы данных (F7). В этот момент 1С физически удалит запись об этом задании из системных таблиц, так как оно больше не является частью структуры.
  5. Вернем свойство Предопределенное обратно в значение Истина.
  6. Снова обновим конфигурацию.

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

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

← На главную