Подсистема регулярных заданий

11.06.22

Разработка - Универсальные функции

Подсистема регулярных заданий предназначена для выполнения произвольных алгоритмов (задач) по заранее сформированным графикам с учетом производственного календаря.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Подсистема регулярных заданий (конфигурация):
.cf 217,44Kb ver:1.1.2
16
16 Скачать (1 SM) Купить за 1 850 руб.
Подсистема регулярных заданий (расширение конфигурации):
.cfe 157,94Kb
9
9 Скачать (1 SM) Купить за 1 850 руб.
Назначение подсистемы

Как известно, в состав общих объектов конфигурации платформы 1С:Предприятия входят регламентные задания, позволяющие автоматически выполнять процедуры на встроенном языке по расписанию. Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение.

К минусам регламентных заданий можно отнести:

  • отсутствие возможности учитывать при настройке расписания выполнения производственный календарь. Допустим, в соответствии с логикой бизнес процесса, задача должна выполняться по определенным рабочим дням недели, с учетом праздников и нерабочих периодов. А в случае, если дата выполнения задачи выпадает на праздничный день, то необходимо перенести выполнение задачи на предыдущий рабочий день.
  • отсутствие возможности гибко управлять запуском выполнения задач на пользовательском уровне в режиме 1С:Предприятия. Например, бизнес пользователю требуется отменить выполнение задачи в определенный день. С помощью механизма настройки расписания регламентных заданий это будет сделать достаточно сложно.
  • высокая трудоемкость подключения к механизму регламентных заданий справочников, реализующих выполнение периодических задач. Особенно, если требуется не просто подключить справочник к регламентным заданиям, но о обеспечить сопутствующую "обвязку" - вывести журнал работы задачи, дату/время последнего запуска, дату/время последнего успешного запуска и т. д. (в качестве примера см. справочник РассылкиОтчетов из состава БСП) При этом все это придется повторить при настройке других аналогичных справочников.

Разработанная подсистема решает перечисленные выше проблемы при работе со штатным механизмом регламентных заданий.

Подсистема регулярных заданий (далее подсистема) предназначена для выполнения произвольных алгоритмов (задач) по заранее сформированным графикам с учетом производственного календаря. С помощью данной подсистемы возможно подключение различных справочников прикладного решения, предназначенных для выполнение некоторых периодических задач, к графикам  их выполнения.

Подсистема использует подсистемы "Календарные графики" и "Графики работы" из состава БСП.

Описание работы с подсистемой

Рассмотрим настройку регулярных заданий на примере, входящего в состав подсистемы, справочника "Задачи регулярных заданий" (далее Задачи). Данный справочник содержит один реквизит - АлгоритмЗадачи, содержащий произвольный текст кода на встроенном языке. При запуске задачи осуществляется выполнение этого кода через метод Выполнить().

Внешний вид формы списка справочника, подключенного к подсистеме, показан следующем на скриншоте.

 

 

В форме списка для каждой задачи отображается Дата последнего запуска задачи (со статусом выполнения в виде пиктограммы), Дата последнего успешного запуска задачи. Справа отображается журнал работы задачи.

Кнопки командной панели:

  • "Выполнить задачу" запускается выполнение задачи в ручном режиме.
  • Создать на основании - Регулярное задание. Задача включается в состав регулярного задания.
  • "График работы" - открывается форма редактирования графика работы регулярного задания.

Для настройки выполнения задачи в соответствии с сформированным графиком, необходимо создать на основании элемента справочника объект "Регулярное задание" (пункт меню Создать на основании - Регулярное задание).

Внешний вид формы элемента справочника "Регулярные задания" показан на следующем скриншоте

 

 

