При автоматизации рутинных операций часто возникает задача запуска внешних обработок по расписанию через планировщик задач Windows (Task Scheduler). Однако в реальной практике может потребоваться универсальное решение: когда эта же обработка запускается автоматически по ночам, но при ручном открытии пользователем в дневное время система дает возможность приостановить выгрузку, проверить настройки или просмотреть подготовленные данные.
Рассмотрим подробнее, как реализовать механизм отложенного выполнения или паузы с помощью таймера, чтобы пользователь успел снять флаг Автовыполнение до того, как обработка начнет основной алгоритм.
Разберем классический подход с использованием управляемой формы и системных методов ПодключитьОбработчикОжидания и ОтключитьОбработчикОжидания. Этот вариант позволяет отобразить форму обработки, запустить обратный отсчет и дать пользователю интерактивную возможность снять флаг автовыполнения.
Проанализируем алгоритм работы формы:
Автовыполнение = Истина и подключается обработчик ожидания.Автовыполнение, обработчик ожидания отключается, а выполнение фоновой задачи отменяется.Посмотрим на пример реализации кода в модуле формы:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Автовыполнение Тогда
// Подключаем процедуру, которая сработает через 10 секунд однократно
ПодключитьОбработчикОжидания("ВыполнитьАвтоматическийЗапуск", 10, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АвтовыполнениеПриИзменении(Элемент)
Если Автовыполнение Тогда
ПодключитьОбработчикОжидания("ВыполнитьАвтоматическийЗапуск", 10, Истина);
Иначе
ОтключитьОбработчикОжидания("ВыполнитьАвтоматическийЗапуск");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьАвтоматическийЗапуск()
Если Автовыполнение Тогда
ВыполнитьОсновнойАлгоритм();
КонецЕсли;
КонецПроцедуры
Важно знать: метод ПодключитьОбработчикОжидания выполняется только в момент «состояния покоя» клиентского приложения (когда на клиенте не выполняются другие длительные вычисления). При закрытии формы обработчики ожидания, привязанные к ней, отключаются автоматически.
Второй способ заключается в использовании встроенных возможностей системных диалогов 1С. Функция Вопрос() позволяет задать интервал автоответа в секундах. Если пользователь не выбирает вариант за указанный таймаут, диалоговое окно закрывается с результатом по умолчанию.
Выясним, как это выглядит в коде процедуры обработки:
&НаКлиенте
Процедура ОбработатьЗапускСТаймаутом()
ТаймаутСекунд = 10;
// Функция Вопрос принимает таймаут третьим параметром
КодВозврата = Вопрос("Отменить автоматическое выполнение и перейти к настройкам?",
РежимДиалогаВопрос.ДаНет,
ТаймаутСекунд,
КодВозвратаДиалога.Нет);
Если КодВозврата = КодВозвратаДиалога.Да Тогда
// Пользователь решил приостановить автоматическую работу
Автовыполнение = Ложь;
Возврат;
КонецЕсли;
// Если время истекло или выбран ответ "Нет", выполняем алгоритм
ВыполнитьОсновнойАлгоритм();
КонецПроцедуры
Этот метод отличается простотой, однако следует учитывать, что использование модальных и блокирующих окон в неинтерактивных сеансах планировщика Windows может вызвать проблему, если задача запускается под системной учетной записью без рабочего стола.
Если задача заключается только в том, чтобы разделить автоматический запуск планировщика и обычный интерактивный запуск пользователем, наибоее надежным и архитектурно правильным решением является использование параметра командной строки /C.
Разберем по шагам, как это настроить:
/C "AutoStart".ПараметрЗапуска."AutoStart", обработка выполняется в фоновом режиме без задержек и завершает работу сеанса.Пример кода для модуля формы с проверкой параметра запуска:
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если НСтр(ПараметрЗапуска) = "AutoStart" Тогда
ВыполнитьОсновнойАлгоритм();
// Принудительно завершаем сеанс 1С после выполнения регламентной задачи
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
КонецПроцедуры
При настройке автоматического выполнения внешних обработок через командную строку обязательно соблюдайте следующие правила:
1. Завершение сеанса: Всегда вызывайте метод ЗавершитьРаботуСистемы(Ложь) после выполнения алгоритма при автозапуске, иначе процессы 1cv8c.exe останутся висеть в диспетчере задач Windows.
2. Сохранение настроек: Для сохранения состояний флажков и реквизитов формы между запусками используйте встроенные свойства формы СохранятьДанныеНастроек и АвтоматическоеСохранениеДанныхВНастройках либо храните параметры в формате JSON с помощью объектов ЗаписьJSON и ЧтениеJSON.