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