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

11.06.22

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

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

Скачать файлы

Наименование Файл Версия Размер
Подсистема регулярных заданий (конфигурация):
.cf 217,44Kb
14
.cf 1.1.2 217,44Kb 14 Скачать
Подсистема регулярных заданий (расширение конфигурации):
.cfe 157,94Kb
6
.cfe 157,94Kb 6 Скачать
Назначение подсистемы

Как известно, в состав общих объектов конфигурации платформы 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С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    4832    mrXoxot    11    

99

Переоткрытие внешних обработок

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

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

30.11.2023    3961    ke.92@mail.ru    16    

61

Валидация JSON через XDTO (включая массивы)

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

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8824    YA_418728146    6    

141

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2072    21    progmaster    7    

3

Многопоточное выполнение процедуры с помощью ДлительныеОперации

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

26.02.2023    8543    egoriy111    26    

88

Пример многопоточной обработки (БСП)

HighLoad оптимизация БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка-шаблон, на основе которой можно делать свои многопоточные обработки данных для конфигураций на БСП.

13.02.2023    9324    6    echo77    8    

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

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

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

Также обнаружил, что "Подсистема регулярных заданий" использует не только подсистему "Календарные графики" из состава БСП, но и "Графики работ" оттуда. Думаю, что нужно дополнить описание подсистемы упоминанием использования "Графиков работ".
7. Sirruf 192 11.06.22 18:11 Сейчас в теме
(3) Ошибку исправил, выложил новую версию подсистемы. Использование подсистемы "Графики работ" указал.
Obertone; +1 Ответить
4. Sirruf 192 10.06.22 15:55 Сейчас в теме
(3) Да, я уже сам понял в чем там ошибка... Когда выгружал объекты подсистемы в отдельную конфигурацию, не учел ссылки на другие объекты метаданных. Выложу исправленную версию в ближайшее время, пока можете просто указать ссылку вручную.
По поводу других подсистем согласен, укажу.
Obertone; +1 Ответить
5. MaxS 2826 11.06.22 03:55 Сейчас в теме
Увидел на скриншоте возможность просмотра лога, думал взять себе, но это сделано за счет добавления метаданных.
Делаю подобную систему с использованием дополнительных обработок, подключаемых штатно в предприятии - "Подсистема регулярных заданий предназначена для выполнения произвольных алгоритмов (задач) по заранее... заданному расписанию".
К примеру запускаться может каждый день, но в одном из заданий (доп обработке) может стоять произвольная проверка и запрещать выполнение заданий ниже или разрешать. Таким образом можно реализовать выполнение по какому-нибудь графику, который интерактивно задаётся в настройках этой доп обработки и хранится в настройках доп обработки в базе.
А для журналирования логов используется отдельная доп обработка, которая запускается в конце - собирает результаты всех шагов и сохраняет, например, во внешний файл.
Получается основная обработка максимально простая, она запускается по расписанию и хранит список доп обработок и настройки для запуска. Весь произвольный функционал сосредоточен в доп. обработках.
Эта публикация как коммерческая на инфостарте есть, с возможностью купить за см, но интереса у сообщества пока не вызвала. Поэтому делюсь идеей. Может быть тут пригодится... А я почитаю. ;)
6. Sirruf 192 11.06.22 14:49 Сейчас в теме
(5) А почему не указали ссылку на Вашу обработку?
8. DrAku1a 1679 19.06.22 16:46 Сейчас в теме
Плюс за старания. Но в типовых на БСП уже есть возможность прикручивать внешние обработки и запускать их как регламентные задания. В большинстве случаев - этого достаточно.
9. Sirruf 192 19.06.22 20:32 Сейчас в теме
11. Sirruf 192 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 192 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 рабочих дней?
Оставьте свое сообщение