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

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

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	РазобратьПараметры(Параметры);
	Инициализация();
	УправлениеФормой();
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	ОбработатьЗаписьМЧДФНС(ИмяСобытия, Параметр, Источник);
	ОбработатьОтправкуМЧДФНС(ИмяСобытия, Параметр, Источник);
	НачатьПоискМЧДФСС(ИмяСобытия, Параметр, Источник);
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура РежимВыбора_ПриИзменении(Элемент)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	
	ВладелецЭЦПЭтоФизЛицо = ХотятПриложитьМЧД(ЭтотОбъект);
	
	ЗаполнитьМЧДВЗаявлении();
	Если ВладелецЭЦПЭтоФизЛицо Тогда
		ЗаполнитьТаблицуМЧД();
	КонецЕсли;
	
	УправлениеФормой();
	
КонецПроцедуры

&НаКлиенте
Процедура ОчиститьСканНажатие(Элемент)
	
	КонтекстЭДОКлиент.ОчиститьСканНажатие(ЭтотОбъект, Элемент);
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ДоверенностиПередУдалением(Элемент, Отказ)
	
	Если НЕ ЗначениеЗаполнено(Элемент.ТекущиеДанные.МЧД) Тогда
		Отказ = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДоверенностиПослеУдаления(Элемент)
	
	ОбработкаЗаявленийАбонентаКлиентСервер.УстановитьМодифицированность(ЭтотОбъект);
	ДоопределитьТаблицуМЧД();
	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ЗагрузитьМЧДФСС(Команда)
	
	КонтекстЭДОКлиент.ЗагрузитьМашиночитаемуюДоверенностьФСС();
	
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьМЧДЦБ(Команда)
	
	Если ЗначениеЗаполнено(ИмяТипаМЧД_ЦБ) Тогда
		
		ОткрытьФорму(
			"Справочник." + ИмяТипаМЧД_ЦБ + ".Форма.ФормаЗагрузкиИзФайла",,
			ЭтаФорма,,,,,
			РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
			
	КонецЕсли;
	
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаКлиенте
Процедура Подключаемый_ПолучитьМЧДФСС()

	МЧД = МЧДФССПоНомеру();
	Если ЗначениеЗаполнено(МЧД) Тогда
		ОтключитьОбработчикОжидания("Подключаемый_ПолучитьМЧДФСС");
		ПослеВыбораДоверенности(МЧД);
	КонецЕсли;

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

&НаСервере
Функция МЧДФССПоНомеру()

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

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

&НаКлиенте
Функция ДоверенностьВыбранаКорректно()
	
	Виды = Новый Структура;
	ОбработкаЗаявленийАбонентаКлиентСервер.ВидыДокументовВЗаявлении_ДобавитьДоверенность(Виды, ЭтотОбъект);
	Описание = Виды[ВидДоверенность];
	
	УказаныКорректно = Истина;
	КонтекстЭДОКлиент.ПроверитьСканДокумента(ЭтотОбъект, УказаныКорректно, Описание, ВидДоверенность);
	
	Возврат УказаныКорректно;
	
КонецФункции

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

&НаСервере
Процедура УстановитьПереключатель()
	
	Если НЕ ЕстьВыборМеждуМЧДиСканом И НЕ ВладелецЭЦПЭтоФизЛицо Тогда
		ВладелецЭЦПЭтоФизЛицо = Истина;
		РежимВыбораДоверености = "МЧД";
	ИначеЕсли ВладелецЭЦПЭтоФизЛицо Тогда
		РежимВыбораДоверености = "МЧД";
	Иначе
		РежимВыбораДоверености = ВидДоверенность;
	КонецЕсли;
	
КонецПроцедуры

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

		Иначе
			
			СтрокаТаблицы = НайденныеСтроки[0];
			ДополнитьСтроку(СтрокаТаблицы, Свойства);
			
		КонецЕсли;
		
	КонецЦикла;
	
	ДоопределитьТаблицуМЧД();
	
КонецПроцедуры

&НаСервере
Функция ПредставленияМЧД(МЧДs)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ЖурналОтправокВКонтролирующиеОрганы.Наименование КАК Наименование,
		|	ЖурналОтправокВКонтролирующиеОрганы.Ссылка КАК Ссылка
		|ИЗ
		|	РегистрСведений.ЖурналОтправокВКонтролирующиеОрганы КАК ЖурналОтправокВКонтролирующиеОрганы
		|ГДЕ
		|	ЖурналОтправокВКонтролирующиеОрганы.Ссылка В(&МЧДs)";
	
	Запрос.УстановитьПараметр("МЧДs", МЧДs);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Представления = Новый СписокЗначений;
	Пока Выборка.Следующий() Цикл
		Представления.Добавить(Выборка.Ссылка, Выборка.Наименование);
	КонецЦикла;
	
	Возврат Представления;

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

&НаСервере
Процедура ДоопределитьТаблицуМЧД()
	
	ИмяТипаСправочникаМашиночитаемыеДоверенности = "МашиночитаемыеДоверенности";
	ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ = "МашиночитаемыеДоверенностиЦБ";
	
	МЧДs = Доверенности.Выгрузить().ВыгрузитьКолонку("МЧД");
	Представления = ПредставленияМЧД(МЧДs);
	
	Для каждого Строка Из Доверенности Цикл
		
		МЧД = Строка.МЧД;
		
		Если НЕ ЗначениеЗаполнено(МЧД) ИЛИ ЗначениеЗаполнено(Строка.Орган) Тогда
			Продолжить;
		КонецЕсли;
		
		Строка.ПредставлениеМЧД = Представления.НайтиПоЗначению(МЧД);
	
		Если ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФНС")
			ИЛИ ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиРаспределенныйРеестр") Тогда
			
			Строка.Орган = НСтр("ru = 'ФНС'");
			Строка.Приоритет = 1;
			
		ИначеЕсли ТипЗнч(МЧД) = Тип("ДокументСсылка.УведомлениеОПредоставленииПолномочийПредставителю") Тогда
			
			Строка.Орган = НСтр("ru = 'СФР (бывш. ПФР)'");
			Строка.Приоритет = 3;
			
		ИначеЕсли ТипЗнч(МЧД) = Тип("СправочникСсылка.МашиночитаемыеДоверенностиФСС") Тогда
			
			Строка.Орган = НСтр("ru = 'СФР (бывш. ФСС)'");
			Строка.Приоритет = 4;
			
		ИначеЕсли ПодсистемаЦПРРМЧДСуществует 
			И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенности) Тогда
			
			Органы = МЧДБРО.ОрганыМЧДЕФ(МЧД);
			
			Если Органы.ДляФСРАР Тогда
				СкопироватьСтроку(НСтр("ru = 'ФСРАР'"), МЧД, 5, Строка);
			КонецЕсли;
			
			Если Органы.ДляФТС Тогда
				СкопироватьСтроку(НСтр("ru = 'ФТС'"), МЧД, 6, Строка);
			КонецЕсли;
			
			Если Органы.ДляРосстата Тогда
				СкопироватьСтроку(НСтр("ru = 'Росстат'"), МЧД, 2, Строка);
			КонецЕсли;
			
			Если Органы.ДляРПН Тогда
				СкопироватьСтроку(НСтр("ru = 'РПН'"), МЧД, 7, Строка);
			КонецЕсли;
			
			Если Органы.ДляФСРАР ИЛИ Органы.ДляФТС ИЛИ Органы.ДляРосстата ИЛИ Органы.ДляРПН Тогда
				Доверенности.Удалить(Строка);
			Иначе
				Строка.Орган = НСтр("ru = 'Единого формата'");
				Строка.Приоритет = 6;
			КонецЕсли;
			
		ИначеЕсли ДокументооборотСКОКлиентСервер.ПодсистемаЦБСуществует()
			И ТипЗнч(МЧД) = Тип("СправочникСсылка." + ИмяТипаСправочникаМашиночитаемыеДоверенностиЦБ) Тогда
			
			Строка.Орган = НСтр("ru = 'Банк России'");
			Строка.Приоритет = 8;
			
		КонецЕсли;
		
	КонецЦикла;
	
	ДобавитьНедостающиеОрганы();
	Доверенности.Сортировать("Орган, МЧД");
	
