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

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

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

&НаСервереБезКонтекста
Функция ТекстИзМакетаУсловияРаспространенияОбновлений()

	КодТекущегоЯзыка = ?(ТипЗнч(ТекущийЯзык()) = Тип("Строка"), ТекущийЯзык(), ТекущийЯзык().КодЯзыка);
	ИмяМакета = "УсловияРаспространенияОбновлений";
	
	ИнформационныйМакет = Неопределено;
	Если Метаданные.Языки.Количество() > 0 Тогда
		ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти(
			СтрШаблон("%1_%2", ИмяМакета, КодТекущегоЯзыка));
	КонецЕсли;
	
	Если ИнформационныйМакет = Неопределено Тогда
		ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти(ИмяМакета);
	КонецЕсли;
	
	Если ИнформационныйМакет = Неопределено Тогда
		ИнформационныйМакет = Метаданные.Обработки.ЛегальностьПолученияОбновлений.Макеты.Найти(
			СтрШаблон("%1_%2", ИмяМакета, ОбщегоНазначения.КодОсновногоЯзыка()));
	КонецЕсли;
	
	Если ИнформационныйМакет = Неопределено Тогда
			ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = 'В обработке %1 отсутствует макет %2. Требуется добавить его в конфигурацию.'"),
				Метаданные.Обработки.ЛегальностьПолученияОбновлений.Имя, ИмяМакета);
			ВызватьИсключение(ТекстОшибки, КатегорияОшибки.ОшибкаКонфигурации);
 	КонецЕсли;
	
	МакетДокумента = Обработки.ЛегальностьПолученияОбновлений.ПолучитьМакет(
		ИнформационныйМакет.Имя);
	
	Возврат МакетДокумента.ПолучитьТекст();
	
КонецФункции

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПодтвердитьЛегальностьПолученияОбновления()
	
	СтандартныеПодсистемыКлиент.УстановитьХранениеФормы(ЭтотОбъект, Ложь);
	
	ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, Истина);
	
КонецПроцедуры

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

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

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