Рассмотрим подробнее элементы управления формы

  • Наименование - указывается наименование регулярного задания
  • Активно - признак активности задания
  • Период заполнения графика - указывается период заполнения графика выполнения задания. Если период не указан, то заполнение графика будет выполнятся с текущей даты до даты, рассчитанной в соответствии с горизонтом планирования, либо, если горизонт планирования не указан до конца заполнения Производственного календаря
  • Производственный календарь - указывается ссылка на производственный календарь, данные которого будут учитываться при составлении графика выполнения задания
  • Способ заполнения графика - возможно 2 варианта "По неделям", "По месяцам".  В первом варианте указываются дни недели, в которые задание должно быть выполнено, во втором - дни месяца (например, каждое 25-е число месяца)
  • Шаблон заполнения - указываются дни (недели или месяца) и время, когда задание должно быть выполнено
  • Учитывать праздники - если установлено, то из состава дней, когда задание должно быть выполнено, будут исключаться дни выпадающие на праздники
  • Переносить дату выполнения на последний рабочий день - если установлено и дата запуска задания выпадает на не рабочий день, то запуск задания переносится на ближайший предшествующий рабочий день
  • Учитывать нерабочие периоды - если установлено, то из состава дней, когда задание должно быть выполнено, будут исключаться дни выпадающие на нерабочие периоды (Нерабочие периоды загружаются из классификатора, также есть возможность установить нерабочие периоды в ручную в регистре сведений "Периоды нерабочих дней производственного календаря")
  • Горизонт планирования - указывается период в месяцах, на который график должен быть заполнен вперед. График автоматически дозаполняется на указанный период регламентным заданием "Планировщик выполнения регулярных заданий".
  • Количество повторов - указывается количество повторов выполнения задания при аварийном завершении процесса выполнения задания
  • В табличной части справочника указываются задачи, которые должны быть выполнены регулярным заданием
  • Последовательное выполнение задач - если установлено, то задачи регламентного задания будут выполняться последовательно, иначе задачи выполняются параллельно (каждая задача выполняется в отдельном фоновом задании)

После заполнения параметров формирования графика выполнения задания можно перейти на страницу результатов заполнения графика по кнопке "Результат заполнения графика"

 

 

На этой странице есть возможность в случае необходимости откорректировать график выполнения задания (ручные изменения графика выделяются желтым цветом).

Предусмотрены следующие возможности по ручной корректировке графика выполнения заданий:

  • создание новой записи графика работы
  • отмена существующей записи графика
  • копирование записи графика (перемещение записи мышкой с нажатой клавишей Ctrl)
  • перемещение записи графика (перемещение записи мышкой)

По кнопке "Заполнить по шаблону" есть возможность отмены ручных корректировок графика.

Из формы элемента справочника Регулярных заданий можно перейти к просмотру записей графика работы

 

 

Каждая запись графика работы может находится в одном из следующих состояний (состояния отображаются в виде пиктограмм в форме списка графика)

  • Запланировано - запланировано выполнение задания
  • Просрочено - задание по каким-то причинам не было запущено на выполнение в запланированное время
  • Выполнено - задание выполнено
  • Отменено - выполнение запланированное задание отменено пользователем
  • Выполняется - задание выполняется в текущий момент
  • Выполнено с ошибкой - задание выполнено с ошибкой

Внешний вид формы списка справочника Регулярных заданий показан на следующем скриншоте

 

 

Из формы элемента справочника Задач есть возможность перейти к связанной с этим элементом информации

  • открыть форму списка справочника Регулярных заданий
  • открыть форму списка графиков работ связанных с задачей Регулярных заданий
  • открыть журнал работы
 
Состав подсистемы

Подсистема включает в себя следующие объекты метаданных:

 

Объект метаданных Комментарий
Подсистема.РегулярныеЗадания Сама подсистема
ОбщийМодуль.РегулярныеЗадания Основной общий модуль подсистемы
ОбщийМодуль.РегулярныеЗаданияКлиент Клиентский общий модуль подсистемы
ОбщийМодуль.РегулярныеЗаданияОбщегоНазначения Вспомогательные процедуры общего назначения
ОбщийМодуль.РегулярныеЗаданияПереопределяемый Общий модуль для переопределения стандартной обработки выполнения задачи
Роль.ЧтениеРегулярныхЗаданий Роль для доступа на просмотр к объектам подсистемы
Роль.ДобавлениеИзменениеРегулярныхЗаданий Роль для доступа на редактирование объектов подсистемы
РегламентноеЗадание.КонтроллерВыполненияРегулярныхЗаданий Основное регламентное задание, выполняющееся каждую минуту, и обеспечивающее запуск заданий по графикам и контроль их выполнения
РегламентноеЗадание.ПланировщикВыполненияРегулярныхЗаданий Регламентное задание, формирующее графики выполнения регулярных заданий в соответствии с настройками
ОпределяемыйТип.ЗадачиРегулярныхЗаданий Определяемый тип, содержащий ссылки на справочники задач, подключенных к подсистеме
ОбщаяКоманда.РегулярныеЗаданияОткрытьФормуСписка Общая команда для открытия формы списка справочника Регулярных заданий из форм элементов справочников задач с установленным отбором по задаче
ОбщаяКоманда.РегулярныеЗаданияВводНаОсновании Общая команда для ввода на основании элементов справочников задач регулярных заданий
ОбщаяКоманда.ВыполнитьЗадачуРегулярногоЗадания Общая команда для ручного запуска выполнения задач, подключенных к подсистеме
ОбщаяКоманда.ГрафикиРаботыРегулярныхЗаданийОткрытьФормуСписка Общая команда для открытия формы списка регистра "ГрафикиРаботыРегулярныхЗаданий" из форм элементов справочников задач с установленным отбором по задаче
ОбщаяКоманда.ГрафикРаботыРегулярногоЗадания Общая команда для формы редактирования графика работы регулярного задания
ОбщаяФорма.ЗадачиРегулярныхЗаданий Общая форма списков справочников задач
Справочник.РегулярныеЗадания Справочник регулярных заданий
Справочник.ЗадачиРегулярныхЗаданий Справочник задач регулярных заданий
Перечисление.СпособыЗаполненияГрафиковРегулярныхЗаданий
  • ПоНеделям
  • ПоМесяцам
