Создаём форму с реквизитами:
- таблица значений «ТблВыполнитьПоВремени» с колонками:
Дата – обязательная колонка (в ней дата и время запуска)
Параметр1 – колонки с параметрами необходимыми для выполнения процедуры
Параметр2 - … - «НомерТаймаута» тип Число 10,0
- Команды:
«ВыполнитьПоВремени»
«ВыполнитьПоВремениОткл»
Модуль формы:
#Область Планировщик
&НаКлиенте
Процедура ОбработатьОжидание()
//Здесь текст вашей процедуры
//...
//Доступ к нужным параметрам через:
//ТблВыполнитьПоВремени[НомерТаймаута].Параметр1
ТекстСообщения = НСтр("ru = 'Выполняется прооцедура с параметром: "+ТблВыполнитьПоВремени[НомерТаймаута].Параметр1+" !'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
//...
ТекстСообщения = НСтр("ru = 'Выполнено задание назначенное на "+ТблВыполнитьПоВремени[НомерТаймаута].Дата+" в "+ТекущаяДата()+" !'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
НомерТаймаута = НомерТаймаута+1; //Передвигаемся на следующее задание
Если НомерТаймаута < ТблВыполнитьПоВремени.Количество() Тогда //вычисляем время для выполнения следующего задания
ПодключитьОбработчик(ВычислитьТаймаут(ТблВыполнитьПоВремени[НомерТаймаута].Дата)); //Запускаем следующее задание
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодключитьОбработчик(вхВремя)
Если вхВремя<1 Тогда
вхВремя = 1;
КонецЕсли;
ПодключитьОбработчикОжидания("ОбработатьОжидание", вхВремя, Истина);//Подключаем обработчик один раз
ТекстСообщения = НСтр("ru = 'Задание назначенное на "+ТблВыполнитьПоВремени[НомерТаймаута].Дата+" будет выполнено через "+вхВремя+" секунд!'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПроцедуры
&НаКлиенте
Функция ВычислитьТаймаут(вхДата)
Если вхДата < ТекущаяДата() Тогда //Если время запуска уже прошло
ТаймаутЗапуска = 1; //Тогда запуск через 1 секунду
иначе
ТаймаутЗапуска = вхДата - ТекущаяДата(); //Вычисляем колво секунд для запуска
КонецЕсли;
Возврат ТаймаутЗапуска;
КонецФункции
&НаКлиенте
Процедура ВыполнитьПоВремени(Команда) //Кнопка запуска
Если ТблВыполнитьПоВремени.Количество()>0 Тогда
НомерТаймаута = 0;
ПодключитьОбработчик(ВычислитьТаймаут(ТблВыполнитьПоВремени[НомерТаймаута].Дата));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьПоВремениОткл(Команда) //Кнопка прервать
ОтключитьОбработчикОжидания("ОбработатьОжидание");
ТекстСообщения = НСтр("ru = 'Выполнение заданий прервано!'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПроцедуры
#КонецОбласти
Как переделать планировщик на таймер с периодичностью запуска, думаю, объяснять не нужно.
Добавил файл обработки, содержащей данный модуль.
Разрабатывалась и тестировалась:
1С:Предприятие 8.3 (8.3.9.2170)
Розница, редакция 2.2 (2.2.5.25)