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

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

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

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

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

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

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

&НаКлиенте
Процедура ТипПолучателяОчистка(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
КонецПроцедуры

&НаКлиенте
Процедура ТипПолучателяПриИзменении(Элемент)
	
	УправлениеЭУ(Ложь);
	
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ПолучитьКодОрганаПриДобавлении()
	
	Если ТипПолучателя = ФНС Тогда
		
		КПП = ДанныеОрганизации.КППЮЛ;
		КодПолучателя = ДанныеОрганизации.КодНО;
		
	ИначеЕсли ТипПолучателя = ПФР Тогда
		
		Если ПустаяСтрока(ДанныеОрганизации.КодОрганаПФР) ИЛИ СтрДлина(ДанныеОрганизации.КодОрганаПФР) < 7 Тогда
			КодПолучателя = Лев(ДанныеОрганизации.РегНомПФР,7);
		Иначе
			КодПолучателя = ДанныеОрганизации.КодОрганаПФР;
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УправлениеЭУ(ПриОткрытииФормы = Ложь)
	
	Элементы.КодПолучателя.Доступность = Истина;
	
	ЭтоФНС 		= ТипПолучателя = ФНС; 
	ЭтоЮрЛицо 	= ДанныеОрганизации.ТипОрганизации;
	Элементы.КПП.Доступность = ЭтоФНС И ЭтоЮрЛицо;
	
	Элементы.КодПолучателя.Доступность 	= ТипПолучателя <> ФСС;
	
	Если ТипПолучателя = ФНС Тогда
		
		Элементы.КодПолучателя.Маска = "9999";
		Элементы.КодПолучателя.ОграничениеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(4));
		
		Элементы.КПП.Маска = "9999UU999";
		Элементы.КПП.ОграничениеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(9));
		
	ИначеЕсли ТипПолучателя = ПФР Тогда
		
		Элементы.КодПолучателя.Маска = "999-999";
		Элементы.КодПолучателя.ОграничениеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(7));
		
	ИначеЕсли ТипПолучателя = ФСГС Тогда
		
		Элементы.КодПолучателя.ОграничениеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(7));
		Элементы.КодПолучателя.Маска = "99-XXXXXXX";
		
	ИначеЕсли ТипПолучателя = ФСС Тогда
		
		Элементы.КодПолучателя.Маска = "";
		
	Иначе
		Элементы.КодПолучателя.Маска = "9999";
		Элементы.КодПолучателя.ОграничениеТипа = Новый ОписаниеТипов("Строка", , Новый КвалификаторыСтроки(4));
	КонецЕсли;
	
	Элементы.КПП.АвтоОтметкаНезаполненного	= ЭтоФНС И ЭтоЮрЛицо;
	Элементы.КПП.АвтоВыборНезаполненного 	= ЭтоФНС И ЭтоЮрЛицо;
	
	Если Действие = "Добавить" Тогда
		УстановитьЗначенияПоУмолчанию();
		КПП = ""; 
	Конецесли;
	
	Если Действие = "Редактировать" Тогда
		Элементы.ТипПолучателя.ТолькоПросмотр = Истина;
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура УстановитьЗначенияПоУмолчанию()
	
	Если ТипПолучателя = ФСГС Тогда
		
		КодОрганаФСГС = ДанныеОрганизации.КодОрганаФСГС;
		
		Если НЕ ПустаяСтрока(КодОрганаФСГС) 
			И КонтекстЭДОКлиент.КодОрганаФСГССоответствуетТребованиямКлиент(КодОрганаФСГС) Тогда
			
			КодПолучателя = КодОрганаФСГС;
			
		КонецЕсли;
		
	Иначе
		
		ПолучитьКодОрганаПриДобавлении();
		
	КонецЕсли;
	
КонецПроцедуры

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

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

&НаСервере
Процедура УправлениеЭУЕслиЭтоТолькоФНС()

	Если ТолькоФНС Тогда
	
		Заголовок = НСтр("ru = 'ФНС'");
		Элементы.КПП.Заголовок 				= НСтр("ru = 'КПП'");
		Элементы.ТипПолучателя.Заголовок 	= НСтр("ru = 'Код ФНС'");
		Элементы.ТипПолучателя.Видимость 	= Ложь;
		ТипПолучателя 						= ФНС;
		
	КонецЕсли;

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

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

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