Перечисление.СостоянияРегулярныхЗаданий
  • Запланировано
  • Выполняется
  • Выполнено
  • ВыполненоСОшибкой
  • Отменено
  • Просрочено
Перечисление.ВидыСобытийЖурналаРаботыРегулярныхЗаданий
  • Запуск
  • Завершение
  • Информация
  • Ошибка
  • Предупреждение
РегистрСведений.ГрафикиРаботыРегулярныхЗаданий Регистр сведений, хранящий графики выполнения регулярных заданий
РегистрСведений.СостоянияВыполненияРегулярныхЗаданий Регистр сведений, хранящий информацию о состоянии выполнения регулярных заданий и задач
РегистрСведений.ЖурналРаботыРегулярныхЗаданий Регистр сведений, хранящий журнал работы регулярных заданий и задач
РегистрСведений.НастройкиСписковРегулярныхЗадач Регистр сведений, хранящий пользовательские настройки форм списков справочников задач, подключенных к подсистеме

 

Внедрение подсистемы в прикладное решение

Для подключения справочника, предназначенного для выполнения некой регулярной задачи (алгоритма), к подсистеме необходимо

  • определить в модуле менеджера справочника экспортную функцию ВыполнитьЗадачуРегулярногоЗадания(Задача, ДатаЗапуска = ""), реализующую алгоритм выполнения задачи. 
    Функция возвращает структуру с ключом БылиОшибки (= истина, если в процессе выполнения задачи возникли ошибки).
Функция ВыполнитьЗадачуРегулярногоЗадания(Задача, ДатаЗапуска = "") Экспорт
	
	РезультатВыполнения = Новый Структура("БылиОшибки", Ложь);
	//алгоритм выполнения задачи
	...
	РегулярныеЗадания.ЗаписьЖурналаРаботы(Задача, Перечисления.ВидыСобытийЖурналаРаботыРегулярныхЗаданий.Информация, "Текст сообщения", ДатаЗапуска);
	...
	Возврат РезультатВыполнения;
