Всем привет! Столкнулся с тем, что при изменении расписания регламентного задания, это расписание в режиме предприятия не меняется. Кто подскажет, как по простому, программно сбросить расписание на то которое установлено в конфигураторе или типа на расписание по умолчанию? Хочу написать обработку с одной кнопкой, чтобы сбрасывалось расписание.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(2) Собственно и задал этот вопрос, что бы не править расписание каждого регламента в ручную. Что интересно, через метаданные поле расписание как бы есть, но оно всегда имеет значение Неопределено. Как я понял разработчики платформы крайне ленивые люди, впрочем как и все.
(7) Не проканало :( Оказывается предопределенные нельзя удалять... Как я понял, на основании предопределенного, можно создать новое, оно не будет предопределенным и его можно будет удалить, а вот само предопределенное удалить нельзя и соответственно сбросить расписание таким способом для предопределенных не получится.
Возможно немного не то, но у меня сделано подобное для кучи баз.
Есть самописка по управлению базами. ( их у нас уже под 250 шт. БП, ЗУП, БП Корп, БП отраслевые)
В ходе оптимизации нагрузки на сервер 1С заметил что очень много работает фоновых и начал копать регламентные. Обнаружил что очень много РЗ, которые по расписанию от разработчика стартуют каждые 60-100 сек, а было и каждые 15 сек. Естественно на нашем количестве баз это создает дополнительную ненужную нагрузку, а необходимости что бы они стартовали так часто точно нет. перевел их работу на ночное время без повторений и задумался как это распространить на 250 баз.
В нашего франкенштейна написал обработку.
Берем одну базу БП за эталон и администрируем в ней все регламентные задания. ненужные отключаем, у нужных выставляем правильное расписание.
В обработке:
1) читаем список регламентных заданий со всеми параметрами из базы эталона.
2) формируем список баз нужной конфигурации для исправления.
3) поочередно подключаемся ко всем базам через COM и устанавливаем параметры регламентных заданий как в базе эталон
вот кусок кода по такой установке
Есть самописка по управлению базами. ( их у нас уже под 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) вот кстати кусок как Эталон прочитать
Соединение = V8.Connect(СтрокаПодключения);
Если Соединение = Неопределено Тогда
Сообщить("Не удалось установить соединение с базой эталон");
Возврат;
КонецЕсли;
СписокРегламентныхЗаданий = новый ТаблицаЗначений();
СписокРегламентныхЗаданий.Колонки.Добавить("Метаданные");
СписокРегламентныхЗаданий.Колонки.Добавить("Наименование");
СписокРегламентныхЗаданий.Колонки.Добавить("Ключ");
СписокРегламентныхЗаданий.Колонки.Добавить("Расписание");
СписокРегламентныхЗаданий.Колонки.Добавить("Пользователь");
СписокРегламентныхЗаданий.Колонки.Добавить("Предопределенное");
СписокРегламентныхЗаданий.Колонки.Добавить("Использование");
СписокРегламентныхЗаданий.Колонки.Добавить("Идентификатор");
Попытка
Регламентные = Соединение.РегламентныеЗадания.ПолучитьРегламентныеЗадания();
Для Каждого Регламентное из Регламентные Цикл
НоваяСтрока = СписокРегламентныхЗаданий.Добавить();
НоваяСтрока.Метаданные = Регламентное.Метаданные.Представление();
НоваяСтрока.Наименование = Регламентное.Наименование;
НоваяСтрока.Ключ = Регламентное.Ключ;
НоваяСтрока.Расписание = Регламентное.Расписание;
НоваяСтрока.Пользователь = Регламентное.ИмяПользователя;
НоваяСтрока.Предопределенное = Регламентное.Предопределенное;
НоваяСтрока.Использование = Регламентное.Использование;
НоваяСтрока.Идентификатор = Регламентное.УникальныйИдентификатор;
КонецЦикла;
Эталон = Истина;
Исключение
Соединение = Неопределено;
Сообщить(ОписаниеОшибки());
КонецПопытки;
Показать
Если в конфигураторе укажите оба признака - "Предопределенное" и "Использование", тогда оно автоматически будет добавлено. Но так делать не рекомендуется, потомучто например из этой конфигурации может быть несколько баз (тестовая?) в одной нужен запуск, в другой нет. Поэтому лучше в консоли фоновых заданий добавлять.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот