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

файл


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

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

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

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

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

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

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

&НаКлиенте
Процедура СилуэтНажатие(Элемент)
	ПоказатьПредупреждение(,НСтр("ru = 'Добавление фото не требуется'"));
КонецПроцедуры

&НаКлиенте
Процедура ПереключательВидаДокументаПриИзменении(Элемент)
	
	Модифицированность = Истина;
	ПриИзмененииВидаДокумента();
	ИзменитьОформлениеПаспортныхДанных();

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

&НаКлиенте
Процедура ВладелецЭЦПСерияДокументаПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПНомерДокументаПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПКемВыданДокументПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПДатаВыдачиДокументаПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПКодПодразделенияПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦППолПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПДатаРожденияПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПМестоРожденияПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
	Модифицированность = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ВладелецЭЦПГражданствоПриИзменении(Элемент)
	ИзменитьОформлениеПаспортныхДанных();
КонецПроцедуры

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

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

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

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

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

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

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

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

&НаСервере
Функция ФИОФорматированнойСтрокой()
	
	ФИО = Новый Структура();
	ФИО.Вставить("Фамилия",  ВладелецЭЦПФамилия);
	ФИО.Вставить("Имя",      ВладелецЭЦПИмя);
	ФИО.Вставить("Отчество", ВладелецЭЦПОтчество);
		
	ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(ФИО);

	Возврат Новый ФорматированнаяСтрока(ФИО,,,,ПолучитьНавигационнуюСсылку(ВладелецЭЦП));
	
КонецФункции
	
&НаКлиенте
Процедура ПередЗакрытием_Завершение(Результат, ВходящийКонтекст) Экспорт
	
	Сохранить();
	
КонецПроцедуры

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

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

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

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

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