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

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 в любом документе с помощью БСП

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

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

 

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

 

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

См. также

Загрузка табличного документа в таблицу значений. Пять строк кода, которые изменили мир

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

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

21.05.2024    9623    dimanich70    78    

117

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

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

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

28.12.2023    5414    mrXoxot    11    

104

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

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

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

30.11.2023    4566    ke.92@mail.ru    16    

64

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

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

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

28.08.2023    10742    YA_418728146    7    

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

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

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