Различить часовой повтор и паузу после окончания работы

Учебные задачи

На фиксированной истории запусков сравниваем отсчёт от начала и отсчёт от завершения предыдущего выполнения.

Где и как запускать

Полный модуль собственной управляемой формы, серверный расчёт без запусков.

Подготовка

  1. Собственная пустая конфигурация УчебнаяКонфигурацияСинтаксиса 8.5.1.1343. Создайте внешнюю обработку с управляемой формой, командой Выполнить и её кнопкой; вставьте полный модуль урока в форму.

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

  3. Расписание создаётся только в памяти. Регламентное задание не создаётся, не записывается и не запускается; действующие расписания базы не читаются и не меняются.

  4. Все даты проверки заданы явно. Вызов без даты зависит от текущего времени и для этих воспроизводимых проверок не используется.

&НаКлиенте
Процедура Выполнить(Команда)
    Сообщить(ПроверитьУчебноеРасписание());
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПроверитьУчебноеРасписание()
    Отчет = Новый Массив;
    Расписание = Новый РасписаниеРегламентногоЗадания;
    Расписание.ВремяНачала = Дата(1, 1, 1, 9, 0, 0);
    Расписание.ВремяКонца = Дата(1, 1, 1, 17, 0, 0);
    Расписание.ПериодПовтораВТечениеДня = 3600;
    Расписание.ПаузаПовтора = 900;
    ПоследнееНачало = Дата(2026, 9, 15, 9, 0, 0);
    ПоследнееОкончание = Дата(2026, 9, 15, 9, 5, 0);
    Отчет.Добавить(Строка(Расписание.ПериодПовтораВТечениеДня = 3600));
    Отчет.Добавить(Строка(Расписание.ПаузаПовтора = 900));
    Отчет.Добавить(Строка(НЕ Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 9, 10, 0), ПоследнееНачало, ПоследнееОкончание)));
    Отчет.Добавить(Строка(НЕ Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 9, 59, 0), ПоследнееНачало, ПоследнееОкончание)));
    Отчет.Добавить(Строка(Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 10, 0, 0), ПоследнееНачало, ПоследнееОкончание)));
    ПозднееОкончание = Дата(2026, 9, 15, 9, 55, 0);
    Отчет.Добавить(Строка(НЕ Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 10, 0, 0), ПоследнееНачало, ПозднееОкончание)));
    Отчет.Добавить(Строка(Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 10, 11, 0), ПоследнееНачало, ПозднееОкончание)));
    Отчет.Добавить(Строка(Расписание.ТребуетсяВыполнение(Дата(2026, 9, 15, 9, 10, 0))));
    Возврат СтрСоединить(Отчет, Символы.ПС);
КонецФункции

Разбор по шагам

  1. ПериодПовтораВТечениеДня=3600 и ПаузаПовтора=900 измеряются в секундах: один час и пятнадцать минут.

  2. Период повтора учитывает начало предыдущего запуска, пауза — его завершение. В 09:59 час от 09:00 ещё не прошёл.

  3. Если работа закончилась только в 09:55, следующий запуск в 10:00 не проходит пятнадцатиминутную паузу; 10:11 находится после неё.

  4. Последний вызов намеренно не передаёт историю. По справке тогда условия повторов не проверяются, как будто запусков/завершений ещё не было.

  5. Пример не измеряет реальную длительность и не завершает процесс: все отметки истории — фиксированные учебные даты.

Как проверить результат

  1. Восемь строк ожидаются Истина. Последняя иллюстрирует пропуск проверки повторов при отсутствии истории.

  2. Уберите дату завершения только для дополнительного самостоятельного опыта: условие паузы перестанет проверяться; не выдавайте это за реальную историю задания.

Ожидаемый результат

Показана практическая разница между периодом начала и минимальной паузой после завершения.

На что обратить внимание

  1. Без даты начала последнего запуска нельзя проверить период повторов честно.

  2. ПаузаПовтора не является принудительным тайм-аутом выполнения; для этого существуют другие свойства.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.