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