Помощник настройки синхронизации данных / Повторная синхронизация данных перед запуском / Модуль формы

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

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	УзелИнформационнойБазы = ОбменДаннымиСервер.ГлавныйУзел();
	ЭтоАвтономноеРабочееМесто = ОбменДаннымиСервер.ЭтоАвтономноеРабочееМесто();
	ИмяПользователя = ПользователиИнформационнойБазы.ТекущийПользователь().Имя;
	
	Если УзелИнформационнойБазы = Неопределено Тогда
		
		ВызватьИсключение НСтр("ru = 'Эта информационная база не является распределенной или автономным рабочим местом.'", ОбщегоНазначения.КодОсновногоЯзыка());
		
	КонецЕсли;
	
	Если ЭтоАвтономноеРабочееМесто Тогда
		Элементы.СтраницыПараметрыПодключения.ТекущаяСтраница = Элементы.СтраницаАРМ;
		МодульАвтономнаяРабота = ОбщегоНазначения.ОбщийМодуль("АвтономнаяРабота");
		АдресДляВосстановленияПароляУчетнойЗаписи = МодульАвтономнаяРабота.АдресДляВосстановленияПароляУчетнойЗаписи();
		ДлительнаяОперацияРазрешена = Истина;
				
		Если ТранспортСообщенийОбмена.ПарольСинхронизацииДанныхЗадан(УзелИнформационнойБазы) Тогда
			ДанныеАутентификации = ТранспортСообщенийОбмена.ПарольСинхронизацииДанных(УзелИнформационнойБазы);
			Пароль = ДанныеАутентификации.Пароль;
		КонецЕсли;	
		
	КонецЕсли;
	
	ЗаполнитьИнформациюОСообщенииИзАрхиваНаСервере();
	
	НадписьИмяУзла = НСтр("ru = 'Не удалось установить обновление программы, полученное из
		|""%1"".
		|Техническую информацию см. в <a href = ""%2"">Журнале регистрации</a>.'");
	Элементы.ИнформационнаяНадписьИмяУзла.Заголовок = 
		СтроковыеФункции.ФорматированнаяСтрока(НадписьИмяУзла, Строка(УзелИнформационнойБазы), "ЖурналРегистрации");
	
	УстановитьОтображениеЭлементовФормы();
	
КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключитьОбработчикОжидания("ЗаполнитьИнформациюОСообщенииИзАрхива", 60, Ложь);
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

&НаКлиенте
Процедура ИнформационнаяНадписьИмяУзлаОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ПараметрыФормы = Новый Структура;
	
	ОткрытьФорму("Обработка.ЖурналРегистрации.Форма.ЖурналРегистрации", ПараметрыФормы,,,,,,
		РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ПродолжитьЗагрузкуСообщениемИзАрхиваПриИзменении(Элемент)
	
	Элементы.СтраницыПараметрыПодключения.Видимость = Не ПродолжитьЗагрузкуСообщениемИзАрхива;
	
КонецПроцедуры

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура СинхронизироватьИПродолжить(Команда)
	
	ТекстПредупреждения = "";
	ЕстьОшибки = Ложь;
	
	ПроверитьНеобходимостьОбновления();
	
	Если СтатусОбновления = "ОбновлениеНеТребуется" Тогда
		
		СинхронизироватьИПродолжитьБезОбновленияИБ();
		
	ИначеЕсли СтатусОбновления = "ОбновлениеИнформационнойБазы" Тогда
		
		СинхронизироватьИПродолжитьСОбновлениемИБ();
		
	ИначеЕсли СтатусОбновления = "ОбновлениеКонфигурации" Тогда
		
		ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые еще не применены.
			|Требуется открыть конфигуратор и обновить конфигурацию базы данных.'");
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НеСинхронизироватьИПродолжить(Команда)
	
	НеСинхронизироватьИПродолжитьНаСервере();
	
	Закрыть("Продолжить");
	
КонецПроцедуры

&НаКлиенте
Процедура ЗавершитьРаботу(Команда)
	
	Если ЗначениеЗаполнено(ПараметрыОбработчикаОбмена) Тогда
		ОтменитьВыполнениеЗадания(ПараметрыОбработчикаОбмена.ИдентификаторОперации);
	КонецЕсли;

	ОтключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ");
	ОтключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлением");

	Закрыть();
		
КонецПроцедуры

&НаКлиенте
Процедура ПараметрыПодключения(Команда)

	ПараметрыФормы = Новый Структура("Корреспондент", УзелИнформационнойБазы);
	
	ОткрытьФорму("Справочник.НастройкиТранспортаСообщенийОбмена.Форма.ПанельНастроекТранспорта",
		ПараметрыФормы,,,,,, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗабылиПароль(Команда)
	ТранспортСообщенийОбменаКлиент.ОткрытьИнструкциюКакИзменитьПарольСинхронизацииДанных(АдресДляВосстановленияПароляУчетнойЗаписи);
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьСообщениеИзАрхива(Команда)
	
	Если Не ЗначениеЗаполнено(ПериодЗаписиАрхивногоСообщения) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'Архивное сообщение отсутствует'"));
		Возврат;
	КонецЕсли;
	
	СтруктураЗаписи = Новый Структура("Период, УзелИнформационнойБазы", ПериодЗаписиАрхивногоСообщения, УзелИнформационнойБазы);
	
	ТипЗначения = Тип("РегистрСведенийКлючЗаписи.АрхивСообщенийОбменов");
	ПараметрыЗаписи = Новый Массив(1);
	ПараметрыЗаписи[0] = СтруктураЗаписи;
	
	КлючЗаписи = Новый(ТипЗначения, ПараметрыЗаписи);
	
	ПараметрыЗаписи = Новый Структура;
	ПараметрыЗаписи.Вставить("Ключ", КлючЗаписи);
	
	ОткрытьФорму("РегистрСведений.АрхивСообщенийОбменов.Форма.ФормаЗаписи", 
		ПараметрыЗаписи,
		ЭтотОбъект,
		УникальныйИдентификатор);
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

////////////////////////////////////////////////////////////////////////////////
// Сценарий без обновления информационной базы.

&НаКлиенте
Процедура СинхронизироватьИПродолжитьБезОбновленияИБ()
	
	ПодключитьОбработчикОжидания("ПриНачалеЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ", 0.1, Истина);
	
	НастройкаЭлементовФормыДлительнойОперации(Истина);

КонецПроцедуры

&НаКлиенте
Процедура ПриНачалеЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ()
	
	ПродолжитьОжидание = Истина;
	ПриНачалеЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБНаСервере(ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияОбмена);
		
		ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ",
			ПараметрыОбработчикаОжиданияОбмена.ТекущийИнтервал, Истина);
	Иначе
		ПодключитьОбработчикОжидания("ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ", 0.1, Истина);
	КонецЕсли;

КонецПроцедуры

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

&НаКлиенте
Процедура ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБНаСервере(ПараметрыОбработчикаОбмена, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияОбмена);
		
		ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ",
			ПараметрыОбработчикаОжиданияОбмена.ТекущийИнтервал, Истина);
	Иначе
		ПодключитьОбработчикОжидания("ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ", 0.1, Истина);
	КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриОжиданииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБНаСервере(ПараметрыОбработчика, ПродолжитьОжидание)
	
	МодульПомощникСозданияОбменаДанными = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	МодульПомощникСозданияОбменаДанными.ПриОжиданииЗагрузкиСообщенияПередОбновлениемИнформационнойБазы(ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБ()
	
	СообщениеОбОшибке = "";
	
	ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиБезОбновленияИБНаСервере(ПараметрыОбработчикаОбмена, СообщениеОбОшибке);
	
	Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке,,,, ЕстьОшибки);
	КонецЕсли;
	
	СинхронизироватьИПродолжитьБезОбновленияИБЗавершение();
	
	СинхронизироватьИПродолжитьЗавершение();
	
КонецПроцедуры

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

КонецПроцедуры  

&НаСервере
Процедура СинхронизироватьИПродолжитьБезОбновленияИБЗавершение()
	
	// Режим повтора требует включения в следующих случаях.
	// Случай 1. Получены метаданные с новой версией конфигурации, т.е. будет выполнено обновление ИБ.
	// Е если Отказ = Истина, тогда недопустимо продолжение, т.к. могут быть созданы дубли генерируемых данных,
	// - если Отказ = Ложь, тогда возможна ошибка при обновлении ИБ, возможно требующая повторной загрузки сообщения.
	// Случай 2. Получены метаданные с той же версией конфигурации, т.е. не будет выполнено обновление ИБ.
	// Е если Отказ = Истина, тогда возможна ошибка при продолжении запуска, например, из-за того, что
	//   не были загружены предопределенные элементы,
	// - если Отказ = Ложь, тогда продолжение возможно, т.к. выгрузку можно сделать позднее (если же
	//   выгрузка не выполняется успешно, тогда позднее можно получить и новое сообщение для загрузки).
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если Не ЕстьОшибки Тогда
		
		Возврат;
		
	ИначеЕсли КонфигурацияИзменена() Тогда
		Если НЕ Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда
			Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Истина);
		КонецЕсли;
		ТекстПредупреждения = НСтр("ru = 'Из главного узла получены изменения, которые нужно применить.
			|Требуется открыть конфигуратор и обновить конфигурацию базы данных.'");
	Иначе
		
		Если ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда
			ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском();
		КонецЕсли;
		
		ТекстПредупреждения = НСтр("ru = 'Получение данных из главного узла завершилось с ошибками.
			|Подробности см. в журнале регистрации.'");
		
		ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском("ЗагрузкаРазрешена", Ложь);
		
	КонецЕсли;
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// Сценарий с обновлением информационной базы.

&НаКлиенте
Процедура СинхронизироватьИПродолжитьСОбновлениемИБ()
	
	ПодключитьОбработчикОжидания("ПриНачалеЗагрузкиСообщенияОбменаДаннымиСОбновлением", 0.1, Истина);
	
	НастройкаЭлементовФормыДлительнойОперации(Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриНачалеЗагрузкиСообщенияОбменаДаннымиСОбновлением()
	
	ПродолжитьОжидание = Истина;
	ПриНачалеЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ИнициализироватьПараметрыОбработчикаОжидания(
			ПараметрыОбработчикаОжиданияОбмена);
		
		ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлением",
			ПараметрыОбработчикаОжиданияОбмена.ТекущийИнтервал, Истина);
	Иначе
		ПодключитьОбработчикОжидания("ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлением", 0.1, Истина);
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПриНачалеЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПродолжитьОжидание) 
	
	ДанныеАутентификации = Новый Структура;
	
	Если ЭтоАвтономноеРабочееМесто Тогда
		ДанныеАутентификации.Вставить("ИмяПользователя", ИмяПользователя);
		ДанныеАутентификации.Вставить("Пароль", Пароль);
	КонецЕсли;

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

&НаКлиенте
Процедура ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлением()
	
	ПродолжитьОжидание = Ложь;
	ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПараметрыОбработчикаОбмена, ПродолжитьОжидание);
	
	Если ПродолжитьОжидание Тогда
		ОбменДаннымиКлиент.ОбновитьПараметрыОбработчикаОжидания(ПараметрыОбработчикаОжиданияОбмена);
		
		ПодключитьОбработчикОжидания("ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлением",
			ПараметрыОбработчикаОжиданияОбмена.ТекущийИнтервал, Истина);
	Иначе
		ПодключитьОбработчикОжидания("ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлением", 0.1, Истина);
	КонецЕсли;

