Выполнить отложенное обновление. Управляет процессом выполнения отложенных обработчиков обновления.
// Управляет процессом выполнения отложенных обработчиков обновления.
//
Процедура ВыполнитьОтложенноеОбновление() Экспорт
ОбщегоНазначения.ПриНачалеВыполненияРегламентногоЗадания();
Если ОбновлениеИнформационнойБазыСлужебныйПовтИсп.НеобходимоОбновлениеИнформационнойБазы() Тогда
Возврат;
КонецЕсли;
СведенияОбОбновлении = СведенияОбОбновленииИнформационнойБазы();
Если СведенияОбОбновлении.ВремяОкончаниеОтложенногоОбновления <> Неопределено Тогда
ОтключитьОтложенноеОбновление();
Возврат;
КонецЕсли;
Если СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = Неопределено Тогда
СведенияОбОбновлении.ВремяНачалаОтложенногоОбновления = ТекущаяДатаСеанса();
КонецЕсли;
Если ТипЗнч(СведенияОбОбновлении.НомерСеанса) <> Тип("СписокЗначений") Тогда
СведенияОбОбновлении.НомерСеанса = Новый СписокЗначений;
КонецЕсли;
СведенияОбОбновлении.НомерСеанса.Добавить(НомерСеансаИнформационнойБазы());
ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
// В сеансе регламентного задания проверка даты запрета изменения отключается.
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДатыЗапретаИзменения") Тогда
МодульДатыЗапретаИзмененияСлужебный = ОбщегоНазначения.ОбщийМодуль("ДатыЗапретаИзмененияСлужебный");
МодульДатыЗапретаИзмененияСлужебный.ПропуститьПроверкуЗапретаИзменения(Истина);
КонецЕсли;
ОбработчикиВыполнялись = Истина;
Попытка
Если ФорсироватьОбновление(СведенияОбОбновлении) Тогда
Если СведенияОбОбновлении.ОписаниеПотоков <> Неопределено Тогда
ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков, СведенияОбОбновлении);
КонецЕсли;
ОписаниеПотоков = НовоеОписаниеПотоковОбработчиковОтложенногоОбновления();
СведенияОбОбновлении.ОписаниеПотоков = ОписаниеПотоков;
Пока ОбработчикиВыполнялись Цикл
Поток = ДобавитьПотокОбработчикаОтложенногоОбновления(ОписаниеПотоков, СведенияОбОбновлении);
Если ТипЗнч(Поток) = Тип("СтрокаТаблицыЗначений") Тогда
ВыполнитьПоток(ОписаниеПотоков, Поток);
ОжидатьСвободныйПоток(ОписаниеПотоков, СведенияОбОбновлении);
ИначеЕсли Поток = Истина Тогда
ОжидатьЗавершениеЛюбогоПотока(ОписаниеПотоков, СведенияОбОбновлении);
ИначеЕсли Поток = Ложь Тогда
ОбработчикиВыполнялись = Ложь;
ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, СведенияОбОбновлении);
СохранитьСостояниеПотоковВСведенияОбОбновлении(ОписаниеПотоков, СведенияОбОбновлении);
Прервать;
КонецЕсли;
СохранитьСостояниеПотоковВСведенияОбОбновлении(ОписаниеПотоков, СведенияОбОбновлении);
Задание = РегламентныеЗаданияСервер.Задание(Метаданные.РегламентныеЗадания.ОтложенноеОбновлениеИБ);
ТребуетсяВыполнение = Задание.Расписание.ТребуетсяВыполнение(ТекущаяДатаСеанса());
Если Не ТребуетсяВыполнение Или Не ФорсироватьОбновление(СведенияОбОбновлении) Тогда
ОжидатьЗавершениеВсехПотоков(ОписаниеПотоков, СведенияОбОбновлении);
СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении);
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
ОбработчикиВыполнялись = ВыполнитьОтложенныйОбработчикОбновления(СведенияОбОбновлении);
ЗаписатьСведенияОбОбновленииИнформационнойБазы(СведенияОбОбновлении);
КонецЕсли;
Исключение
ЗаписатьОшибку(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ОтменитьВыполнениеВсехПотоков(СведенияОбОбновлении.ОписаниеПотоков, СведенияОбОбновлении);
СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении);
КонецПопытки;
Если Не ОбработчикиВыполнялись Или ВыполненыВсеОтложенныеОбработчики(СведенияОбОбновлении) Тогда
СохранитьСостояниеПотоковВСведенияОбОбновлении(Неопределено, СведенияОбОбновлении);
ОтключитьОтложенноеОбновление();
КонецЕсли;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////
ВыполнитьОтложенноеОбновлениеСейчас (БСП)
ВыполненаРегистрацияОтложенныхОбработчиковОбновления (БСП)
ВыполнитьОтложенныеОбработчики (БСП)
ВыполнитьОтложенныйОбработчик (БСП)
СтатусОтложенногоОбновления (БСП)
ПриВключенииОтложенногоОбновления (БСП)
ПроверитьСтатусОтложенногоОбновления (БСП)