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

#Область ОписаниеПеременных

&НаКлиенте
Перем ОбновитьИнтерфейс;

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

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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ПодключитьОбработчикОжидания("УстановитьВидимостьОбработчикОжидания", 1, Истина);
	
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ЗаголовокПрограммыПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения();
КонецПроцедуры

&НаКлиенте
Процедура ИспользоватьСвойстваПриИзменении(Элемент)
	Подключаемый_ПриИзмененииРеквизита(Элемент);
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура КаталогВременныхФайловДляWindowsПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура КаталогВременныхФайловДляLinuxПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);

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

&НаКлиенте
Процедура КоличествоПотоковДлительныхОперацийПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПодключитьОбработчикОжидания("АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораПродолжение", 0.1, Истина);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыВЛокальнойСетиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПодключитьОбработчикОжидания("АдресПубликацииИнформационнойБазыВЛокальнойСетиНачалоВыбораПродолжение", 0.1, Истина);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура УдалениеПомеченныхИспользованиеПриИзмененииЗавершение(Изменение, ДополнительныеПараметры) Экспорт
	Если (Изменение = Неопределено) Тогда
		Возврат;
	КонецЕсли;
	
	УдалениеПомеченныхИспользование = Изменение.Использование;
	Элементы.НастроитьРасписание.Доступность = УдалениеПомеченныхИспользование;
КонецПроцедуры

&НаКлиенте
Процедура ТипПодписиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура АдресаСерверовМетокВремениПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);

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

&НаКлиенте
Процедура ДобавлятьМеткиВремениАвтоматическиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура УсовершенствоватьПодписиПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура УсовершенствоватьПодписиСДатыПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ПроверятьЭлектронныеПодписиНаСервереПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура СоздаватьЭлектронныеПодписиНаСервереПриИзменении(Элемент)
	
	Подключаемый_ПриИзмененииРеквизита(Элемент);
	
КонецПроцедуры

&НаКлиенте
Процедура ГруппаАвтоматическаяОбработкаПодписейРасширеннаяПодсказкаОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ДекорацияПроверкаУстановкиКриптопровайдераОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ПроверятьЭлектронныеПодписиНаСервереРасширеннаяПодсказкаОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура СоздаватьЭлектронныеПодписиНаСервереРасширеннаяПодсказкаОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТипПодписиКриптографииПоУмолчаниюРасширеннаяПодсказкаОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