КонецПроцедуры  

&НаСервереБезКонтекста
Процедура ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПараметрыОбработчика, ПродолжитьОжидание)
	
	МодульПомощникСозданияОбменаДанными = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	МодульПомощникСозданияОбменаДанными.ПриОжиданииЗагрузкиСообщенияОбменаДаннымиСОбновлением(ПараметрыОбработчика, ПродолжитьОжидание);
	
КонецПроцедуры

&НаКлиенте
Процедура ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлением()
	
	СообщениеОбОшибке = "";
	
	ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПараметрыОбработчикаОбмена, СообщениеОбОшибке);
	
	Если Не ПустаяСтрока(СообщениеОбОшибке) Тогда
		ОбщегоНазначенияКлиент.СообщитьПользователю(СообщениеОбОшибке,,,, ЕстьОшибки);
	КонецЕсли;
	
	СинхронизироватьИПродолжитьСОбновлениемИБЗавершение();
	
	СинхронизироватьИПродолжитьЗавершение();

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлениемНаСервере(ПараметрыОбработчика, СообщениеОбОшибке)
	
	СтатусЗавершения = Неопределено;
	
	МодульПомощникСозданияОбменаДанными = ОбменДаннымиСервер.МодульПомощникСозданияОбменаДанными();
	МодульПомощникСозданияОбменаДанными.ПриЗавершенииЗагрузкиСообщенияОбменаДаннымиСОбновлением(ПараметрыОбработчика, СтатусЗавершения);
	
	Если СтатусЗавершения.Отказ Тогда
		СообщениеОбОшибке = СтатусЗавершения.СообщениеОбОшибке;
	Иначе
		Если СтатусЗавершения.Результат <> Неопределено И СтатусЗавершения.Результат.Отказ Тогда
			СообщениеОбОшибке = СтатусЗавершения.Результат.СообщениеОбОшибке;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры  

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

