Базовые принципы работы с регламентными заданиями подсистем БСП

22.05.22

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

В очередной публикации рассмотрим некоторые базовые приемы работы с регламентными заданиями в рамках библиотеки стандартных подсистем

 

Введение

Всем доброго времени! В текущей статье - новой публикации я рассмотрю основы работы с регламентными заданиями в рамках функционала Библиотеки стандартных подсистем - модуля "Регламентные задания". Тема довольно заезженная, я сам разбирал пару лет назад что-то подобное - модули длительных операций в двух статьях и даже приводил примеры. В данной статье я, как всегда, приведу исключительно практические рабочие примеры - так сказать для "копи-паста" и использования сразу. 

Статья будет полезна для программистов, администраторов баз данных, а так же всех пользователей, желающих ознакомиться с возможностями системы 1с - функционирования типовых конфигураций.

Разработка примеров будет вестись на конфигурации Библиотеки стандартных подсистем 3.1.7.34 (далее БСП) на платформе 1С:Предприятие 8.3.19.1264. Так получилось, что все примеры разрабатывались в серверном варианте базы.

Статью не будем делить на части - сразу разберем все основные возможности - создание, изменение, удаление регламентного задания и описание установки расписания для этого задания. Практический раздел назовем так:

 

Основные возможности библиотеки стандартных подсистем по регламентным операциям

Для начала, я подготовлю пару простых объектов метаданных в моей рабочей конфигурации. Во-первых, я вручную создам пустой шаблон фонового задания с пустым расписанием выполнения. Назову его "МоеРегЗадание" и привяжу к нему метод исполнения из собственного общего (серверного) модуля. Выглядит это вот так:

 

Рис.1. Создание шаблона фонового задания в конфигурации.

 

А код модуля исполнения - процедура, которая создает элемент в справочнике "ДемоНоменклатура" в зависимости от тех параметров, которые передаются регламентным заданием:

 
 Код процедуры, исполняемой регламентным заданием, в нашем общем модуле
&НаСервере
Процедура СоздатьНоменклатуру(Наименование, Артикул, ТипНоменклатуры) Экспорт
	
	// заполним по-порядку параметры этой процедуры
	// 0 - это наименоваание
	// 1 - это артикул
	// 2 - это тип номенклатуры	
	
	НовЗап 					= Справочники._ДемоНоменклатура.СоздатьЭлемент();
	
	Если ТипНоменклатуры = "Товар" Тогда   // по наименованию чисто для примераа
		НовЗап.ВидНоменклатуры 	= Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию("Товар");	
	Иначе
		НовЗап.ВидНоменклатуры 	= Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию("Услуга");	
	КонецЕсли;	
	
	НовЗап.Наименование 	= Наименование;
	НовЗап.Артикул 			= Артикул;
	
	НовЗап.Записать();
	
КонецПроцедуры	

 

 

Далее, пошагово рассмотрим функционал. Весь функционал, который следует ниже, уже можно размещать в дополнительной обрботке. Пример этой обработки вы можете скачать у меня на на гитхаб. Но, предварительно, я опишу и задам расписание регламентного задания, воспользовавшись РасписаниеРегламентногоЗадания(). Код создания расписания будет вот такой (опишем его в комментариях самого кода):

 
 Описание РасписаниеРегламентногоЗадания()
    
    // я создаю регламентное задание, которое работаеет с 9 до 11 часов утра
    // с промежутком 10 секунд
    // по дням недели - понедельник, вторник, суббота
    // по месяцам - май, июль, август, сентябрь


    Расписание = Новый РасписаниеРегламентногоЗадания();
	Расписание.ВремяНачала 	= Дата("01.01.2022 09:00:00");
	Расписание.ВремяКонца	= Дата("01.01.2022 11:00:00");
	Расписание.ПериодПовтораВТечениеДня	= 60; // каждые 60 секунд повторять
	
	ДниНедели = Новый Массив();   // понедельник, вторник, суббота
	ДниНедели.Добавить(1);
	ДниНедели.Добавить(2);
	ДниНедели.Добавить(6);
	
	Расписание.ДниНедели = ДниНедели;
	
	Месяцы = Новый Массив();   // май, июль, август, декабрь, сентябрь
    Месяцы.Добавить(5);	
    Месяцы.Добавить(7);
	Месяцы.Добавить(8);
	Месяцы.Добавить(12);	
	Месяцы.Добавить(9);	
	
	Расписание.Месяцы = Месяцы;
	
	Расписание.ПериодПовтораДней = 1; 
	Расписание.ПериодНедель	= 1; 

 

 

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

 