&НаКлиенте
Процедура ТипПодписиКриптографииПоУмолчанию1РасширеннаяПодсказкаОбработкаНавигационнойСсылки(
	Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
	ОбработкаНавигационнойСсылкиОткрытиеНастроекЭП(
		Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура ЧасовойПоясПрограммыПриИзменении(Элемент)
	
	ЧасовойПоясПрограммыПриИзмененииНаСервере();
	
КонецПроцедуры

&НаКлиенте
Процедура АдресаСерверовМетокВремениНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ПодключитьОбработчикОжидания("АдресаСерверовМетокВремениНачалоВыбораПродолжение", 0.1, Истина);
	
КонецПроцедуры


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

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура ПосмотретьПомеченныеНаУдаление(Команда)
	Если (ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.УдалениеПомеченныхОбъектов")) Тогда
		МодульУдалениеПомеченныхОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УдалениеПомеченныхОбъектовКлиент");
		МодульУдалениеПомеченныхОбъектовКлиент.ПерейтиКПомеченнымНаУдаление(ЭтотОбъект);
	КонецЕсли;
КонецПроцедуры

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

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

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

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

&НаКлиенте
Процедура УстановитьВидимостьОбработчикОжидания()
	
	УстановитьВидимостьНаКлиенте("");
	
КонецПроцедуры

&НаКлиенте
Процедура АдресаСерверовМетокВремениНачалоВыбораПродолжение()
	
	Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЭлектроннаяПодпись") Тогда
		АдресаСерверовМетокВремениУстановитьПоУмолчанию();
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыВИнтернетеНачалоВыбораПродолжение()
	
	АдресПубликацииИнформационнойНачалоВыбораЗавершение("АдресПубликацииИнформационнойБазыВИнтернете");
	
КонецПроцедуры

&НаКлиенте
Процедура АдресПубликацииИнформационнойБазыВЛокальнойСетиНачалоВыбораПродолжение()
	
	АдресПубликацииИнформационнойНачалоВыбораЗавершение("АдресПубликацииИнформационнойБазыВЛокальнойСети");
	
КонецПроцедуры

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

&НаСервере
Процедура АдресПубликацииИнформационнойБазыНачалоВыбораНаСервере(ИмяРеквизита, СтрокаСоединения)
	
	ПараметрыСоединения = СтроковыеФункцииКлиентСервер.ПараметрыИзСтроки(СтрокаСоединения);
	Если ПараметрыСоединения.Свойство("WS") Тогда
		НаборКонстант[ИмяРеквизита] = ПараметрыСоединения.WS;
	КонецЕсли;
	
КонецПроцедуры

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

#Область Клиент

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

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

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

&НаКлиенте
Функция АдресСтатьиСервисаDSS()
	
	Возврат "https://its.1c.ru/bmk/bsp_dss_reqs";
	
КонецФункции

&НаКлиенте
Процедура ПроверитьВключениеОпцииИспользованиеСервисаDSS(РезультатВыбора, ПараметрыЦикла) Экспорт

	Если РезультатВыбора.Выполнено И РезультатВыбора.Результат = "ОК" Тогда
		Подключаемый_ПриИзмененииРеквизита(ПараметрыЦикла.Элемент);
	Иначе
		НаборКонстант.ИспользоватьСервисDSS = Ложь;
	КонецЕсли;
	
КонецПроцедуры

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

#Область ВызовСервера

&НаСервере
Функция ПриИзмененииРеквизитаСервер(ИмяЭлемента)
	
	РеквизитПутьКДанным = Элементы[ИмяЭлемента].ПутьКДанным;
	ИмяКонстанты = СохранитьЗначениеРеквизита(РеквизитПутьКДанным);
	УстановитьДоступность(РеквизитПутьКДанным);
	ОбновитьПовторноИспользуемыеЗначения();
	Возврат ИмяКонстанты;
	
КонецФункции

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

#Область Сервер

&НаСервере
Функция СохранитьЗначениеРеквизита(РеквизитПутьКДанным)
	
	// Сохранение значений реквизитов, не связанных с константами напрямую (в отношении один-к-одному).
	
	Если РеквизитПутьКДанным = "" Тогда
		Возврат "";
	КонецЕсли;
	
	ТерминКонстанта = "Константа";
	ЧастиИмени      = СтрРазделить(РеквизитПутьКДанным, ".");
	
	Если ЧастиИмени.Количество() = 2 Тогда
		КонстантаИмя = ЧастиИмени[1];
		КонстантаЗначение = НаборКонстант[КонстантаИмя];
	ИначеЕсли ЧастиИмени.Количество() = 1
			И СтрСравнить(Лев(РеквизитПутьКДанным, СтрДлина(ТерминКонстанта)), ТерминКонстанта) = 0 Тогда
				КонстантаИмя = Сред(РеквизитПутьКДанным, СтрДлина(ТерминКонстанта) + 1);
				КонстантаЗначение = ЭтотОбъект[РеквизитПутьКДанным];
	Иначе
		Возврат "";
	КонецЕсли;
	
	Если Константы[КонстантаИмя].Получить() <> КонстантаЗначение Тогда
		Константы[КонстантаИмя].Установить(КонстантаЗначение);
	КонецЕсли;
	
	Если КонстантаИмя = "ИспользоватьДополнительныеРеквизитыИСведения" И КонстантаЗначение = Ложь Тогда
		Прочитать();
	КонецЕсли;
	
	Возврат КонстантаИмя;
	
КонецФункции

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

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

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

&НаСервере
Процедура НастройкиРазделаПроизводительность()
	
	МногопоточныеОперацииДоступны = Не (ОбщегоНазначения.ИнформационнаяБазаФайловая() Или ОбщегоНазначения.РазделениеВключено());
	
	Элементы.ГруппаПроизводительность.Видимость = МногопоточныеОперацииДоступны;
	Элементы.ГруппаВременныеКаталогиКластераСерверов.Видимость = МногопоточныеОперацииДоступны;
	
	Если МногопоточныеОперацииДоступны Тогда
		Если НаборКонстант.КоличествоПотоковДлительныхОпераций < 1 Или НаборКонстант.КоличествоПотоковДлительныхОпераций > 99 Тогда
			НаборКонстант.КоличествоПотоковДлительныхОпераций = 4;
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры


// Часовые пояса

&НаСервере
Процедура ЗаполнитьЧасовыеПояса()

	Для Каждого ОписаниеЧасовогоПояса Из ПолучитьДопустимыеЧасовыеПояса() Цикл
	
		СмещениеДатой = Дата(1, 1, 1) + СмещениеСтандартногоВремени(ОписаниеЧасовогоПояса); 
		ПредставлениеСмещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("(UTC+%1)",
			Формат(СмещениеДатой, "ДФ=HH:mm; ДП=00:00;"));

		ПредставлениеЧасовогоПояса = ПредставлениеСмещения + " " + ОписаниеЧасовогоПояса;
		Элементы.ЧасовойПоясПрограммы.СписокВыбора.Добавить(ОписаниеЧасовогоПояса, ПредставлениеЧасовогоПояса);
			
	КонецЦикла;
	
КонецПроцедуры

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

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

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