////////////////////////////////////////////////////////////////////////////////
// Сценарий без синхронизации

&НаСервере
Процедура НеСинхронизироватьИПродолжитьНаСервере()
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если НЕ ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда
		Если Константы.ЗагрузитьСообщениеОбменаДанными.Получить() Тогда
			Константы.ЗагрузитьСообщениеОбменаДанными.Установить(Ложь);
			ОбменДаннымиСервер.ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла();
		КонецЕсли;
	КонецЕсли;
	
	ОбменДаннымиСервер.УстановитьРежимЗагрузкиСообщенияОбменаДаннымиПередЗапуском(
		"ПропуститьЗагрузкуСообщенияОбменаДаннымиПередЗапуском", Истина);
	
КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// Служебные процедуры и функции.

&НаСервере
Процедура ПроверитьНеобходимостьОбновления()
	
	УстановитьПривилегированныйРежим(Истина);
	
	Если КонфигурацияИзменена() Тогда
		СтатусОбновления = "ОбновлениеКонфигурации";
	ИначеЕсли ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы() Тогда
		СтатусОбновления = "ОбновлениеИнформационнойБазы";
	Иначе
		СтатусОбновления = "ОбновлениеНеТребуется";
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура СинхронизироватьИПродолжитьЗавершение()
	
	УстановитьОтображениеЭлементовФормы();
	
	Если ПустаяСтрока(ТекстПредупреждения) Тогда
		
		ПоказатьОповещениеПользователя(НСтр("ru = 'Автономная работа'"),
			,
			НСтр("ru = 'Повторная синхронизация данных завершена.'"),
			БиблиотекаКартинок.Информация32,
			СтатусОповещенияПользователя.Важное);
		
		Закрыть("Продолжить");
	Иначе
		ПоказатьПредупреждение(, ТекстПредупреждения);
	КонецЕсли;
	
