Регистрации в налоговом органе / Форма выбора представителей / Модуль формы

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	Если Не ЗначениеЗаполнено(Параметры.АдресВременногоХранилищаПредставителей)
		Или Не ЭтоАдресВременногоХранилища(Параметры.АдресВременногоХранилищаПредставителей) Тогда
		// В форму не передан адрес временного хранилища с данными о подписантах.
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	СведенияОПодписантах = ПолучитьИзВременногоХранилища(Параметры.АдресВременногоХранилищаПредставителей);
	ЗаполнитьЗначенияСвойств(ЭтотОбъект, СведенияОПодписантах, , "Подписанты");
	
	Если ЗначениеЗаполнено(Представитель) Тогда
		ПредставлениеПодписанта = ПредставлениеПодписанта(Представитель, УполномоченноеЛицоПредставителя);
	Иначе
		ПредставлениеПодписанта = НСтр("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;
	Элементы.ГруппаПодписанты.Доступность     = НесколькоПодписантов;
	Элементы.ПодсказкаПоПодписантам.Видимость = НесколькоПодписантов;
	
КонецПроцедуры

//++ НЕ УТ

&НаСервереБезКонтекста
Функция ПользовательПредставителя(Представитель)
	Возврат Мультирежим.ПользовательПоФизЛицуИзСправочникаПользователи(Представитель);
КонецФункции

//-- НЕ УТ

&НаКлиенте
Процедура ОткрытьФормуПредставителя(ОписаниеПредставителя, Источник)
	
	ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ОписаниеПредставителя);
	ОткрытьФорму("Справочник.РегистрацииВНалоговомОргане.Форма.ФормаПредставителя", ПараметрыФормы, Источник, КлючУникальности);
	
КонецПроцедуры

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

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