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

файл

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

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

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

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

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

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

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

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

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

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

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

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

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

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