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

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	Если ТипыДоверенности.Количество() = 1 Тогда
		ТипМЧД = Тип("СправочникСсылка." + ТипыДоверенности[0].Значение);
		ОткрытьФормуВыбораМЧД(ЭтотОбъект.ВладелецФормы, ТипМЧД);
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ТипыДоверенностиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
	
	ТипМЧД = Тип("СправочникСсылка." + ТипыДоверенности[ВыбраннаяСтрока].Значение);
	ОткрытьФормуВыбораМЧД(ЭтотОбъект.ВладелецФормы, ТипМЧД);
	
КонецПроцедуры

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

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

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

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

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

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

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