КонецФункции
  • включить в определяемый тип ЗадачиРегулярныхЗаданий ссылку на подключаемый к подсистеме справочник 
  • изменить тип измерения ЗаданиеЗадача регистра сведений СостоянияВыполненияРегулярныхЗаданий (добавить в список типов измерения ссылку на включаемый в подсистему справочник)
  • изменить тип измерения ЗаданиеЗадача регистра сведений ЖурналРаботыРегулярныхЗаданий (добавить в список типов измерения ссылку на включаемый в подсистему справочник)
  • добавить команду справочника ЗадачиРегулярныхЗаданийОткрытьФормуСписка (Группа - Панель навигации.Обычное)
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	//Вставить содержимое обработчика.
	ПараметрыФормы = Новый Структура("ТипЗадач, ЗаголовокФормы", <ИмяСправочника>, <ЗаголовокФормыСписка>);
	ОткрытьФорму("ОбщаяФорма.ЗадачиРегулярныхЗаданий", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, <ИмяСправочника>, ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры
  • вывести добавленную команду в командный интерфейс подсистемы, из которой будет открываться форма списка справочника
Внедрение подсистемы в прикладное решение через механизм расширений

В случае если отсутствует возможность внесения изменений в конфигурацию прикладного решения (конфигурация находится на поддержке), подсистему можно установить через механизм расширений конфигурации.

Следует отметить ряд особенностей при разработке подсистемы в расширении:

  1. В расширении отсутствует возможность добавления регламентных заданий (в подсистеме используется 2 регламентных задания). В связи с этим был реализован дополнительный механизм создания регламентных заданий, описанный в статье "Программное управление регламентными заданиями в расширении с использованием БСП". Необходимо учесть, что реализованный механизм использует  подсистему "Дополнительные отчеты и обработки" из состава БСП.
  2. В расширениях отсутствует возможность использовать определяемые типы в качестве типов значений реквизитов объектов  метаданных (в подсистеме используется определяемый тип "Задачи регулярных заданий"). Данное ограничение касается конфигураций с режимом совместимости ниже 8.3.20, а текущая редакция БСП имеет режим совместимости 8.3.14 (актуальные версии типовых конфигураций на базе БСП на текущий момент имеют режим совместимости не выше 8.3.17). В связи с этим ограничением при подключении новых справочников к подсистеме необходимо вручную указывать эти справочники в качестве типа значения реквизита "Задача" табличной части "Задачи" справочника "Регулярные задания".

ВАЖНО! После подключения расширения необходимо запустить базу с ключом /C ЗапуститьОбновлениеИнформационнойБазы.

Дополнительная информация

Тестирование подсистемы проводилось на версии платформы 8.3.19.1229 (режим совместимости конфигурации 8.3.14). При разработке использовалась Библиотека стандартных подсистем версии 3.1.7

Подсистема выкладывается в условно бесплатный доступ (все-таки "5 копеек" заплатить придется), так как автор разработки наивно полагает, что, если подсистема вызовет интерес у сообщества 1С, то участники сообщества примут активное участие в развитии данного функционала.

регламентные регулярные задания графики работы расписание

См. также

Универсальные функции Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    20114    dimanich70    81    

144

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист Стажер Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    6424    mrXoxot    11    

112

Универсальные функции Программист Платформа 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    5501    ke.92@mail.ru    16    

65
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Obertone 77 08.06.22 15:30 Сейчас в теме
После развёртывания БСП версии 3.1.7.61 на подсистеме обнаружилась ошибка при попытке открытия списка регулярных заданий:

Значение не является значением объектного типа (Пустая)
{Справочник.РегулярныеЗадания.Форма.ФормаСписка.Форма(49)}:ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Ответственный", ПараметрыОтбора["Ответственный"],,,
{Справочник.РегулярныеЗадания.Форма.ФормаСписка.Форма(38)}:УстановитьОтборСписка(ПараметрыОтбора);
{Справочник.РегулярныеЗадания.Форма.ФормаСписка.Форма(14)}:УстановитьОтбор(Ложь);
2. Sirruf 195 08.06.22 20:30 Сейчас в теме
(1) У вас в конфигурации справочник Пользователи есть? Если есть посмотрите, пожалуйста, в отладчике с чем связана ошибка, у меня она не воспроизводится.
3. Obertone 77 10.06.22 09:10 Сейчас в теме
(2) да, есть.

Причину ошибки нашёл - в форме списка регулярных заданий реквизит "ОтветственныйОтбор" не имел типа "СправочникСсылка.Пользователи" (он строковым был).

Также обнаружил, что "Подсистема регулярных заданий" использует не только подсистему "Календарные графики" из состава БСП, но и "Графики работ" оттуда. Думаю, что нужно дополнить описание подсистемы упоминанием использования "Графиков работ".
7. Sirruf 195 11.06.22 18:11 Сейчас в теме
(3) Ошибку исправил, выложил новую версию подсистемы. Использование подсистемы "Графики работ" указал.
Obertone; +1 Ответить
4. Sirruf 195 10.06.22 15:55 Сейчас в теме
(3) Да, я уже сам понял в чем там ошибка... Когда выгружал объекты подсистемы в отдельную конфигурацию, не учел ссылки на другие объекты метаданных. Выложу исправленную версию в ближайшее время, пока можете просто указать ссылку вручную.
По поводу других подсистем согласен, укажу.
Obertone; +1 Ответить
5. MaxS 2944 11.06.22 03:55 Сейчас в теме
Увидел на скриншоте возможность просмотра лога, думал взять себе, но это сделано за счет добавления метаданных.
Делаю подобную систему с использованием дополнительных обработок, подключаемых штатно в предприятии - "Подсистема регулярных заданий предназначена для выполнения произвольных алгоритмов (задач) по заранее... заданному расписанию".
К примеру запускаться может каждый день, но в одном из заданий (доп обработке) может стоять произвольная проверка и запрещать выполнение заданий ниже или разрешать. Таким образом можно реализовать выполнение по какому-нибудь графику, который интерактивно задаётся в настройках этой доп обработки и хранится в настройках доп обработки в базе.
А для журналирования логов используется отдельная доп обработка, которая запускается в конце - собирает результаты всех шагов и сохраняет, например, во внешний файл.
Получается основная обработка максимально простая, она запускается по расписанию и хранит список доп обработок и настройки для запуска. Весь произвольный функционал сосредоточен в доп. обработках.
Эта публикация как коммерческая на инфостарте есть, с возможностью купить за см, но интереса у сообщества пока не вызвала. Поэтому делюсь идеей. Может быть тут пригодится... А я почитаю. ;)
6. Sirruf 195 11.06.22 14:49 Сейчас в теме
(5) А почему не указали ссылку на Вашу обработку?
8. DrAku1a 1745 19.06.22 16:46 Сейчас в теме
Плюс за старания. Но в типовых на БСП уже есть возможность прикручивать внешние обработки и запускать их как регламентные задания. В большинстве случаев - этого достаточно.
9. Sirruf 195 19.06.22 20:32 Сейчас в теме
11. Sirruf 195 28.07.22 15:15 Сейчас в теме
(10) Добрый день! Это к чему?
12. user1421292 29.07.22 20:58 Сейчас в теме
Привет, почему режим совместимости 8.3.20 установлен в cf а не 8.3.14 как в описание.... сделайте 8.3.14 пожалуйста.
13. Sirruf 195 30.07.22 17:06 Сейчас в теме
(12) Эта информация актуальна для варианта внедрения подсистемы через расширение конфигурации (поскольку в текущей версии БСП установлен такой режим).
14. Sergafan10 07.12.22 10:40 Сейчас в теме
Подскажите, возможности неоднократного выполнения задания в рамках одного дня, не предусмотрено?
15. Sergafan10 07.12.22 14:58 Сейчас в теме
(14) допилил заполнение графика
Если ДанныеДня = Неопределено Тогда
			// Удаляем строку из набора, если день - нерабочий.
			НаборДни.Удалить(СтрокаНабораДни);
			СтрокиНабораДни.Удалить(ДатаДня);
		ИначеЕсли ВыполнятьКаждыйЧас Тогда
			СтрокаНабораДни.ВремяНачала = ДанныеДня.ВремяНачала;
			РазностьВЧасах = Цел((ДанныеДня.ВремяОкончания - ДанныеДня.ВремяНачала) / 3600);
			Для а = 1 ПО РазностьВЧасах Цикл  				
				СтрКаждыйЧас = НаборДни.Добавить();
				ЗаполнитьЗначенияСвойств(СтрКаждыйЧас, СтрокаНабораДни);
				СтрКаждыйЧас.ВремяНачала = ДанныеДня.ВремяНачала + а * 3600;
			КонецЦикла;			
		Иначе
			ЗаполнитьЗначенияСвойств(СтрокаНабораДни, ДанныеЗаполнения);
			Если ТипЗнч(ДанныеДня) = Тип("Структура") Тогда
				ЗаполнитьЗначенияСвойств(СтрокаНабораДни, ДанныеДня);
				СтрокаНабораДни.ДатаЗапуска = ДатаДня;
			КонецЕсли;
			СтрокаНабораДни.ДатаИзмененияСостояния = ТекущаяДата();
			Если НЕ ПредпраздничныеДни.Найти(ДатаДня) = Неопределено Тогда ///уменьшим время начала на час
				СтрокаНабораДни.ВремяНачала = СтрокаНабораДни.ВремяНачала - 3600;				
			КонецЕсли;     
		КонецЕсли;

Показать
16. Mahon83 13 23.10.23 09:14 Сейчас в теме
В Вашей подсистеме можно настроить расписание с периодичностью раз в 10 рабочих дней?
Оставьте свое сообщение