Больничный лист / Выбор родственника / Модуль формы

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

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ТекущийЭлемент = Элементы.ФормаКомандаОК;
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура СНИЛСПриИзменении(Элемент)
	ОбновитьВидимостьДоступность();
КонецПроцедуры

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

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

&НаКлиенте
Процедура РодственникПриИзменении(Элемент)
	РодственникПриИзмененииНаСервере();
КонецПроцедуры

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

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

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

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

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

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

&НаКлиенте
Процедура ЗаполнитьНезаполненныеДанныеРодственника(Команда)
	ЗаполнитьНезаполненныеДанныеРодственникаНаСервере();
КонецПроцедуры

&НаКлиенте
Процедура КомандаОК(Команда)
	Закрыть(РезультатВыбора());
КонецПроцедуры

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

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

&НаСервере
Функция СНИЛСПозволяетОбновитьРеквизиты()
	Возврат Не ЗначениеЗаполнено(СНИЛС)
		Или Не ЗначениеЗаполнено(РодственникСНИЛС)
		Или СНИЛС = РодственникСНИЛС;
КонецФункции

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

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

&НаСервере
Процедура ОбновитьНадписьВозрастМесяцев(КоличествоМесяцев, Надпись)
	ЗаголовокНадписи = СтроковыеФункцииКлиентСервер.СтрокаСЧисломДляЛюбогоЯзыка(
		НСтр("ru = ';месяц;;месяца;месяцев;'"),
		КоличествоМесяцев);
	Если Надпись.Заголовок <> ЗаголовокНадписи Тогда
		Надпись.Заголовок = ЗаголовокНадписи;
	КонецЕсли;
КонецПроцедуры

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

&НаСервереБезКонтекста
Функция ЗначенияСовпадают(Значение1, Значение2)
	Возврат ?(ТипЗнч(Значение1) = Тип("Строка"), СтрСравнить(Значение1, Значение2) = 0, Значение1 = Значение2);
КонецФункции

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

&НаСервере
Процедура РодственникПриИзмененииНаСервере()
	ПрочитатьРеквизитыРодственника();
	ОбновитьВидимостьДоступность();
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗапланироватьОбновлениеРеквизитовРодственника()
	ОтключитьОбработчикОжидания("ОбновитьРеквизитыРодственника");
	ПодключитьОбработчикОжидания("ОбновитьРеквизитыРодственника", 0.2, Истина);
КонецПроцедуры

&НаКлиенте
Процедура ОбновитьРеквизитыРодственника()
	РодственникПриИзмененииНаСервере();
КонецПроцедуры

#Область РезультатВыбора

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

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

#Область ОбщегоНазначенияФормы

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

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

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

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

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