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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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