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

16.03.22

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Расширение 1.1.5.1
.cfe 15,87Kb ver:1.1.5.1
89
89 Скачать (2 SM) Купить за 2 150 руб.
Конфигурирование новых регламентных заданий с помощью расширения:
.cfe 14,21Kb ver:1.0.0.1
48
48 Скачать (1 SM) Купить за 1 850 руб.

Всем привет.

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

Структура хранения данных следующая:

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

 

 

2. Для хранения настроек данного регламентного задания мы возьмем одноименный регистр сведений

 

 

Измерением выступает регламентное задание - ссылка на наше перечисление

Ресурсами: Использование (булево) - переключатель который отвечает за собственно работу регламентного задания

Расписание (ХранилищеЗначений) - информация о расписании выполнения регламентного задания (необязательно)

Идентификатор (Уникальный идентификатор) - Здесь сидит идентификатор самой регламентной задачи, которая была сгенерирована в момент записи в данном регистре. Вот этот реквизит по хорошему самый ВАЖНЫЙ здесь

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


Процедура ПередЗаписью(Отказ, Замещение)
	
	Для каждого Запись ИЗ ЭтотОбъект Цикл

		Задание = РегламентныеЗаданияСервер.Задание(Запись.Идентификатор);
		
		Если Задание = Неопределено Тогда 
				
			ПараметрыЗадания = Новый Структура;
			ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок);
			ПараметрыЗадания.Вставить("Использование", Запись.Использование);
			ПараметрыЗадания.Вставить("Наименование", Запись.РегламентноеЗадание);
			ПараметрыЗадания.Вставить("Ключ", Запись.Идентификатор);
			МассивПараметров = Новый Массив;
			МассивПараметров.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
			МассивПараметров.Добавить(Запись.РегламентноеЗадание);
			ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
			ПараметрыЗадания.Вставить("Расписание", Запись.Расписание.Получить());
			Задание = РегламентныеЗаданияСервер.ДобавитьЗадание(ПараметрыЗадания);
			
			Запись.Идентификатор = Задание.УникальныйИдентификатор;
			
		Иначе
			
			ПараметрыЗадания = Новый Структура;
			ПараметрыЗадания.Вставить("Метаданные", Метаданные.РегламентныеЗадания.ЗапускДополнительныхОбработок);
			ПараметрыЗадания.Вставить("Использование", Запись.Использование);
			ПараметрыЗадания.Вставить("Наименование", Запись.РегламентноеЗадание);
			ПараметрыЗадания.Вставить("Ключ", Запись.Идентификатор);
			МассивПараметров = Новый Массив;
			МассивПараметров.Добавить(Справочники.ДополнительныеОтчетыИОбработки.ПустаяСсылка());
			МассивПараметров.Добавить(Запись.РегламентноеЗадание);
			ПараметрыЗадания.Вставить("Параметры", МассивПараметров);
			ПараметрыЗадания.Вставить("Расписание", Запись.Расписание.Получить());
		
			РегламентныеЗаданияСервер.ИзменитьЗадание(Запись.Идентификатор, ПараметрыЗадания);  
			
		КонецЕсли;			
		
	КонецЦикла;
	
КонецПроцедуры

Прочитав код, вы наверняка догадались, что мы прикручиваемся к стандартному регламентному заданию "ЗапускДополнительныхОбработок", так как по смыслу оно ближе всех к нашей задаче из всей БСП. А также увидели, что здесь у нас создается регламентное задание, из которого Идентификатор присваивается нашему регистру для того, чтобы при дальнейшей перезаписи у нас изменялось созданное регламентное задание, а не генерировалось новое.

5. Следующим шагом нам надо в расширении подменить типовую процедуру, которая вызывается при запуске нашей регламентной задачи, для этого в модуле ДополнительныеОтчетыИОбработки с помощью расширения подменяем процедуру ВыполнитьОбработкуПоРегламентномуЗаданию:


&Вместо("ВыполнитьОбработкуПоРегламентномуЗаданию")
Процедура Лот_ВыполнитьОбработкуПоРегламентномуЗаданию(ВнешняяОбработка, ИдентификаторКоманды)

	Если ТипЗнч(ИдентификаторКоманды) = Тип("ПеречислениеСсылка.ЛР_РегламентныеЗаданияРасширения")  Тогда
		
       	Если ИдентификаторКоманды = Перечисления.ЛР_РегламентныеЗаданияРасширения.РегламентноеЗадание1 тогда
		
			ЛР_РегламентныеЗадания.ВыполнитьРегламентнуюЗадачу1Расширения();
			
		КонецЕсли;
		
	Иначе
		
		ПродолжитьВызов(ВнешняяОбработка, ИдентификаторКоманды);
		
	КонецЕсли;	 
	
КонецПроцедуры

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

6. Для удобства я использовал отдельную подсистему в расширении, чтоб вывести туда кнопку для настройки регламентных задач:

 

 

На форме записи регистра можно сразу управлять расписанием выполнения задачи в пользовательском режиме. Как сделать диалог расписания, расписывать здесь уже не буду, так как наверняка есть множество тем на этот счет, не является обязательным для работоспособности, да и не относится это к теме

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

 

 

Разработка велась на УТ11.5 (БСП 3.1.3.548), но думаю что подойдет для любой актуальной базы на БСП

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

Спасибо за внимание! И надеюсь, что в скором времени мы увидим полноценный типовой функционал регламентных задач в расширениях, без всяких обходных путей =)

 

upd: В версии 1.1.5.1 расширения

- при копировании записи в регистре ЛР_ПараметрыРегламентныхЗаданий не обнулялся идентификатор регламентного задания, в связи с чем новая настройка была связана со старой регламентной задачей - исправлено

- при удалении записи из регистра ЛР_ПараметрыРегламентныхЗаданий не удалялась запись из регламентных заданий информационной базы - исправлено

Расширение БСП Регламентные задания

См. также

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

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

1800 руб.

21.11.2024    158    1    0    

2

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

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

24.10.2024    1129    PROSTO-1C    0    

13

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

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    1007    PROSTO-1C    4    

12

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

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

04.10.2024    1856    MadRave    11    

24

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

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

10.09.2024    1849    MadRave    1    

17

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

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1267    n_mezentsev    10    

8

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

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4125    John_d    10    

52

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

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5379    PROSTO-1C    12    

52
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Torin 828 13.08.21 18:38 Сейчас в теме
вот за "можно накатить" точно + :)
2. Yashazz 4791 13.08.21 19:08 Сейчас в теме
Я не знаю понятия "регламентная задача". Это что-то из БСП?
3. folon 24 22.08.21 23:51 Сейчас в теме
Новое регламентное задание делается внешней обработкой за 1 минуту. Стандартный механизм БСП.
4. Barmi 4 11.10.21 18:53 Сейчас в теме
(3) Да. Но как из Внешней обработки запустить код из Расширения?
5. Aletar 20.10.21 11:46 Сейчас в теме
(4) А какие с этим проблемы? Объекты же расширения в контексте выполнения. По крайней мере у меня работает.
12. zhuntovda 1 13.04.22 10:29 Сейчас в теме
(3) Ну это еще больший костыль. Вязать расширение с внешней обработкой. Если у Вас масштабируемое решение на 10 и более баз.
NikeeNik; +1 Ответить
23. st8899 07.03.24 15:05 Сейчас в теме
(3) это если бсп не "обрезанная", как в некоторых отраслевых конфах от 1С..
6. user644000_mobival 24.11.21 13:27 Сейчас в теме
Выдает ошибку.
{ОбщийМодуль.РегламентныеЗаданияСервер.Модуль(591)}: Ошибка при вызове метода контекста (Записать)
Задание.Записать();
по причине:
Расписание регламентного задания не задано
Расписание регламентного задания не задано
В строке ПараметрыЗадания.Вставить("Расписание", Запись.Расписание.Получить());
hammeru; BARDER; +2 Ответить
18. Ankare 103 13.01.23 15:26 Сейчас в теме
(6) не забывайте указывать расписание через гиперссылку перед записью, ошибки тогда не будет
7. ybatiaev 59 21.12.21 20:05 Сейчас в теме
8. micha26 27.01.22 09:33 Сейчас в теме
Не совсем понял это откуда:
ЛР_РегламентныеЗадания.ВыполнитьРегламентнуюЗадачу1Расширения();
user2070470; +1 Ответить
9. BARDER 25 03.03.22 17:22 Сейчас в теме
Написали бы хотя бы что ниже 8.3.16 платформу расширение не воспринимает!
10. Progart 01.04.22 13:57 Сейчас в теме
11. zhuntovda 1 13.04.22 10:27 Сейчас в теме
Решил аналогично задачу. Думал статью написать, да поздно =) Таким образом можно паразитировать на любом регламентном задание, три требования: 1. наличие параметров (что бы отловить свои регламенты) 2. Желательно, что бы регламент имел постоянную основу в БСП (для простоты поддержки) 3. регламент должен быть не предопределенным (желательно, что бы не было мешанины)

Костыль, но хорош черт возьми)
13. Ankare 103 14.04.22 12:51 Сейчас в теме
(11) с учетом того что 95% + решений содержат БСП, почему бы и нет, чем заморачиваться с морально устаревающими внешними обработками
14. MoonAriman 12 23.06.22 11:08 Сейчас в теме
Спасибо! Очень сэкономило время. Подключил без проблем к ЗУП 3.1.18.513
15. Ankare 103 26.06.22 17:42 Сейчас в теме
(14) Рад помочь! Спасибо за обратную связь
16. webresurs 228 14.12.22 14:40 Сейчас в теме
подскажите пожалуйста, что прописать в общие модули "Процедура ВыполнитьРегламентнуюЗадачу1Расширения() Экспорт" для выполнения обработки "ВыгрузкаОстатков" добавленного в это расширение ?

- так правильно будет?

	ИмяСобытия = НСтр("ru = 'Выгрузка Остатков Из Базы'", Обработки.ВыгрузкаОстатков.Создать());
		Обработка = Обработки.ВыгрузкаОстатков.Создать();
		Обработка.РежимОбмена = "Выгрузка";	
		Обработка.ДатаОстатков	 = ТекущаяДата();
		Обработка.ЗагрузитьПравилаОбмена();
		Обработка.ВыполнитьВыгрузку();
	Комментарий = НСтр("ru = 'Задание выполнено'", Обработки.ВыгрузкаОстатков.Создать());
	ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Примечание, , , Комментарий);
Показать
17. Ankare 103 13.01.23 15:22 Сейчас в теме
(16) немного не по теме, но по идее в журнал регистрации и так попадут записи о начале и окончании регламентного фонового задания
19. quazare 3802 27.01.23 16:58 Сейчас в теме
Немного по теме так сказать - все основы лежат в бсп - https://infostart.ru/1c/articles/1663091/
20. nickstrelets 26.10.23 22:00 Сейчас в теме
Метод
ВыполнитьОбработкуПоРегламентномуЗаданию
можно добавить с аннотацией
&Перед

И для работы такой схемы в расширении - надо снять у него Безопасный режим.
Oxygraphis; +1 Ответить
21. RustIG 1747 15.02.24 22:16 Сейчас в теме
В версии 8.3.23 появится возможность создавать регламентные задания в расширениях конфигурации

https://wonderland.v8.1c.ru/blog/razvitie-rasshireniy-8323/
а вообще, молодцы, что в свое время написали - по другому делать, видимо, было нельзя!
22. st8899 07.03.24 15:03 Сейчас в теме
нафига это, если в расширении и так можно добавлять свои рег задания.
SweetAppleWine; +1 Ответить
25. Oxygraphis 20.03.24 13:24 Сейчас в теме
(22) В версии 8.3.23 появилась возможность создавать регламентные задания. Когда была написана данная статья 23 платформы еще не было, 23 режим совместимости в типовых конфигурациях даже сейчас не появился, про снятые с поддержки конфигурации я вообще молчу.
26. Xershi 1555 01.04.24 13:34 Сейчас в теме
(25) проверил на 1С:Предприятие 8.3 (8.3.23.1688) в режиме совместимости Версия 8.3.12.
Регламентное задание добавилось и отработало!
Думал тоже эту приблуду использовать, но не понадобилось.
Настройки благо хранить не нужно!
27. Oxygraphis 03.04.24 14:08 Сейчас в теме
(26) Я тоже сейчас проверил и оно и правда работает! Логике работы с режимами совместимости это не поддается. Я проверил как будет себя вести добавленное в 23 платформе регламентное задание при запуске предприятия под 22 платформой, ответ - никак, предприятие на 22 платформе не видит регламентные в расширении добавленные на 23 платформе. Интересная особенность, буду пользоваться на свой страх и риск.
24. Oxygraphis 20.03.24 13:19 Сейчас в теме
Я бы только захватывал в расширение не &Вместо, а &После. Ну и добавил бы проверку

Если ВнешняяОбработка = Неопределено Тогда

// Наш код обработчиков по регламентному заданию

КонецЕсли;

чтобы точно типовой механизм не сломать.
28. azamatagent1c 25.06.24 09:52 Сейчас в теме
Добрый день,

адаптировал приложенные расширения для своего регламентного задания, задание настраивается и записывается в регистр, расписание настроено, но оно не работает. В списке регламентных и фоновых заданий в колонке "Состояние" = Неопределено. Если выполнить принудительно по кнопке "Выполнить сейчас" то происходит обработка, статус меняется на "Выполнено", но самой обработки (вызов серверной процедуры в общем модуле) не происходит. В чем может быть причина? База подключена к облаку (веб-клиент), доступа к конфигуратору нет.
29. Ankare 103 25.06.24 14:27 Сейчас в теме
(28)
если есть возможность, попробуйте на локальной копии базы данных настроить регламент. может бага платформы облака
а еще я бы предложил проверить работоспособность иных подключаемых регламентов через внешние обработки
30. azamatagent1c 26.06.24 06:41 Сейчас в теме
(29) В локальной базе работает отлично, видимо через веб-клиент проблемно.
31. Ankare 103 26.06.24 11:23 Сейчас в теме
(30) за регламент отвечает конечно не клиентская часть, а серверная. соответственно вопрос скорее нужно адресовать облачному провайдеру
Оставьте свое сообщение