Маршруты подписания / Выбор маршрута подписания / Модуль формы

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура СписокПодписантовСертификатПриИзменении(Элемент)
	
	СтрокаПодписанта = Элементы.СписокПодписантов.ТекущиеДанные;
	ЗаполнитьСлужебныеРеквизитыСтрокиСписка(СтрокаПодписанта);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура КомандаОК(Команда)
	
	Если ДанныеЗаполненыКорректно() Тогда
		АдресХраненияНастроек = ПолучитьАдресХраненияНастроекВыбораМаршрута(ВладелецФормы.УникальныйИдентификатор);
		Закрыть(АдресХраненияНастроек);
	КонецЕсли;
	
КонецПроцедуры

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

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


&НаКлиенте
Процедура ВыборМаршрутаЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	Маршрут = Результат;
	
КонецПроцедуры

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

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

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

КонецФункции 

&НаСервере
Процедура ПрочитатьПереданныеПараметры(Отказ)

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

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

&НаСервере
Функция ПолучитьАдресХраненияНастроекВыбораМаршрута(УникальныйИдентификаторФормыВладельца)

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

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

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

&НаКлиенте
Процедура СпособУказанияМаршрутаПриИзменении(Элемент)
	
	ОбновитьДоступностьЭлементов();
	
КонецПроцедуры

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

&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьСлужебныеРеквизитыСтрокиСписка(СтрокаПодписанта)

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

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


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

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