Сброс расписания регламентных заданий

1. frkbvfnjh 787 12.08.22 05:13 Сейчас в теме
Всем привет! Столкнулся с тем, что при изменении расписания регламентного задания, это расписание в режиме предприятия не меняется. Кто подскажет, как по простому, программно сбросить расписание на то которое установлено в конфигураторе или типа на расписание по умолчанию? Хочу написать обработку с одной кнопкой, чтобы сбрасывалось расписание.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. THEBESTolo4b 10 12.08.22 05:17 Сейчас в теме
(1) заходишь Администрирование, регламентные и фоновые задания и там уже меняешь время отключаешь их.
3. frkbvfnjh 787 12.08.22 05:35 Сейчас в теме
(2) Собственно и задал этот вопрос, что бы не править расписание каждого регламента в ручную. Что интересно, через метаданные поле расписание как бы есть, но оно всегда имеет значение Неопределено. Как я понял разработчики платформы крайне ленивые люди, впрочем как и все.
4. laperuz 46 12.08.22 05:37 Сейчас в теме
(3)Ага, тоже полез в метаданные и удивился:)
РасписаниеРегламентногоЗадания сериализуется, поэтому можно сохранять куда-то значение по умолчанию, например, если конфигурация на БСП, в безопасное хранилище. И оттуда уже при необходимости доставать.
5. frkbvfnjh 787 12.08.22 05:48 Сейчас в теме
(4) Не совсем понимаю. Сохранить можно текущее расписание, но не факт что оно не менялось, мы ведь не можем проверить совпадает ли оно с тем, что изначально прописали в конфигураторе, т.к. нет доступа к расписанию через метаданные.
6. frkbvfnjh 787 12.08.22 05:51 Сейчас в теме
Написал в группу Телеграм Platform Suggester, что бы решили данную проблему, но сомневаюсь, что это случиться в ближайшее столетие
7. frkbvfnjh 787 12.08.22 06:04 Сейчас в теме
О, кажется есть идея - что если удалить регламентное задание и заново создать? Там в методе создания нужно передать объект метаданных, и судя по всему, в новом регламенте должно быть расписание по умолчанию...
14. frkbvfnjh 787 19.08.22 08:59 Сейчас в теме
(7) Не проканало :( Оказывается предопределенные нельзя удалять... Как я понял, на основании предопределенного, можно создать новое, оно не будет предопределенным и его можно будет удалить, а вот само предопределенное удалить нельзя и соответственно сбросить расписание таким способом для предопределенных не получится.
8. VPanin56 537 12.08.22 07:20 Сейчас в теме
Возможно немного не то, но у меня сделано подобное для кучи баз.
Есть самописка по управлению базами. ( их у нас уже под 250 шт. БП, ЗУП, БП Корп, БП отраслевые)
В ходе оптимизации нагрузки на сервер 1С заметил что очень много работает фоновых и начал копать регламентные. Обнаружил что очень много РЗ, которые по расписанию от разработчика стартуют каждые 60-100 сек, а было и каждые 15 сек. Естественно на нашем количестве баз это создает дополнительную ненужную нагрузку, а необходимости что бы они стартовали так часто точно нет. перевел их работу на ночное время без повторений и задумался как это распространить на 250 баз.

В нашего франкенштейна написал обработку.
Берем одну базу БП за эталон и администрируем в ней все регламентные задания. ненужные отключаем, у нужных выставляем правильное расписание.
В обработке:
1) читаем список регламентных заданий со всеми параметрами из базы эталона.
2) формируем список баз нужной конфигурации для исправления.
3) поочередно подключаемся ко всем базам через COM и устанавливаем параметры регламентных заданий как в базе эталон