КонецПроцедуры

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

&НаСервере
Процедура ДобавитьНедостающиеОрганы()
	
	ДобавитьНедостающийОрган("СдаватьВФНС", НСтр("ru = 'ФНС'"));
	ДобавитьНедостающийОрган("СдаватьВРосстат", НСтр("ru = 'Росстат'"));
	ДобавитьНедостающийОрган("СдаватьВПФР", НСтр("ru = 'СФР (бывш. ПФР)'"));
	ДобавитьНедостающийОрган("СдаватьВФСС", НСтр("ru = 'СФР (бывш. ФСС)'"));
	ДобавитьНедостающийОрган("СдаватьВЦБ", НСтр("ru = 'Банк России'"));
	ДобавитьНедостающийОрган("ПодатьЗаявкуНаПодключениеФТС", НСтр("ru = 'ФТС'"));
	ДобавитьНедостающийОрган("ПодатьЗаявкуНаСертификатДляФСРАР", НСтр("ru = 'ФСРАР'"));
	ДобавитьНедостающийОрган("ПодатьЗаявкуНаПодключениеРПН", НСтр("ru = 'РПН'"));
	
КонецПроцедуры

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

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

&НаКлиенте
Функция МЧДУжеДобавлена(МЧД) Экспорт
	
	Отбор = Новый Структура();
	Отбор.Вставить("МЧД", МЧД);

	НайденныеСтроки = Доверенности.НайтиСтроки(Отбор);
	
	Если НайденныеСтроки.Количество() > 0 Тогда
		Текст = НСтр("ru = 'Данная доверенность уже есть в списке'");
		ПоказатьПредупреждение(, Текст);
		Возврат Истина;
	КонецЕсли;
	
	Возврат Ложь;
	
