Документооборот с контролирующими органами / Настройка подтверждения облачной подписи / Модуль формы

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

&НаКлиенте
Перем ПрограммноеЗакрытие;

&НаКлиенте
Перем КонтекстЭДОКлиент;

&НаКлиенте
Перем ОбщееОжидание;

&НаКлиенте
Перем КодЯзыка;

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

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

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

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

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

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

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

&НаКлиенте
Процедура РежимПодтвержденияПриИзменении(Элемент)
	
	Модифицированность = Истина;
	УправлениеФормой();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура СписокОперацийПриИзменении(Элемент)

	Модифицированность = Истина;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ОК(Команда)
	
	Если Модифицированность Тогда
		ПодтвердитьИзменения();
	Иначе
		ЗакрытьФорму(Истина);
	КонецЕсли;
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ДобавитьПредставление(СписокПредставлений, ЗначениеКлюча, Представление, Порядок = 0)
	
	НоваяСтрока = Новый Структура;
	НоваяСтрока.Вставить("Представление", Представление);
	НоваяСтрока.Вставить("Порядок", Порядок);
	
	СписокПредставлений.Вставить(ЗначениеКлюча, НоваяСтрока);
	
КонецПроцедуры

&НаКлиенте
Функция ПредставлениеОперации()
	
	Результат = Новый Соответствие;
	ДобавитьПредставление(Результат, "ЗагрузкаЭЛН", НСтр("ru = 'Загрузка реестра ЭЛН'", КодЯзыка), 10);
	ДобавитьПредставление(Результат, "ОперацииСЭЛН", НСтр("ru = 'Выгрузка реестра ЭЛН'", КодЯзыка), 11);
	ДобавитьПредставление(Результат, "ПодтверждениеВидаДеятельности", НСтр("ru = 'Подтверждение вида деятельности'", КодЯзыка), 12);
	ДобавитьПредставление(Результат, "ЗаявлениеНаПодключение", НСтр("ru = 'Заявление на подключение к 1С-Отчетности'", КодЯзыка), 13);
	ДобавитьПредставление(Результат, "ЗаявлениеНаПодключениеСканы", НСтр("ru = 'Заявление на подключение к 1С-Отчетности (сканы)'", КодЯзыка), 14);
	ДобавитьПредставление(Результат, "ОписьИсходящихДокументовВФНС", НСтр("ru = 'Опись исходящих документов в ФНС'", КодЯзыка), 15);
	ДобавитьПредставление(Результат, "ЖурналСчетовФактурВФНС", НСтр("ru = 'Журнал счетов-фактур в ФНС'", КодЯзыка), 16);
	ДобавитьПредставление(Результат, "ПакетДляОтправкиВФСС", НСтр("ru = 'Отправка в ФСС'", КодЯзыка), 17);
	ДобавитьПредставление(Результат, "ПакетДляОтправкиВФСРАР", НСтр("ru = 'Отправка в фСРАР'", КодЯзыка), 18);
	ДобавитьПредставление(Результат, "ПакетДляОтправкиВРПН", НСтр("ru = 'Отправка в РПН'", КодЯзыка), 19);
	ДобавитьПредставление(Результат, "ОтветНаТребованиеПоясненийКДекларацииНДС", НСтр("ru = 'Пояснение к декларации НДС'", КодЯзыка), 21);
	ДобавитьПредставление(Результат, "ОтправкаВФТС", НСтр("ru = 'Отправка в ФТС'", КодЯзыка), 22);
	ДобавитьПредставление(Результат, "ПакетСОС", НСтр("ru = 'Отправка в СОС'", КодЯзыка), 23);
	
	// служебные операции
	ДобавитьПредставление(Результат, "ЗаявлениеВПФР", НСтр("ru = 'Заявление на подключение ЭДО ПФР (служебное)'", КодЯзыка), 99);
	ДобавитьПредставление(Результат, "СформироватьПакетФНС", НСтр("ru = 'Пакет ФНС (служебное)'", КодЯзыка), 99);
	ДобавитьПредставление(Результат, "СформироватьПакетПФР", НСтр("ru = 'Пакет ПФР (служебное)'", КодЯзыка), 99);
	ДобавитьПредставление(Результат, "СформироватьПакетФСГС", НСтр("ru = 'Пакет ФСГС (служебное)'", КодЯзыка), 99);
	ДобавитьПредставление(Результат, "СформироватьПакетСОС", НСтр("ru = 'Пакет СОС (служебное)'", КодЯзыка), 99);
	ДобавитьПредставление(Результат, "ПакетДляОтправкиВФСРАРЗавершение", НСтр("ru = 'Пакет ФСРАР (служебное)'", КодЯзыка), 99);
	
	Возврат Результат;
	
КонецФункции

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

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

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

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

&НаКлиенте
Процедура ЗакрытьФорму(Результат = Ложь)
	
	ПрограммноеЗакрытие = Истина;
	Закрыть(Результат);
	
КонецПроцедуры

&НаСервере
Процедура УстановитьВидимостьЭлементов()
	
	Элементы.ГруппаПотверждениеОтключить.Видимость = ЕстьДоступ;
	Элементы.ГруппаПодтверждениеВыборочно.Видимость = ЕстьДоступ;
	Элементы.ГруппаВнимание.Видимость = НастроеноПодтверждение И Элементы.ДекорацияВнимание.Картинка.Вид <> ВидКартинки.Пустая;

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

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

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