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