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