Рис.2. Получились настройки расписания (каждый день, по дням недели [понедельник, вторник, суббота], по месяцам [Июль, Август, Сентябрь, Декабрь]; с 9:00:00 по 11:00:00 каждые 60 секунд).

 

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

 
 Создаем экземпляр регламентного задания

 

&НаСервере
Функция СоздатьРасписаниеФоновогоЗадания()
	
	
	Расписание = Новый РасписаниеРегламентногоЗадания();
	Расписание.ВремяНачала 	= Дата("01.01.2022 09:00:00");
	Расписание.ВремяКонца	= Дата("01.01.2022 11:00:00");
	Расписание.ПериодПовтораВТечениеДня	= 60; // каждые 60 секунд повторять
	
	ДниНедели = Новый Массив();   // понедельник, вторник, суббота
	ДниНедели.Добавить(1);
	ДниНедели.Добавить(2);
	ДниНедели.Добавить(6);
	
	Расписание.ДниНедели = ДниНедели;
	
	Месяцы = Новый Массив();   // май, июль, август, декабрь, сентябрь
	Месяцы.Добавить(5);	
	Месяцы.Добавить(7);
	Месяцы.Добавить(8);
	Месяцы.Добавить(12);	
	Месяцы.Добавить(9);	
	
	Расписание.Месяцы = Месяцы;
	
	Расписание.ПериодПовтораДней = 1; 
	Расписание.ПериодНедель	= 1; 
	
	Возврат Расписание;
	
КонецФункции	


&НаСервере
Процедура СоздатьРегламентноеЗадание()
	
	// конструктор параметров задания
	ПараметрыЗадания = Новый Структура;
	
	// обращение метаданным конфигурации
	ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.МоеРегЗадание);
	
	// потребуется, чтобы передать в выполняемую функцию
	МассивПараметров = Новый Массив();
	МассивПараметров.Добавить("Тестовое наименование 1 "+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy"));  // Наименование
	МассивПараметров.Добавить("Арт " +Формат(ТекущаяДата(),"ДЛФ=T")); // артикул
	МассивПараметров.Добавить("Услуга"); // если не товар, то услуга
	
	
	ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
	ПараметрыЗадания.Вставить("Расписание", СоздатьРасписаниеФоновогоЗадания());
	
	ПараметрыЗадания.Вставить("Наименование", "Тест Создание номенклатуры");
	ПараметрыЗадания.Вставить("Ключ", "КлючПоСозданиюНоменклатуры");    // например, по нему будем искать
	
	ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении",    60);
	ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1);
	ПараметрыЗадания.Вставить("Использование", Истина);	
	
	НовРег = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
    Сообщить(НовРег.УникальныйИдентификатор);
	
	
КонецПроцедуры

 

 

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

 

Рис.3. Создали регламентное задание программно.

 

Далее, рассмотрим поиск и удаление этого регламентного задания.

Получить регламентное задание можно вот таким кодом:

&НаСервере
Процедура ПолучитьРегЗадание()
	
// гуид, например, я записал при его создании
РегЗадание = РегламентныеЗаданияСервер.Задание("f8964eb2-6ca9-4255-8632-d4e927ac6b14");
	
КонецПроцедуры	  

 

Отладчиком смотрю, что содержит данное задание (что выполняется, какие параметры)

 

Рис.4.Содержание полученного регламентного задания по ГУИД.

 

Чтобы изменить задание, я воспользуюсь вот таким кодом:

 
 Изменить регламентное задание

 

