Назначение подсистемы
Как известно, в состав общих объектов конфигурации платформы 1С:Предприятия входят регламентные задания, позволяющие автоматически выполнять процедуры на встроенном языке по расписанию. Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение.
К минусам регламентных заданий можно отнести:
- отсутствие возможности учитывать при настройке расписания выполнения производственный календарь. Допустим, в соответствии с логикой бизнес процесса, задача должна выполняться по определенным рабочим дням недели, с учетом праздников и нерабочих периодов. А в случае, если дата выполнения задачи выпадает на праздничный день, то необходимо перенести выполнение задачи на предыдущий рабочий день.
- отсутствие возможности гибко управлять запуском выполнения задач на пользовательском уровне в режиме 1С:Предприятия. Например, бизнес пользователю требуется отменить выполнение задачи в определенный день. С помощью механизма настройки расписания регламентных заданий это будет сделать достаточно сложно.
- высокая трудоемкость подключения к механизму регламентных заданий справочников, реализующих выполнение периодических задач. Особенно, если требуется не просто подключить справочник к регламентным заданиям, но о обеспечить сопутствующую "обвязку" - вывести журнал работы задачи, дату/время последнего запуска, дату/время последнего успешного запуска и т. д. (в качестве примера см. справочник РассылкиОтчетов из состава БСП) При этом все это придется повторить при настройке других аналогичных справочников.
Разработанная подсистема решает перечисленные выше проблемы при работе со штатным механизмом регламентных заданий.
Подсистема регулярных заданий (далее подсистема) предназначена для выполнения произвольных алгоритмов (задач) по заранее сформированным графикам с учетом производственного календаря. С помощью данной подсистемы возможно подключение различных справочников прикладного решения, предназначенных для выполнение некоторых периодических задач, к графикам их выполнения.
Подсистема использует подсистемы "Календарные графики" и "Графики работы" из состава БСП.
Описание работы с подсистемой
Рассмотрим настройку регулярных заданий на примере, входящего в состав подсистемы, справочника "Задачи регулярных заданий" (далее Задачи). Данный справочник содержит один реквизит - АлгоритмЗадачи, содержащий произвольный текст кода на встроенном языке. При запуске задачи осуществляется выполнение этого кода через метод Выполнить().
Внешний вид формы списка справочника, подключенного к подсистеме, показан следующем на скриншоте.
В форме списка для каждой задачи отображается Дата последнего запуска задачи (со статусом выполнения в виде пиктограммы), Дата последнего успешного запуска задачи. Справа отображается журнал работы задачи.
Кнопки командной панели:
- "Выполнить задачу" запускается выполнение задачи в ручном режиме.
- Создать на основании - Регулярное задание. Задача включается в состав регулярного задания.
- "График работы" - открывается форма редактирования графика работы регулярного задания.
Для настройки выполнения задачи в соответствии с сформированным графиком, необходимо создать на основании элемента справочника объект "Регулярное задание" (пункт меню Создать на основании - Регулярное задание).
Внешний вид формы элемента справочника "Регулярные задания" показан на следующем скриншоте
Рассмотрим подробнее элементы управления формы
- Наименование - указывается наименование регулярного задания
- Активно - признак активности задания
- Период заполнения графика - указывается период заполнения графика выполнения задания. Если период не указан, то заполнение графика будет выполнятся с текущей даты до даты, рассчитанной в соответствии с горизонтом планирования, либо, если горизонт планирования не указан до конца заполнения Производственного календаря
- Производственный календарь - указывается ссылка на производственный календарь, данные которого будут учитываться при составлении графика выполнения задания
- Способ заполнения графика - возможно 2 варианта "По неделям", "По месяцам". В первом варианте указываются дни недели, в которые задание должно быть выполнено, во втором - дни месяца (например, каждое 25-е число месяца)
- Шаблон заполнения - указываются дни (недели или месяца) и время, когда задание должно быть выполнено
- Учитывать праздники - если установлено, то из состава дней, когда задание должно быть выполнено, будут исключаться дни выпадающие на праздники
- Переносить дату выполнения на последний рабочий день - если установлено и дата запуска задания выпадает на не рабочий день, то запуск задания переносится на ближайший предшествующий рабочий день
- Учитывать нерабочие периоды - если установлено, то из состава дней, когда задание должно быть выполнено, будут исключаться дни выпадающие на нерабочие периоды (Нерабочие периоды загружаются из классификатора, также есть возможность установить нерабочие периоды в ручную в регистре сведений "Периоды нерабочих дней производственного календаря")
- Горизонт планирования - указывается период в месяцах, на который график должен быть заполнен вперед. График автоматически дозаполняется на указанный период регламентным заданием "Планировщик выполнения регулярных заданий".
- Количество повторов - указывается количество повторов выполнения задания при аварийном завершении процесса выполнения задания
- В табличной части справочника указываются задачи, которые должны быть выполнены регулярным заданием
- Последовательное выполнение задач - если установлено, то задачи регламентного задания будут выполняться последовательно, иначе задачи выполняются параллельно (каждая задача выполняется в отдельном фоновом задании)
После заполнения параметров формирования графика выполнения задания можно перейти на страницу результатов заполнения графика по кнопке "Результат заполнения графика"
На этой странице есть возможность в случае необходимости откорректировать график выполнения задания (ручные изменения графика выделяются желтым цветом).
Предусмотрены следующие возможности по ручной корректировке графика выполнения заданий:
- создание новой записи графика работы
- отмена существующей записи графика
- копирование записи графика (перемещение записи мышкой с нажатой клавишей Ctrl)
- перемещение записи графика (перемещение записи мышкой)
По кнопке "Заполнить по шаблону" есть возможность отмены ручных корректировок графика.
Из формы элемента справочника Регулярных заданий можно перейти к просмотру записей графика работы
Каждая запись графика работы может находится в одном из следующих состояний (состояния отображаются в виде пиктограмм в форме списка графика)
- Запланировано - запланировано выполнение задания
- Просрочено - задание по каким-то причинам не было запущено на выполнение в запланированное время
- Выполнено - задание выполнено
- Отменено - выполнение запланированное задание отменено пользователем
- Выполняется - задание выполняется в текущий момент
- Выполнено с ошибкой - задание выполнено с ошибкой
Внешний вид формы списка справочника Регулярных заданий показан на следующем скриншоте
Из формы элемента справочника Задач есть возможность перейти к связанной с этим элементом информации
- открыть форму списка справочника Регулярных заданий
- открыть форму списка графиков работ связанных с задачей Регулярных заданий
- открыть журнал работы
Состав подсистемы
Подсистема включает в себя следующие объекты метаданных:
Объект метаданных | Комментарий |
---|---|
Подсистема.РегулярныеЗадания | Сама подсистема |
ОбщийМодуль.РегулярныеЗадания | Основной общий модуль подсистемы |
ОбщийМодуль.РегулярныеЗаданияКлиент | Клиентский общий модуль подсистемы |
ОбщийМодуль.РегулярныеЗаданияОбщегоНазначения | Вспомогательные процедуры общего назначения |
ОбщийМодуль.РегулярныеЗаданияПереопределяемый | Общий модуль для переопределения стандартной обработки выполнения задачи |
Роль.ЧтениеРегулярныхЗаданий | Роль для доступа на просмотр к объектам подсистемы |
Роль.ДобавлениеИзменениеРегулярныхЗаданий | Роль для доступа на редактирование объектов подсистемы |
РегламентноеЗадание.КонтроллерВыполненияРегулярныхЗаданий | Основное регламентное задание, выполняющееся каждую минуту, и обеспечивающее запуск заданий по графикам и контроль их выполнения |
РегламентноеЗадание.ПланировщикВыполненияРегулярныхЗаданий | Регламентное задание, формирующее графики выполнения регулярных заданий в соответствии с настройками |
ОпределяемыйТип.ЗадачиРегулярныхЗаданий | Определяемый тип, содержащий ссылки на справочники задач, подключенных к подсистеме |
ОбщаяКоманда.РегулярныеЗаданияОткрытьФормуСписка | Общая команда для открытия формы списка справочника Регулярных заданий из форм элементов справочников задач с установленным отбором по задаче |
ОбщаяКоманда.РегулярныеЗаданияВводНаОсновании | Общая команда для ввода на основании элементов справочников задач регулярных заданий |
ОбщаяКоманда.ВыполнитьЗадачуРегулярногоЗадания | Общая команда для ручного запуска выполнения задач, подключенных к подсистеме |
ОбщаяКоманда.ГрафикиРаботыРегулярныхЗаданийОткрытьФормуСписка | Общая команда для открытия формы списка регистра "ГрафикиРаботыРегулярныхЗаданий" из форм элементов справочников задач с установленным отбором по задаче |
ОбщаяКоманда.ГрафикРаботыРегулярногоЗадания | Общая команда для формы редактирования графика работы регулярного задания |
ОбщаяФорма.ЗадачиРегулярныхЗаданий | Общая форма списков справочников задач |
Справочник.РегулярныеЗадания | Справочник регулярных заданий |
Справочник.ЗадачиРегулярныхЗаданий | Справочник задач регулярных заданий |
Перечисление.СпособыЗаполненияГрафиковРегулярныхЗаданий |
|
Перечисление.СостоянияРегулярныхЗаданий |
|
Перечисление.ВидыСобытийЖурналаРаботыРегулярныхЗаданий |
|
РегистрСведений.ГрафикиРаботыРегулярныхЗаданий | Регистр сведений, хранящий графики выполнения регулярных заданий |
РегистрСведений.СостоянияВыполненияРегулярныхЗаданий | Регистр сведений, хранящий информацию о состоянии выполнения регулярных заданий и задач |
РегистрСведений.ЖурналРаботыРегулярныхЗаданий | Регистр сведений, хранящий журнал работы регулярных заданий и задач |
РегистрСведений.НастройкиСписковРегулярныхЗадач | Регистр сведений, хранящий пользовательские настройки форм списков справочников задач, подключенных к подсистеме |
Внедрение подсистемы в прикладное решение
Для подключения справочника, предназначенного для выполнения некой регулярной задачи (алгоритма), к подсистеме необходимо
- определить в модуле менеджера справочника экспортную функцию ВыполнитьЗадачуРегулярногоЗадания(Задача, ДатаЗапуска = ""), реализующую алгоритм выполнения задачи.
Функция возвращает структуру с ключом БылиОшибки (= истина, если в процессе выполнения задачи возникли ошибки).
Функция ВыполнитьЗадачуРегулярногоЗадания(Задача, ДатаЗапуска = "") Экспорт
РезультатВыполнения = Новый Структура("БылиОшибки", Ложь);
//алгоритм выполнения задачи
...
РегулярныеЗадания.ЗаписьЖурналаРаботы(Задача, Перечисления.ВидыСобытийЖурналаРаботыРегулярныхЗаданий.Информация, "Текст сообщения", ДатаЗапуска);
...
Возврат РезультатВыполнения;
КонецФункции
- включить в определяемый тип ЗадачиРегулярныхЗаданий ссылку на подключаемый к подсистеме справочник
- изменить тип измерения ЗаданиеЗадача регистра сведений СостоянияВыполненияРегулярныхЗаданий (добавить в список типов измерения ссылку на включаемый в подсистему справочник)
- изменить тип измерения ЗаданиеЗадача регистра сведений ЖурналРаботыРегулярныхЗаданий (добавить в список типов измерения ссылку на включаемый в подсистему справочник)
- добавить команду справочника ЗадачиРегулярныхЗаданийОткрытьФормуСписка (Группа - Панель навигации.Обычное)
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
//Вставить содержимое обработчика.
ПараметрыФормы = Новый Структура("ТипЗадач, ЗаголовокФормы", <ИмяСправочника>, <ЗаголовокФормыСписка>);
ОткрытьФорму("ОбщаяФорма.ЗадачиРегулярныхЗаданий", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, <ИмяСправочника>, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
- вывести добавленную команду в командный интерфейс подсистемы, из которой будет открываться форма списка справочника
Внедрение подсистемы в прикладное решение через механизм расширений
В случае если отсутствует возможность внесения изменений в конфигурацию прикладного решения (конфигурация находится на поддержке), подсистему можно установить через механизм расширений конфигурации.
Следует отметить ряд особенностей при разработке подсистемы в расширении:
- В расширении отсутствует возможность добавления регламентных заданий (в подсистеме используется 2 регламентных задания). В связи с этим был реализован дополнительный механизм создания регламентных заданий, описанный в статье "Программное управление регламентными заданиями в расширении с использованием БСП". Необходимо учесть, что реализованный механизм использует подсистему "Дополнительные отчеты и обработки" из состава БСП.
- В расширениях отсутствует возможность использовать определяемые типы в качестве типов значений реквизитов объектов метаданных (в подсистеме используется определяемый тип "Задачи регулярных заданий"). Данное ограничение касается конфигураций с режимом совместимости ниже 8.3.20, а текущая редакция БСП имеет режим совместимости 8.3.14 (актуальные версии типовых конфигураций на базе БСП на текущий момент имеют режим совместимости не выше 8.3.17). В связи с этим ограничением при подключении новых справочников к подсистеме необходимо вручную указывать эти справочники в качестве типа значения реквизита "Задача" табличной части "Задачи" справочника "Регулярные задания".
ВАЖНО! После подключения расширения необходимо запустить базу с ключом /C ЗапуститьОбновлениеИнформационнойБазы.
Дополнительная информация
Тестирование подсистемы проводилось на версии платформы 8.3.19.1229 (режим совместимости конфигурации 8.3.14). При разработке использовалась Библиотека стандартных подсистем версии 3.1.7
Подсистема выкладывается в условно бесплатный доступ (все-таки "5 копеек" заплатить придется), так как автор разработки наивно полагает, что, если подсистема вызовет интерес у сообщества 1С, то участники сообщества примут активное участие в развитии данного функционала.