КонецПроцедуры

// Устанавливает признак повторения загрузки при ошибке загрузки или обновления.
// Очищает хранилище сообщения обмена, полученного из главного узла РИБ.
//
&НаСервере
Процедура ВключитьПовторениеЗагрузкиСообщенияОбменаДаннымиПередЗапуском()
	
	ОбменДаннымиСервер.ОчиститьСообщениеОбменаДаннымиИзГлавногоУзла();
	
	Константы.ПовторитьЗагрузкуСообщенияОбменаДаннымиПередЗапуском.Установить(Истина);
	
КонецПроцедуры

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

&НаКлиенте
Процедура ЗаполнитьИнформациюОСообщенииИзАрхива()
	
	ЗаполнитьИнформациюОСообщенииИзАрхиваНаСервере();
	
КонецПроцедуры  

&НаСервере
Процедура ЗаполнитьИнформациюОСообщенииИзАрхиваНаСервере()
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	АрхивСообщенийОбменовСрезПоследних.Период КАК Период
	|ИЗ
	|	РегистрСведений.АрхивСообщенийОбменов.СрезПоследних(, УзелИнформационнойБазы = &УзелИнформационнойБазы) КАК АрхивСообщенийОбменовСрезПоследних";
	
	Запрос.УстановитьПараметр("УзелИнформационнойБазы", УзелИнформационнойБазы);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Если РезультатЗапроса.Пустой() Тогда 
		Элементы.ОткрытьСообщениеИзАрхива.Заголовок = НСтр("ru = '<Сообщение в архиве отсутствует>'");
		Элементы.ПродолжитьЗагрузкуСообщениемИзАрхива.ТолькоПросмотр = Истина;
		
		ПродолжитьЗагрузкуСообщениемИзАрхива = Ложь;
		ПериодЗаписиАрхивногоСообщения = Дата(1,1,1);
	Иначе
		Выборка = РезультатЗапроса.Выбрать();
		Выборка.Следующий();
		
		Элементы.ОткрытьСообщениеИзАрхива.Заголовок = СтрШаблон(НСтр("ru = 'Архивное сообщение от %1.'"), Формат(Выборка.Период, "ДЛФ=DT"));
		Элементы.ПродолжитьЗагрузкуСообщениемИзАрхива.ТолькоПросмотр = Ложь;
		
		ПериодЗаписиАрхивногоСообщения = Выборка.Период;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура НастройкаЭлементовФормыДлительнойОперации(ДлительнаяОперацияВыполняется)
	
	Если ДлительнаяОперацияВыполняется Тогда
		Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.ДлительнаяОперация;
		Элементы.ГруппаКнопокОсновная.Видимость = Ложь;
		Элементы.ГруппаКнопокДлительнаяОперация.Видимость = Истина;
	Иначе
		Элементы.ПанельОсновная.ТекущаяСтраница = Элементы.Начало; 
		Элементы.ГруппаКнопокОсновная.Видимость = Истина;
		Элементы.ГруппаКнопокДлительнаяОперация.Видимость = Ложь;
	КонецЕсли;

КонецПроцедуры

&НаСервереБезКонтекста
Процедура ОтменитьВыполнениеЗадания(Знач ИДЗадания)
	
	ДлительныеОперации.ОтменитьВыполнениеЗадания(ИДЗадания);
	
КонецПроцедуры

#КонецОбласти

Связанные материалы