Обновить задания очереди по шаблонам. Обновляет задания очереди созданные на основе шаблонов.
/// Обновляет задания очереди созданные на основе шаблонов.
Процедура ОбновитьЗаданияОчередиПоШаблонам(Параметры = Неопределено) Экспорт
Если НЕ РаботаВМоделиСервиса.РазделениеВключено() Тогда
Возврат;
КонецЕсли;
Если Параметры = Неопределено Тогда
Параметры = Новый Структура;
Параметры.Вставить("МонопольныйРежим", Истина);
КонецЕсли;
ЗапускВМонопольномРежиме = Параметры.МонопольныйРежим;
Блокировка = Новый БлокировкаДанных;
Блокировка.Добавить("Справочник.ОчередьЗаданийОбластейДанных");
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ИзмененияШаблонов = ОбновитьШаблоныЗаданийОчереди(Параметры);
Если НЕ ЗапускВМонопольномРежиме
И Параметры.МонопольныйРежим Тогда
ОтменитьТранзакцию();
Возврат;
КонецЕсли;
Если ИзмененияШаблонов.Удаленные.Количество() > 0
ИЛИ ИзмененияШаблонов.ДобавленныеИзмененные.Количество() > 0 Тогда
// Удаление заданий по удаленным шаблонам.
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Очередь.Ссылка
|ИЗ
| Справочник.ОчередьЗаданийОбластейДанных КАК Очередь
|ГДЕ
| Очередь.Шаблон В(&УдаленныеШаблоны)");
Запрос.УстановитьПараметр("УдаленныеШаблоны", ИзмененияШаблонов.Удаленные);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Задание = Выборка.Ссылка.ПолучитьОбъект();
Задание.ОбменДанными.Загрузка = Истина;
Задание.Удалить();
КонецЦикла;
// Добавление заданий по добавленным шаблонам.
ДобавленныеИзмененные = ИзмененияШаблонов.ДобавленныеИзмененные;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Области.ОбластьДанныхВспомогательныеДанные КАК ОбластьДанных,
| Очередь.Ссылка КАК Идентификатор,
| Шаблоны.Ссылка КАК Шаблон,
| ЕСТЬNULL(Очередь.ДатаНачалаПоследнегоЗапуска, ДАТАВРЕМЯ(1, 1, 1)) КАК ДатаНачалаПоследнегоЗапуска,
| ЧасовыеПояса.Значение КАК ЧасовойПояс
|ИЗ
| РегистрСведений.ОбластиДанных КАК Области
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ШаблоныЗаданийОчереди КАК Шаблоны
| ПО (Шаблоны.Ссылка В (&ДобавленныеИзмененныеШаблоны))
| И (Области.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыОбластейДанных.Используется))
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ОчередьЗаданийОбластейДанных КАК Очередь
| ПО Области.ОбластьДанныхВспомогательныеДанные = Очередь.ОбластьДанныхВспомогательныеДанные
| И (Шаблоны.Ссылка = Очередь.Шаблон)
| ЛЕВОЕ СОЕДИНЕНИЕ Константа.ЧасовойПоясОбластиДанных КАК ЧасовыеПояса
| ПО Области.ОбластьДанныхВспомогательныеДанные = ЧасовыеПояса.ОбластьДанныхВспомогательныеДанные");
Запрос.УстановитьПараметр("ДобавленныеИзмененныеШаблоны", ДобавленныеИзмененные.ВыгрузитьКолонку("Ссылка"));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаШаблона = ДобавленныеИзмененные.Найти(Выборка.Шаблон, "Ссылка");
Если СтрокаШаблона = Неопределено Тогда
ШаблонСообщения = НСтр("ru = 'При обновлении не найден шаблон задания %1'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Выборка.Ссылка);
ВызватьИсключение(ТекстСообщения);
КонецЕсли;
Если ЗначениеЗаполнено(Выборка.Идентификатор) Тогда
Задание = Выборка.Идентификатор.ПолучитьОбъект();
Иначе
Задание = Справочники.ОчередьЗаданийОбластейДанных.СоздатьЭлемент();
Задание.Шаблон = Выборка.Шаблон;
Задание.ОбластьДанныхВспомогательныеДанные = Выборка.ОбластьДанных;
КонецЕсли;
Задание.Использование = СтрокаШаблона.Использование;
Задание.Ключ = СтрокаШаблона.Ключ;
Задание.ЗапланированныйМоментЗапуска =
ОчередьЗаданийСлужебный.ПолучитьЗапланированныйМоментЗапускаЗадания(
СтрокаШаблона.Расписание,
Выборка.ЧасовойПояс,
Выборка.ДатаНачалаПоследнегоЗапуска);
Если ЗначениеЗаполнено(Задание.ЗапланированныйМоментЗапуска) Тогда
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.Запланировано;
Иначе
Задание.СостояниеЗадания = Перечисления.СостоянияЗаданий.НеЗапланировано;
КонецЕсли;
Задание.Записать();
КонецЦикла;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ПриПолученииСпискаШаблонов (БСП)
СоздатьЗаданияОчередиПоШаблонамВТекущейОбласти (БСП)
ОбновитьДанныеЗависимыеОтПроизводственныхКалендарей (БСП)
Канал FastCode 1C в Телеграм! Шаблоны кода, статьи, полезные советы, курсы по 1С (8К участников)