вот кусок кода по такой установке
			Попытка
				Соединение = V8.Connect(СтрокаПодключения);
				
				РегламентныеИБ = Соединение.РегламентныеЗадания.ПолучитьРегламентныеЗадания();
				Для Каждого РегламентноеИБ из РегламентныеИБ Цикл
					Расписание = РегламентноеИБ.Расписание;
					
							
					
					Отбор = Новый Структура();
					Отбор.Вставить("Метаданные",РегламентноеИБ.Метаданные.Представление());
					Строки = СписокРегламентныхЗаданий.НайтиСтроки(Отбор);
					Если Строки.Количество() > 0 Тогда
						РегламентноеИБ.Расписание.BeginDate = Строки[0].Расписание.BeginDate;
						РегламентноеИБ.Расписание.BeginTime = Строки[0].Расписание.BeginTime;
						РегламентноеИБ.Расписание.CompletionInterval = Строки[0].Расписание.CompletionInterval;
						РегламентноеИБ.Расписание.CompletionTime = Строки[0].Расписание.CompletionTime;
						РегламентноеИБ.Расписание.DayInMonth = Строки[0].Расписание.DayInMonth;
						РегламентноеИБ.Расписание.DaysRepeatPeriod = Строки[0].Расписание.DaysRepeatPeriod;
						РегламентноеИБ.Расписание.EndDate = Строки[0].Расписание.EndDate;
						РегламентноеИБ.Расписание.EndTime = Строки[0].Расписание.EndTime;
						РегламентноеИБ.Расписание.RepeatPause = Строки[0].Расписание.RepeatPause;
						РегламентноеИБ.Расписание.RepeatPeriodInDay = Строки[0].Расписание.RepeatPeriodInDay;
						РегламентноеИБ.Расписание.WeekDayInMonth = Строки[0].Расписание.WeekDayInMonth;
						РегламентноеИБ.Расписание.WeeksPeriod = Строки[0].Расписание.WeeksPeriod;
						
						РегламентноеИБ.Use = Строки[0].Использование;
						РегламентноеИБ.Записать();
					Иначе
						Сообщить("Нет соответсвия в эталоне для "+РегламентноеИБ.Метаданные.Представление() + " поэтому вырубим его");	 
						РегламентноеИБ.Use = Ложь;
						РегламентноеИБ.Записать();

					КонецЕсли;
					
				КонецЦикла;
			Исключение
				Соединение  = Неопределено;	
				Сообщить(ОписаниеОшибки());
			КонецПопытки;
Показать
10. frkbvfnjh 787 12.08.22 14:40 Сейчас в теме
(8) Да, если есть эталон, тогда проще. За кусок кода по копированию расписания спасибо, может пригодиться.
11. VPanin56 537 12.08.22 14:45 Сейчас в теме
(10) за эталон берется любая текущая база и в ней админим регламентные задания.
С выходом обновлений периодически добавляются от разработчиков новые регламентные заданий, которые тоже начинают нагружать сервак своей частотой запуска.
12. VPanin56 537 12.08.22 14:49 Сейчас в теме
(10) вот кстати кусок как Эталон прочитать

Соединение = V8.Connect(СтрокаПодключения);
	Если Соединение = Неопределено Тогда
		Сообщить("Не удалось установить соединение с базой эталон");
		Возврат;
	КонецЕсли;     
	
	СписокРегламентныхЗаданий  = новый ТаблицаЗначений();
	СписокРегламентныхЗаданий.Колонки.Добавить("Метаданные");
	СписокРегламентныхЗаданий.Колонки.Добавить("Наименование");
	СписокРегламентныхЗаданий.Колонки.Добавить("Ключ");
	СписокРегламентныхЗаданий.Колонки.Добавить("Расписание");
	СписокРегламентныхЗаданий.Колонки.Добавить("Пользователь");
	СписокРегламентныхЗаданий.Колонки.Добавить("Предопределенное");
	СписокРегламентныхЗаданий.Колонки.Добавить("Использование");
	СписокРегламентныхЗаданий.Колонки.Добавить("Идентификатор");
	
	Попытка
		Регламентные = Соединение.РегламентныеЗадания.ПолучитьРегламентныеЗадания();
		Для Каждого Регламентное из Регламентные Цикл
			НоваяСтрока = СписокРегламентныхЗаданий.Добавить();
			НоваяСтрока.Метаданные = Регламентное.Метаданные.Представление();
			НоваяСтрока.Наименование = Регламентное.Наименование;
			НоваяСтрока.Ключ = Регламентное.Ключ;
			НоваяСтрока.Расписание = Регламентное.Расписание;
			НоваяСтрока.Пользователь = Регламентное.ИмяПользователя;
			НоваяСтрока.Предопределенное = Регламентное.Предопределенное;
			НоваяСтрока.Использование = Регламентное.Использование;
			НоваяСтрока.Идентификатор = Регламентное.УникальныйИдентификатор;
			
		КонецЦикла;
		Эталон = Истина;
	Исключение
		Соединение  = Неопределено;	
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
Показать
13. frkbvfnjh 787 13.08.22 18:12 Сейчас в теме
(12) Спасибо большое за всё!
9. winapi 60 12.08.22 08:09 Сейчас в теме
Если в конфигураторе укажите оба признака - "Предопределенное" и "Использование", тогда оно автоматически будет добавлено. Но так делать не рекомендуется, потомучто например из этой конфигурации может быть несколько баз (тестовая?) в одной нужен запуск, в другой нет. Поэтому лучше в консоли фоновых заданий добавлять.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот