При настройке автоматических процессов в 1С, таких как перепроведение документов, мы часто сталкиваемся с тем, что регламентные задания ведут себя иначе, чем ожидалось. В частности, это касается ситуаций, когда задание прерывается из-за обслуживания базы данных (например, создания резервной копии). Давайте разберем, почему штатные механизмы 1С не всегда перезапускают процесс автоматически и как правильно настроить расписание, чтобы избежать пропусков.
Первое, что важно уяснить: механизм «количество и интервал при аварийном завершении» — это инструмент для обработки критических ошибок. Он срабатывает, если фоновый процесс завершился нештатно (упал сервер или произошел сбой процесса rphost). Если же сеанс завершается штатно — например, при завершении работы пользователей для выполнения регламентных работ или бэкапа — система воспринимает это как нормальное завершение или приостановку, а не как аварию.
Соответственно, после завершения бэкапа задание не «видит» причины для немедленного перезапуска по механизму отказоустойчивости, так как с точки зрения платформы оно свою задачу выполнило или корректно завершилось. Оно переходит в режим ожидания следующего запуска согласно расписанию.
Основная причина, по которой задание не возобновляет работу, часто кроется в настройках самого расписания. Если вы устанавливаете диапазон дат «с 18 ноября по 18 ноября», платформа считает, что по истечении этих суток задание теряет свою актуальность. Даже если технически задание не было выполнено в запланированное время, при наступлении следующего дня оно становится «неактуальным» для планировщика.
Давайте разберем по шагам, как исправить эту логику:
Чтобы ваше задание по перепроведению документов работало как часы, рассмотрим правильную конфигурацию:
Пример логики, которую стоит использовать внутри модуля обработки, чтобы она была «умной»:
Процедура ВыполнитьПерепроведение()
ДатаНачала = ТекущаяДата() - 86400; // Проверяем документы за сутки
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка ИЗ Документ.РеализацияТоваровУслуг
|ГДЕ Проведен = ЛОЖЬ И Дата > &ДатаНачала";
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Результат = Запрос.Выполнить().Выгрузить();
Для Каждого Строка Из Результат Цикл
// Проводим документ
ДокОбъект = Строка.Ссылка.ПолучитьОбъект();
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЦикла;
КонецПроцедуры
Резюмируя вышесказанное: не пытайтесь использовать механизм перезапуска при аварийном завершении как инструмент для восстановления после ночного бэкапа. Это приведет лишь к логическим ошибкам. Перенесите всю логику контроля выполнения в код самой обработки, а расписание задайте как «бессрочное» с ежедневным интервалом. Таким образом, даже если выполнение задания будет пропущено или прервано, при следующем плановом запуске система сама определит объем необходимой работы и успешно завершит процесс.