Логика оповещения пользователю следующая: обновление остатка времени каждую минуту. Если осталось меньше 60 секунд, обновление переключается на каждую секунду.
К публикации прикреплена конфигурация с отчетом и внешний отчет. Ниже текст модуля формы отчета, который реализует механизм автообновления.
#Область СОБЫТИЯ_ФОРМЫ
&НаКлиенте
Процедура ПриОткрытии(Отказ)
ЗапуститьАвтообновление();
КонецПроцедуры
#КонецОбласти
#Область СОБЫТИЯ_ЭЛЕМЕНТОВ
&НаКлиенте
Процедура АвтообновлениеВключеноПриИзменении(Элемент)
ЗапуститьАвтообновление();
КонецПроцедуры
&НаКлиенте
Процедура КоличествоМинутАвтообновленияПриИзменении(Элемент)
ЗапуститьАвтообновление();
КонецПроцедуры
#КонецОбласти
#Область АВТООБНОВЛЕНИЕ
&НаКлиенте
// Основная процедура запуска автообновления
//
// Параметры:
// - -
//
Процедура ЗапуститьАвтообновление()
Элементы.ГруппаАвтообновление.Доступность = АвтообновлениеВключено;
Если АвтообновлениеВключено
И КоличествоМинутАвтообновления Тогда
Элементы.ОстатокСекундКОбновлениюСтрока.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
ОстатокСекундКОбновлению = КоличествоМинутАвтообновления * 60;
ОстатокСекундКОбновлению = ОстатокСекундКОбновлению - 1;
Элементы.ОстатокСекундКОбновлению.МаксимальноеЗначение = ОстатокСекундКОбновлению;
ОбновитьОтображениеОстаткаВремени();
ЗапуститьОбработчикОжиданияОбновления(ОстатокСекундКОбновлению > 60);
Иначе
Элементы.ОстатокСекундКОбновлениюСтрока.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ОстатокСекундКОбновлениюСтрока = НСтр(
"ru = 'Обновление отключено.';"
"uk = 'Оновлення виключене.'");
ОтключитьОбработчикОжидания("Подключаемый_СкомпоноватьРезультат");
КонецЕсли;
КонецПроцедуры // ЗапуститьАвтообновление
&НаКлиенте
// Процедура запуска обработчика ожидания формирования отчета
//
// Параметры:
// ВМинутах - Булево - Ложь: отчет будет сформирован менее чем через минуту
//
Процедура ЗапуститьОбработчикОжиданияОбновления(Знач ВМинутах = Истина)
ПодключитьОбработчикОжидания("Подключаемый_СкомпоноватьРезультат", 1 * ?(ВМинутах, 60, 1), Истина);
КонецПроцедуры // ЗапуститьОбработчикОжидания1Минута
&НаКлиенте
// Основной обработчик ожидания который в указанное время выполнит команду 'СкомпоноватьРезультат'
//
// Параметры:
// - -
//
Процедура Подключаемый_СкомпоноватьРезультат() Экспорт
ОстатокСекундКОбновлению = ОстатокСекундКОбновлению - 1;
ОтключитьОбработчикОжидания("Подключаемый_СкомпоноватьРезультат");
Если ОстатокСекундКОбновлению >= 60 Тогда
ОбновитьОтображениеОстаткаВремени();
ЗапуститьОбработчикОжиданияОбновления();
ИначеЕсли ОстатокСекундКОбновлению < 0 Тогда
ОбновитьОтображениеОстаткаВремени();
СкомпоноватьРезультат(РежимКомпоновкиРезультата.Фоновый);
ДатаПоследнегоАвтоФормирования = ТекущаяДата();
ЗапуститьАвтообновление();
Иначе
ЗапуститьОбработчикОжиданияОбновления(Ложь);
ОбновитьОтображениеОстаткаВремени();
КонецЕсли;
КонецПроцедуры // СкомпоноватьРезультат
&НаКлиенте
// Обновление информационного сообщения
//
// Параметры:
// - -
//
Процедура ОбновитьОтображениеОстаткаВремени()
МинутКОбновлению = Цел(ОстатокСекундКОбновлению / 60);
Если МинутКОбновлению Тогда
ОстатокСекундКОбновлениюСтрока = "<" + (МинутКОбновлению + 1) + НСтр(
"ru = ' мин.';"
"ik = ' хв. '");
ИначеЕсли ОстатокСекундКОбновлению <= 0 Тогда
ОстатокСекундКОбновлениюСтрока = НСтр(
"ru = 'Формируется...';"
"uk = 'Формується...'");
Иначе
ОстатокСекундКОбновлениюСтрока = "~" + ОстатокСекундКОбновлению + " с.";
КонецЕсли;
КонецПроцедуры // ОбновитьОтображениеОстаткаМинут
#КонецОбласти
Платформа: 8.3.10.1877. Режим совместимости 8.2.16.