&НаСервере
Функция СоздатьРасписаниеФоновогоЗадания()
	
	
	Расписание = Новый РасписаниеРегламентногоЗадания();
	Расписание.ВремяНачала 	= Дата("01.01.2022 09:00:00");
	Расписание.ВремяКонца	= Дата("01.01.2022 11:00:00");
	Расписание.ПериодПовтораВТечениеДня	= 10; // каждые 10 секунд повторять
	
	ДниНедели = Новый Массив();   // понедельник
	ДниНедели.Добавить(1);

	
	Расписание.ДниНедели = ДниНедели;
	
	Месяцы = Новый Массив();   // май, июль
	Месяцы.Добавить(5);	
	Месяцы.Добавить(7);

	
	Расписание.Месяцы = Месяцы;
	
	Расписание.ПериодПовтораДней = 1; 
	Расписание.ПериодНедель	= 1; 
	
	Возврат Расписание;
	
КонецФункции	


&НаСервере
Процедура ИзменитьРеегламентноеЗадание()
	
	// конструктор параметров задания
	ПараметрыЗадания = Новый Структура;
	
	// обращение метаданным конфигурации
	ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.МоеРегЗадание);
	
	// потребуется, чтобы передать в выполняемую функцию
	МассивПараметров = Новый Массив();
	МассивПараметров.Добавить("Новое наименование "+Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy"));  // Наименование
	МассивПараметров.Добавить("Артикул" +Формат(ТекущаяДата(),"ДЛФ=T")); // артикул
	МассивПараметров.Добавить("Товар"); // если не товар, то услуга
	
	
	ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
	ПараметрыЗадания.Вставить("Расписание", СоздатьРасписаниеФоновогоЗадания());
	
	ПараметрыЗадания.Вставить("Наименование", "Новая номенклатуры");
	ПараметрыЗадания.Вставить("Ключ", "КлючПоСозданиюНоменклатуры");    // например, по нему будем искать
	
	ПараметрыЗадания.Вставить("ИнтервалПовтораПриАварийномЗавершении",    60);
	ПараметрыЗадания.Вставить("КоличествоПовторовПриАварийномЗавершении", 1);
	ПараметрыЗадания.Вставить("Использование", Истина);	
	
РегламентныеЗаданияСервер.ИзменитьЗадание("f8964eb2-6ca9-4255-8632-d4e927ac6b14",ПараметрыЗадания);
	
	
КонецПроцедуры


 

 

Чтобы удалить - код вот такой:

&НаСервере
Процедура ИзменитьРеегламентноеЗадание()

РегламентныеЗаданияСервер.УдалитьЗадание("f8964eb2-6ca9-4255-8632-d4e927ac6b14");

КонецПроцедуры

 

Итак, основные возможности работы с регламентными заданиями посмотрели - создание, получение, изменение и удаление. Теперь перейдём к заключению материала и сделаем небольшие выводы.

 

Заключение и выводы

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

Небольшие рабочие примеры по последним моим статьям вы всегда можете скачать на моем гит-хабе https://github.com/quazareline

 

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

 

Прошу так же обратить внимание на другие мои актуальные материалы по существующим возможностям функционала библиотеки стандартных подсистем - разным модулям и подсистемам. Данные статьи так же пригодятся вам на практике.

 

Актуальные материалы для применения функционала библиотеки стандартных подсистем

 

Шаблоны сообщений пользователю - подсистема БСП

Базовые приемы работы с кластером 1С при помощи БСП

Модули общего назначения - готовые полезные функции и процедуры конфигураций на БСП

Печать макета MS Word в любом документе с помощью БСП

Генерация штрихкодов с помощью БСП для программистов

Многопоточный режим выполнения процедуры с помощью методов БСП - примеры разработки

 

Все предложения, уточнения и благодарности принимаются в личку этого профиля. Всем спасибо и до новых встреч!

 

INFOSTART TOOLKIT

Самый продвинутый набор инструментов для управляемых форм 1С 8.3: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Подписки на события и др.


Вступайте в нашу телеграмм-группу Инфостарт

Регламентные задания БСП основной подход программное создание заданий

См. также

БСП (Библиотека стандартных подсистем) Программист Платные (руб)

Синтакс-помощник БСП - cправочник по библиотекам стандартных подсистем и электронных документов. В состав справочника входит описание экспортных процедур и функций, размещенных в областях кода ПрограммныйИнтерфейс БСП и БЭД.

1800 руб.

21.11.2024    8160    41    24    

45

БСП (Библиотека стандартных подсистем) Роли и права Программист 1С v8.3 1С:Библиотека стандартных подсистем Бесплатно (free)

Наткнулся на костыль по работе с ролями. Хочу поделиться, как не попасть на это странное поведение БСП.

07.05.2025    6265    dsdred    32    

87

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

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

21.05.2024    38603    dimanich70    83    

156

БСП (Библиотека стандартных подсистем) Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Добавим новый отчет в меню нового документа средствами БСП.

02.04.2024    13036    John_d    15    

103

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

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    45572    atdonya    29    

64

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

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

28.12.2023    8715    mrXoxot    11    

114
Отзывы
16. quazare 3952 27.05.22 08:38 Сейчас в теме
если хотите следить за моими новыми статьями БСП и не только - присоединяйтесь на мой канал
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. TMV 3 22.05.22 17:40 Сейчас в теме
Непонятно, зачем нужно коверкать конфу при наличии БСП, в которой регламентные задания можно добавлять через доп.обработки.
kser87; mrChOP93; maksa2005; dsdred; +4 Ответить
6. maksa2005 374 23.05.22 06:28 Сейчас в теме
Минус за ковыряние конфигурации, если есть доп. обработки.
Поддерживаю (1)
25. kser87 2476 02.06.23 15:50 Сейчас в теме
(1) + трэш-код с прописанными уидами и датами
2. quazare 3952 22.05.22 18:15 Сейчас в теме
(1) да, в БСП есть шаблон фонового задания для запуска доп.обработок
3. KRIHA 116 22.05.22 21:54 Сейчас в теме
а где тут вообще хоть строчка про БСП. что-то я видимо не внимательно смотрел.
4. ixijixi 2037 22.05.22 22:59 Сейчас в теме
(3) Ну как же: 3 строчки обращения к модулю РегламентныеЗаданияСервер )
AndryRV; 0x00; +2 Ответить
5. quazare 3952 23.05.22 04:11 Сейчас в теме
(3) в статье идет описание работы применения нескольких БСП-шных функций, ДобавитьЗадание, Задание, УдалитьЗадание.... они находятся в модуле РегламентныеЗаданияСервер
7. quazare 3952 23.05.22 06:45 Сейчас в теме
(6) внес исправление в статью, указав что "Весь функционал (начиная с создания программного расписания), уже можно размещать в дополнительной обработке".

