При разработке функционала в платформе «1С:Предприятие 8.3» разработчики часто сталкиваются с ситуацией: в Конфигураторе создано новое регламентное задание, установлены флаг использования и расписание, изменения внесены в конфигурацию базы данных, однако при открытии обработки «Консоль регламентных заданий» новое задание не отображается в списке. Разберем подробно, почему так происходит и как правильно настроить отображение и запуск задания.
Проанализируем механику работы платформы 1С с регламентными заданиями. Объект, создаваемый в дереве метаданных Конфигуратора, — это лишь шаблон (описание свойства и метода). В информационной базе физически выполняются экземпляры регламентных заданий, хранящиеся в специальных служебных таблицах.
Ключевую роль играет свойство Предопределенное в свойствах объекта метаданных:
Если планируется, что у задания будет строго один экземпляр в базе данных и его параметры задаются на этапе разработки, выполним следующие шаги:
Общие -> Регламентные задания.Истина (поставим галочку).Имя метода, Использование и задано Расписание.После обновления конфигурации откроем консоль заданий в режиме «1С:Предприятие» — созданное задание появится в списке активных.
Если задание создано как непредопределенное (флаг Предопределенное = Ложь), его можно добавить интерактивно. Это удобно, если требуется запускать несколько экземпляров одного и того же задания с разными параметрами или расписанием:
В случаях, когда непредопределенное задание должно создаваться автоматически при определенных событиях (например, при первом старте системы или включении функциональной опции), используем программный код на языке 1С:
// Проверим наличие и создадим экземпляр непредопределенного регламентного задания
ИмяЗадания = "МоеРегламентноеЗадание";
МассивЗаданий = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Новый Структура("Метаданные", Метаданные.РегламентныеЗадания[ИмяЗадания]));
Если МассивЗаданий.Количество() = 0 Тогда
НовоеЗадание = РегламентныеЗадания.СоздатьРегламентноеЗадание(ИмяЗадания);
НовоеЗадание.Использование = Истина;
НовоеЗадание.Записать();
КонецЕсли;
Метод РегламентныеЗадания.СоздатьРегламентноеЗадание() принимает имя регламентного задания из метаданных и записывает его экземпляр в базу данных.
Для корректного запуска регламентного задания проанализируем требования к процедуре, указанной в свойстве ИмяМетода:
Сервер.Экспорт.Предупреждение(), Вопрос() или открытие форм), так как фоновое задание выполняется в фоновом сеансе без участия пользователя.Посмотрим на особенности файлового варианта информационной базы. В отличие от клиент-серверного режима, где за планирование отвечает служба кластера серверов, в файловой базе регламентные задания не выполняются автоматически «в фоне» сами по себе.
Для выполнения заданий в файловой базе необходимо, чтобы был запущен хотя бы один сеанс клиентского приложения (или специальный технический сеанс). Планировщик файловой базы проверяет наличие задач с определенной периодичностью (обычно раз в 30–60 секунд).