КонецФункции

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

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

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

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

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

&НаКлиентеНаСервереБезКонтекста
Функция ХотятПриложитьМЧД(Форма)
	
	Возврат Форма.РежимВыбораДоверености = "МЧД";
	
КонецФункции

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

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

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

			ВыИспользуете = НСтр("ru = 'Поскольку вы используете '");
			ВыПланируете  = НСтр("ru = 'Поскольку вы планируете использовать '");
			БудетВыдан    = НСтр("ru = 'Поскольку вам будет выдан '");
			
			Сертификат = НСтр("ru = 'сертификат физического лица, не содержащий реквизитов организации'");

			ФЗ = НСтр("ru = ', в соответствии с ФЗ от 27.12.2019 N 476-ФЗ'");
			Концовка = НСтр("ru = ', для подтверждения полномочий сотрудника %1 необходимо приложить хотя бы одну МЧД любого гос. органа.'");

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

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

&НаСервере
Процедура УправлениеФормойПриЗапретеИзменений()
	
	КоманднаяПанель.Видимость = НЕ ЗапретитьИзменение;
	Элементы.Доверенности.КоманднаяПанель.Видимость = НЕ ЗапретитьИзменение;
	Элементы.ГруппаДоверенность.Доступность = НЕ ЗапретитьИзменение;
	Элементы.ГруппаМЧД.Доступность = НЕ ЗапретитьИзменение;
	
КонецПроцедуры

&НаСервере
Процедура СкрытьВозможностьПриложитьСкан()
	
	Элементы.ГруппаДоверенность.Видимость = ЕстьВыборМеждуМЧДиСканом;
	Элементы.РежимВыбора_МЧД.Видимость = ЕстьВыборМеждуМЧДиСканом;
	Элементы.Отступ.Видимость = ЕстьВыборМеждуМЧДиСканом;
	
КонецПроцедуры

&НаСервере
Процедура ИзменитьОформлениеСкана()
	
	Размер 		 = 0;
	Количество   = 0;
	ИмяПервого   = "";
	
	Для каждого ФайлДокумента Из ФайлыДокументов Цикл
		
		ФайлДокумента = ФайлДокумента.Значение;
		
		ЭтоМЧД = ОбработкаЗаявленийАбонентаКлиентСервер.ЭтоМЧД(ФайлДокумента);
		Если ФайлДокумента.Документ = ВидДоверенность И НЕ ЭтоМЧД Тогда
			
			Размер     = Размер + ФайлДокумента.Размер;
			ИмяПервого = ФайлДокумента.ИсходноеИмя;
			Количество = Количество + 1;
			
		КонецЕсли;
		
	КонецЦикла;
	
	ДокументооборотСКОКлиентСервер.ИзменитьОформлениеДокумента(
		ЭтотОбъект, 
		ВидДоверенность, 
		Размер, 
		Количество, 
		ИмяПервого);
	
КонецПроцедуры

&НаСервере
Процедура ДобавитьМЧДВФайлыЗаявленияНаСервере()
	
	ДоверенностиБезДублей = Доверенности.Выгрузить();
	ДоверенностиБезДублей.Колонки.Удалить("Орган");
	ДоверенностиБезДублей.Колонки.Удалить("Приоритет");
	ДоверенностиБезДублей.Колонки.Удалить("Жирным");
	ДоверенностиБезДублей.Колонки.Удалить("ПредставлениеМЧД");
	
	ДоверенностиБезДублей.Свернуть("МЧД, ИмяМЧД, АдресМЧД, АдресПодписи, ИмяПодписи, РазмерМЧД, РазмерПодписи");
	
	ОбработкаЗаявленийАбонентаКлиентСервер.ДобавитьМЧДВФайлыЗаявления(ЭтотОбъект, ДоверенностиБезДублей);
	
КонецПроцедуры

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

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

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