"Ковырял конфигурацию" исключительно из-за примера создания шаблона рег.задания.
8. maksa2005 374 23.05.22 06:46 Сейчас в теме
(7) не лучший пример, но могу сказать что начинал Я так же. КАУСЬ(( Щас все перевел на внешние...
9. quazare 3952 23.05.22 06:49 Сейчас в теме
(8) как вы перевели собственный шаблон регламентного задания в расширение? и, да. возможно, стоило описать готовый функционал для запуска дополнительный обработок - цели такой не было.
10. maksa2005 374 23.05.22 06:50 Сейчас в теме
(9) Шаблон нету, но я скажу что на объекте где я работаю все новые фоновые задания исключительно висят во внешних обработках.
17. user673881_alexandr.kolomiychenko 27.06.22 09:43 Сейчас в теме
(10) Распылять кодовую базу по всяких обработках, так же как 1с распыляет печатные формы. Потом задним числом уже узнаешь что чтото работает не так. Код должен хранится в базе. Если уже 1с сделали разширения то нужно использовать их, а не вот этот бред.
18. maksa2005 374 27.06.22 09:46 Сейчас в теме
(17) За бред - взаимно) ну так и используете кучу расширений и когда на ваше место придет другой и увидит ужас тот что у Вас по 50 расширений скажет примерно это
Прикрепленные файлы:
19. user673881_alexandr.kolomiychenko 27.06.22 10:03 Сейчас в теме
(18) А кто заставляет на каждую обработку делать расширение? Может быть расширение на печатные формы, на фоновые задания, в общем то никто не заставляет вас все бить на 1001 расширение. Но хранить в бд код и выполнять его в наше время это какойто пипец... да еще это и рекомендации самого вендора.
20. maksa2005 374 27.06.22 10:05 Сейчас в теме
(19)делать отдельные расширение по их разновидности метода? о мой бог...и каждый раз вносить правки в расширение это бред какой-то.
21. user673881_alexandr.kolomiychenko 27.06.22 10:11 Сейчас в теме
(20) А правки в обработки вносить ненужно? Вносим только тогда когда узнаем что чтото не работает?
22. maksa2005 374 27.06.22 10:13 Сейчас в теме
(21) не знаю как у Вас, у меня есть бот который выгружает ошибки из журнала регистрации и я вижу что и где не работает или ошибка. доработки вношу в обработки, в том числе где интерфейсные. обновлять всегда расширение по 15 раз на день для 100 сотрудников такое еще занятие. притом на каждое обновление расширение храниться свой хеш старого расширение.
23. user673881_alexandr.kolomiychenko 27.06.22 10:18 Сейчас в теме
(22) Ну вот, это тестирование на пользователях. От чего я стараюсь максимально уйти, так же пытаюсь уходить от динамических обновлений. Обновления должны накатыватся в технологические перерывы, а не по 100 раз в день.
24. maksa2005 374 27.06.22 10:21 Сейчас в теме
(23)технологический перерыва у меня только в 00-00 (ночью)...ждать этого времени такое себе приключение.
Динамического обновление - это зло. Один раз сделайте "успешного его" и привет "бэкап".
Вся программа 1с - это тестирование. Любая Ваша доработка это тест. Идеальные "лежат в гробу")))
11. quazare 3952 23.05.22 06:58 Сейчас в теме
(10) Да, понятно о чем вы пишите. Если будет интерес у кого-то распишу данные возможности так же.
Прикрепленные файлы:
12. Vinzor 114 23.05.22 08:37 Сейчас в теме
Дмитрий, спасибо Вам большое.
13. quazare 3952 23.05.22 08:43 Сейчас в теме
Пожалуйста! Всегда готов помочь!
14. vld1973 97 23.05.22 09:53 Сейчас в теме
Спасибо за очередную статью по БСП.
15. quazare 3952 23.05.22 09:56 Сейчас в теме
Прошу так же обратить внимание на то, как я заполняю объект - РасписаниеРегламентногоЗадания();

заполнение массивов Дни и Месяцы... через .Добавить() - у вас не получится...
16. quazare 3952 27.05.22 08:38 Сейчас в теме
если хотите следить за моими новыми статьями БСП и не только - присоединяйтесь на мой канал
26. 1giga 17.12.23 17:38 Сейчас в теме
Кто-нибудь может объяснить как вообще работают регламентные задания безо всяких БСП в файловом режиме? кроме того, что создал РегламентноеЗадание в Конфигураторе, что ещё надо делать, чтобы оно работало? и как оно работает по умолчанию - под каждым запущеным пользователем?
27. RustIG 1896 15.02.24 22:44 Сейчас в теме
Привет, Дмитрий!
Как оцениваешь такие показатели статьи: просмотров 17 тыс, рейтинг 61, комментов 26.
Посмотри еще показатель - сколько новых аккаунтов посмотрело за последние 30 дней.
Вообще, правильнее в отдельной ветке такое обсуждать. Ну да ладно, что есть, то есть.
По факту, работы ты проделал много - а вот профита я не вижу. Так писать статьи можно только на голом энтузиазме - возможно количество статей уже перешло в качество - то есть в видимый и ощутимый профит.
Как удается зарабатывать на написаниях статей?
Оставьте свое сообщение