ВыполнитьОтложенноеОбновление (БСП)

Автор: 1С
ОбщийМодуль.ОбновлениеИнформационнойБазыСлужебный
БСП

Выполнить отложенное обновление. Управляет процессом выполнения отложенных обработчиков обновления.

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

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2019, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

Рекомендации

Похожие публикации

ВыполнитьОтложенноеОбновлениеСейчас (БСП)

ВыполненаРегистрацияОтложенныхОбработчиковОбновления (БСП)

ВыполнитьОтложенныеОбработчики (БСП)

ВыполнитьОтложенныйОбработчик (БСП)

СтатусОтложенногоОбновления (БСП)

ПриВключенииОтложенногоОбновления (БСП)

ПроверитьСтатусОтложенногоОбновления (БСП)

СоставитьПланОтложенногоОбновления (БСП)

ОчередьОтложенногоОбработчикаОбновления (БСП)

Синтакс-помощник БСП с нейросетевым ассистентом