#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Параметры.Свойство("УчитыватьОтрицательныйВыбор", УчитыватьОтрицательныйВыбор);
ПохожиеЛюди = Новый ФиксированныйМассив(
ОбщегоНазначения.ВыгрузитьКолонку(Параметры.ДанныеФизическихЛиц, "ФизическоеЛицо", Истина));
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы.КадровыйУчетРасширенная") Тогда
МодульКадровыйУчетРасширенный = ОбщегоНазначения.ОбщийМодуль("КадровыйУчетРасширенный");
ЕстьПравоНаОбъединениеДублей = МодульКадровыйУчетРасширенный.ДоступноОбъединениеДублейПерсональныхДанных();
Иначе
ЕстьПравоНаОбъединениеДублей = Ложь;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала") Тогда
МодульПодборПерсоналаФормы = ОбщегоНазначения.ОбщийМодуль("ПодборПерсоналаФормы");
МодульПодборПерсоналаФормы.ФизическиеЛицаСПохожимиДаннымиПриСозданииНаСервере(ЭтотОбъект);
КонецЕсли;
ЗаполнитьОднофамильцев(Параметры);
УстановитьСвойстваЭлементовФормы(Параметры);
Если Однофамильцы.Количество() > 1 Тогда
ЗапрашиватьПодтверждение = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"ПроверкаОднофамильцев", "ЗапрашиватьПодтверждение", Истина);
КонецЕсли;
ЗаполнитьПараметрыПроверкиУникальностиПоИННиСНИЛС(Параметры);
УстановитьВидимостьПометкиВАрхиве(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Элементы.Однофамильцы.ТекущаяСтрока = Однофамильцы[0].ПолучитьИдентификатор();
СотрудникиКлиент.НачатьЗаполнениеИсторииВзаимоотношений(ЭтотОбъект, Новый Массив(ПохожиеЛюди));
Если Однофамильцы.Количество() = 1 Тогда
ВыделитьСовпадающиеДанные(0);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ФИОНажатие(Элемент, СтандартнаяОбработка)
ОткрытьЛичныеДанные();
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительнаяИнформацияНадписьОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки,
СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Оповещение = Новый ОписаниеОповещения("ПроверитьОднофамильцевИННиСНИЛСЗавершение", ЭтотОбъект);
ОткрытьФорму("Справочник.ФизическиеЛица.Форма.ПроверкаУникальностиПоИННиСНИЛС",
Новый Структура(ПараметрыПроверкиУникальностиПоИННиСНИЛС), ЭтотОбъект, , , , Оповещение,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПриИзменении(Элемент)
ОбработатьИзменениеПоисковойСтроки();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОднофамильцы
&НаКлиенте
Процедура ОднофамильцыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
НачатьВыборРезультата();
КонецПроцедуры
&НаКлиенте
Процедура ОднофамильцыПриАктивизацииСтроки(Элемент)
Если Элементы.Однофамильцы.ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Элементы.Однофамильцы.ТекущиеДанные);
УстановитьОтборВИстории();
ВыделитьСовпадающиеДанные(Элементы.Однофамильцы.ТекущаяСтрока);
УстановитьВидимостьПометкиВАрхиве(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыИстория
&НаКлиенте
Процедура ИсторияВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОткрытьФормуЭлементаИсторииВзаимоотношений(Элементы.История.ТекущиеДанные.Ссылка);
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ДаЭтоТотКтоМнеНужен(Команда)
ВыбратьПохожегоЧеловекаИЗакрытьФорму();
КонецПроцедуры
&НаКлиенте
Процедура НетЭтоДругойЧеловек(Команда)
Если УчитыватьОтрицательныйВыбор Тогда
Закрыть(Ложь);
Иначе
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Отмена(Команда)
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура НайтиВСписке(Команда)
ОбработатьИзменениеПоисковойСтроки();
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьАрхив(Команда)
НачатьПроверкуАрхивнойЗаписи();
КонецПроцедуры
&НаКлиенте
Процедура ОбъединитьДубли(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы.КадровыйУчетРасширенная") Тогда
МодульКадровыйУчетРасширенныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КадровыйУчетРасширенныйКлиент");
МодульКадровыйУчетРасширенныйКлиент.ОбъединитьДубли(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗаполнитьОднофамильцев(Параметры)
ДобавитьОднофамильцев();
Однофамильцы.Сортировать("ФИОПолные");
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала") Тогда
МодульПодборПерсоналаФормы = ОбщегоНазначения.ОбщийМодуль("ПодборПерсоналаФормы");
МодульПодборПерсоналаФормы.ПриЗаполненииОднофамильцев(ЭтотОбъект);
КонецЕсли;
ВсеОднофамильцы.Загрузить(Однофамильцы.Выгрузить());
Если Однофамильцы.Количество() = 1 Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Однофамильцы[0]);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьОднофамильцев()
КонтактнаяИнформация = КонтактнаяИнформация(Новый Массив(ПохожиеЛюди));
Для Каждого СтрокаДанных Из Параметры.ДанныеФизическихЛиц Цикл
НоваяСтрока = Однофамильцы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных);
НоваяСтрока.ПохожийЧеловек = СтрокаДанных.ФизическоеЛицо;
ЗаполнитьВозраст(НоваяСтрока);
НоваяСтрока.ПолПредставление = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ПредставлениеПола(СтрокаДанных.Пол);
Если Не ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаДанных, "ВАрхивеФизическихЛиц", Ложь) Тогда
ЗаполнитьКонтактнуюИнформациюФизическогоЛица(НоваяСтрока, КонтактнаяИнформация);
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы") Тогда
МодульКадровыйУчетРасширенный = ОбщегоНазначения.ОбщийМодуль("КадровыйУчетРасширенный");
НоваяСтрока.АдресФотографии = МодульКадровыйУчетРасширенный.АдресФотографииФизическогоЛица(
СтрокаДанных.ФизическоеЛицо);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВозраст(НоваяСтрока)
Если ЗначениеЗаполнено(НоваяСтрока.ДатаРождения) Тогда
НоваяСтрока.ВозрастПредставление = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ПредставлениеВозраста(
НоваяСтрока.ДатаРождения, ТекущаяДатаСеанса());
КонецЕсли;
Если НоваяСтрока.ВАрхивеФизическихЛиц = Истина Тогда
НоваяСтрока.ДатаРождения = Неопределено;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция КонтактнаяИнформация(ПохожиеЛюди)
ТипыКИ = Новый Массив;
ТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Телефон);
ТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
Возврат КонтактнаяИнформацияБЗК.КонтактнаяИнформацияОбъектов(ПохожиеЛюди, ТипыКИ);
КонецФункции
&НаСервере
Процедура ЗаполнитьКонтактнуюИнформациюФизическогоЛица(ДанныеФизическогоЛица, КонтактнаяИнформация)
НайденныеСтроки = КонтактнаяИнформация.НайтиСтроки(Новый Структура("Объект", ДанныеФизическогоЛица.ПохожийЧеловек));
Для Каждого СтрокаКИ Из НайденныеСтроки Цикл
Если СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.Телефон Тогда
ДобавитьПредставлениеКонтактнойИнформации(ДанныеФизическогоЛица.МобильныйТелефон, СтрокаКИ);
ИначеЕсли СтрокаКИ.Тип = Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты Тогда
ДобавитьПредставлениеКонтактнойИнформации(ДанныеФизическогоЛица.АдресЭлектроннойПочты, СтрокаКИ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ДобавитьПредставлениеКонтактнойИнформации(Представление, СтрокаКИ)
Если ЗначениеЗаполнено(Представление) Тогда
Представление = Представление + ", ";
КонецЕсли;
Представление = Представление + СтрокаКИ.Представление;
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваЭлементовФормы(Параметры)
Если Однофамильцы.Количество() = 1 Тогда
Заголовок = НСтр("ru = 'Найден похожий человек'");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "СписокОднофамильцевГруппа", "Видимость",
Ложь);
КлючСохраненияПоложенияОкна = "ОдинОднофамилец";
Иначе
Заголовок = НСтр("ru = 'Найдены похожие люди'");
КлючСохраненияПоложенияОкна = "НесколькоОднофамильцев";
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыРасширеннаяПодсистемы") Тогда
НайденыДубли = Параметры.НайденыДубли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДаЭтоТотКтоМнеНужен", "Видимость",
Не НайденыДубли);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбъединитьДубли", "Видимость",
НайденыДубли);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбъединитьДубли", "КнопкаПоУмолчанию",
НайденыДубли);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отменить", "Видимость",
НайденыДубли Или Параметры.СкрытьКомандуДругойЧеловек);
Если НайденыДубли Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НетЭтоДругойЧеловек", "Видимость",
Ложь);
Если Не ЕстьПравоНаОбъединениеДублей Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбъединитьДубли", "Видимость",
Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отменить", "Заголовок",
"Закрыть");
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Отменить", "КнопкаПоУмолчанию",
Истина);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НетЭтоДругойЧеловек", "Видимость",
Не Параметры.СкрытьКомандуДругойЧеловек);
КонецЕсли;
ЗаголовокКнопкиНетЭтоДругойЧеловек = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры,
"ЗаголовокКнопкиНетЭтоДругойЧеловек");
Если ЗначениеЗаполнено(ЗаголовокКнопкиНетЭтоДругойЧеловек) Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "НетЭтоДругойЧеловек", "Заголовок",
ЗаголовокКнопкиНетЭтоДругойЧеловек);
КонецЕсли;
Иначе
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Фотография", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ОбъединитьДубли", "Видимость", Ложь);
КонецЕсли;
УстановитьСвойстваДополнительнойИнформации(Параметры);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваДополнительнойИнформации(Параметры)
ВидимостьДополнительнойИнформации = Не Параметры.НайденыДубли
Или ЗначениеЗаполнено(Параметры.ТекстПодсказки);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаДополнительнаяИнформация",
"Видимость", ВидимостьДополнительнойИнформации);
Если Не ВидимостьДополнительнойИнформации Тогда
Возврат;
КонецЕсли;
Если ЕстьНедоступныеДанные(Параметры) Тогда
ЗаголовокНадписи = ТекстНадписиОЛюдяхСНедоступнымиДанными(Параметры);
ИначеЕсли ЗначениеЗаполнено(Параметры.ТекстПодсказки) Тогда
ЗаголовокНадписи = Параметры.ТекстПодсказки;
Иначе
Возврат;
КонецЕсли;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДополнительнаяИнформацияНадпись",
"Заголовок", ЗаголовокНадписи);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДополнительнаяИнформацияНадпись",
"ЦветТекста", ЦветаСтиля.ПросроченныеДанныеЦвет);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДополнительнаяИнформацияКартинка",
"Картинка", БиблиотекаКартинок.Предупреждение32);
КонецПроцедуры
&НаСервере
Функция ТекстНадписиОЛюдяхСНедоступнымиДанными(Параметры)
ТекстНадписи = Новый ФорматированнаяСтрока(
НСтр("ru = 'Найдены сведения о людях с похожими данными, которые недоступны для просмотра.'"));
Если Параметры.ВозможнаПроверкаПоИНН Или Параметры.ВозможнаПроверкаПоСНИЛС Тогда
Если Параметры.ВозможнаПроверкаПоИНН И Параметры.ВозможнаПроверкаПоСНИЛС Тогда
ТекстНадписиДополнительнойПроверки = НСтр("ru = 'проверьте уникальность по ИНН или СНИЛС'");
ИначеЕсли Параметры.ВозможнаПроверкаПоИНН Тогда
ТекстНадписиДополнительнойПроверки = НСтр("ru = 'проверьте уникальность по ИНН'");
ИначеЕсли Параметры.ВозможнаПроверкаПоСНИЛС Тогда
ТекстНадписиДополнительнойПроверки = НСтр("ru = 'проверьте уникальность по СНИЛС'");
КонецЕсли;
ТекстНадписи = Новый ФорматированнаяСтрока(
ТекстНадписи,
Символы.ПС,
Новый ФорматированнаяСтрока(
НСтр("ru = 'Если среди доступных для просмотра данных нет нужного человека,'"), " ",
Новый ФорматированнаяСтрока(ТекстНадписиДополнительнойПроверки, , , ,
"ДополнительнаяИнформацияНадписьОбработкаНавигационнойСсылки"), ". "),
НСтр("ru = 'Или обратитесь к администратору информационной системы для устранения проблемы.'"));
Иначе
ТекстНадписи = Новый ФорматированнаяСтрока(ТекстНадписи, Символы.ПС, СтрЗаменить(
НСтр("ru = 'Если среди доступных для просмотра данных нет нужного человека, обратитесь к администратору
|информационной системы для устранения проблемы.'"), Символы.ПС, ""));
КонецЕсли;
Возврат ТекстНадписи;
КонецФункции
&НаСервере
Функция ЕстьНедоступныеДанные(Параметры)
ДанныеКандидатовДоступны = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ДанныеКандидатовДоступны",
Истина);
Возврат Не Параметры.ДанныеФизическихЛицДоступны Или Не ДанныеКандидатовДоступны;
КонецФункции
&НаКлиенте
Процедура ВыделитьСовпадающиеДанные(НомерСтроки)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала") Тогда
МодульПерсоналаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодборПерсоналаКлиент");
МодульПерсоналаКлиент.ВыделитьСовпадающиеДанные(ЭтотОбъект, НомерСтроки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьЛичныеДанные(КлючФормы = Неопределено)
Если КлючФормы = Неопределено Тогда
КлючФормы = ПохожийЧеловек;
КонецЕсли;
ИмяОткрываемойФормы = "Справочник.ФизическиеЛица.ФормаОбъекта";
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала") Тогда
МодульПодборПерсоналаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодборПерсоналаКлиент");
МодульПодборПерсоналаКлиент.ПриОткрытииЛичныхДанных(ЭтотОбъект, КлючФормы, ИмяОткрываемойФормы);
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", КлючФормы);
ПараметрыФормы.Вставить("ТолькоПросмотр", Истина);
ОткрытьФорму(ИмяОткрываемойФормы, ПараметрыФормы, ЭтотОбъект, , , , , РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуЭлементаИсторииВзаимоотношений(Ссылка)
СотрудникиКлиент.ОткрытьФормуЭлементаИсторииВзаимоотношений(ЭтотОбъект, Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура НачатьВыборРезультата()
Если Не ЗапрашиватьПодтверждение Тогда
ВыбратьПохожегоЧеловекаИЗакрытьФорму();
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьВыборРезультата", ЭтотОбъект);
Шаблон = НСтр("ru = 'Будет выбран %1.'");
Если Пол = ПредопределенноеЗначение("Перечисление.ПолФизическогоЛица.Женский") Тогда
Шаблон = НСтр("ru = 'Будет выбрана %1.'");
КонецЕсли;
Шаблон = Шаблон + Символы.ПС + НСтр("ru = 'Продолжить?'");
ТекстВопроса = СтрШаблон(Шаблон, Строка(ПохожийЧеловек));
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Заголовок = НСтр("ru = 'Выбор человека из списка однофамильцев'");
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,
ПараметрыВопроса);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьВыборРезультата(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Если Результат.Значение <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если Результат.БольшеНеЗадаватьЭтотВопрос Тогда
ОбщегоНазначенияВызовСервера.ХранилищеОбщихНастроекСохранить("ПроверкаОднофамильцев",
"ЗапрашиватьПодтверждение", Ложь);
КонецЕсли;
ВыбратьПохожегоЧеловекаИЗакрытьФорму();
КонецПроцедуры
&НаКлиенте
Процедура ВыбратьПохожегоЧеловекаИЗакрытьФорму()
РезультатВыбора = Новый Структура("ПохожийЧеловек", ПохожийЧеловек);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.АрхивФизическихЛиц") Тогда
МодульАрхивФизическихЛицКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("АрхивФизическихЛицКлиент");
МодульАрхивФизическихЛицКлиент.ПриВыбореФизическогоЛица(ЭтотОбъект, РезультатВыбора);
КонецЕсли;
Закрыть(РезультатВыбора);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьОднофамильцевИННиСНИЛСЗавершение(РезультатПроверки, ДополнительныеПараметры) Экспорт
Если РезультатПроверки = Неопределено Тогда
ТекстПредупреждения = НСтр("ru = 'Проверка уникальности не пройдена.
|Обратитесь к администратору информационной системы для устранения проблемы.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ВладелецФормы.ФизическоеЛицо, РезультатПроверки);
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьИзменениеПоисковойСтроки()
АктивноеФизическоеЛицо = АктивноеФизическоеЛицо();
ОтобратьОднофамильцев();
ВосстановитьАктивнуюСтроку(АктивноеФизическоеЛицо);
КонецПроцедуры
&НаКлиенте
Функция АктивноеФизическоеЛицо()
Если Элементы.Однофамильцы.ТекущиеДанные = Неопределено Тогда
Возврат Неопределено;
КонецЕсли;
Возврат Элементы.Однофамильцы.ТекущиеДанные.ПохожийЧеловек;
КонецФункции
&НаКлиенте
Процедура ВосстановитьАктивнуюСтроку(АктивноеФизическоеЛицо)
Если АктивноеФизическоеЛицо = Неопределено Тогда
АктивизироватьПервуюСтроку();
Возврат;
КонецЕсли;
НайденныеСтроки = Однофамильцы.НайтиСтроки(Новый Структура("ПохожийЧеловек", ПохожийЧеловек));
Если НайденныеСтроки.Количество() > 0 Тогда
Элементы.Однофамильцы.ТекущаяСтрока = НайденныеСтроки[0].ПолучитьИдентификатор();
Возврат;
КонецЕсли;
АктивизироватьПервуюСтроку();
КонецПроцедуры
&НаКлиенте
Процедура АктивизироватьПервуюСтроку()
Если Однофамильцы.Количество() > 0 Тогда
Элементы.Однофамильцы.ТекущаяСтрока = Однофамильцы[0].ПолучитьИдентификатор();
Возврат;
КонецЕсли;
СброситьАктивноеФизическоеЛицо();
КонецПроцедуры
&НаКлиенте
Процедура СброситьАктивноеФизическоеЛицо()
НоваяСтрока = ВсеОднофамильцы.Добавить();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, НоваяСтрока);
ВсеОднофамильцы.Удалить(НоваяСтрока);
УстановитьОтборВИстории();
УстановитьВидимостьПометкиВАрхиве(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОтобратьОднофамильцев()
Если ПустаяСтрока(Поиск) Тогда
Если Однофамильцы.Количество() = ВсеОднофамильцы.Количество() Тогда
Возврат;
КонецЕсли;
Однофамильцы.Очистить();
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(ВсеОднофамильцы, Однофамильцы);
Возврат;
КонецЕсли;
Однофамильцы.Очистить();
ИскомыйНомер = НормализованныйНомер(Поиск);
Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИскомыйНомер) Тогда
ИскомыйНомер = Неопределено;
КонецЕсли;
Для Каждого СтрокаДанных Из ВсеОднофамильцы Цикл
РезультатПоиска = НайтиВСтрокеДанных(СтрокаДанных, Поиск, ИскомыйНомер);
Если Не РезультатПоиска.Найдено Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Однофамильцы.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных);
Если НоваяСтрока.ВАрхивеФизическихЛиц Тогда
НоваяСтрока[РезультатПоиска.ИмяПоля] = Поиск;
Если ЭтоФамилияИмяИлиОтчество(РезультатПоиска.ИмяПоля) Тогда
НоваяСтрока.ФИОПолные = ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФИОИзЧастей(НоваяСтрока);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция НайтиВСтрокеДанных(СтрокаДанных, ИскомыйТекст, ИскомыйНомер)
Результат = Новый Структура(
"Найдено,
|ИмяПоля");
Результат.Найдено = Ложь;
СтандартнаяОбработка = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.АрхивФизическихЛиц") Тогда
МодульАрхивФизическихЛиц = ОбщегоНазначения.ОбщийМодуль("АрхивФизическихЛиц");
МодульАрхивФизическихЛиц.НайтиВСтрокеДанных(
Результат, СтрокаДанных, ИскомыйТекст, ИскомыйНомер, СтандартнаяОбработка);
КонецЕсли;
Если Не СтандартнаяОбработка Тогда
Возврат Результат;
КонецЕсли;
Если СтрНайти(ВРег(СтрокаДанных.ФИОПолные), ВРег(Поиск)) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "ФИОПолные";
Возврат Результат;
КонецЕсли;
Если СтрНайти(ВРег(СтрокаДанных.АдресЭлектроннойПочты), ВРег(Поиск)) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "АдресЭлектроннойПочты";
Возврат Результат;
КонецЕсли;
Если СтрНайти(ВРег(СтрокаДанных.ДатаРождения), ВРег(Поиск)) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "ДатаРождения";
Возврат Результат;
КонецЕсли;
Если ИскомыйНомер = Неопределено Тогда
Возврат Результат;
КонецЕсли;
Если СтрНайти(НормализованныйНомер(СтрокаДанных.МобильныйТелефон), ИскомыйНомер) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "МобильныйТелефон";
Возврат Результат;
КонецЕсли;
Если СтрНайти(НормализованныйНомер(СтрокаДанных.СтраховойНомерПФР), ИскомыйНомер) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "СтраховойНомерПФР";
Возврат Результат;
КонецЕсли;
Если СтрНайти(НормализованныйНомер(СтрокаДанных.ИНН), ИскомыйНомер) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "ИНН";
Возврат Результат;
КонецЕсли;
Если СтрНайти(НормализованныйНомер(СтрокаДанных.ДокументСерия), ИскомыйНомер) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "ДокументСерия";
Возврат Результат;
КонецЕсли;
Если СтрНайти(НормализованныйНомер(СтрокаДанных.ДокументНомер), ИскомыйНомер) > 0 Тогда
Результат.Найдено = Истина;
Результат.ИмяПоля = "ДокументНомер";
Возврат Результат;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция НормализованныйНомер(Номер)
Возврат СтроковыеФункцииКлиентСервер.ЗаменитьОдниСимволыДругими(":;!@#$%^&-~`'.,?{}[]+=*/|\ ()_""", Номер, "");
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьПометкиВАрхиве(Форма)
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ВАрхивеФизическихЛицГруппа",
"Видимость", Форма.ВАрхивеФизическихЛиц);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Форма.Элементы, "ПроверитьАрхивГруппа",
"Видимость", Форма.ВАрхивеФизическихЛиц);
КонецПроцедуры
&НаКлиенте
Процедура НачатьПроверкуАрхивнойЗаписи()
Подсказка = НСтр("ru = 'Введите известную информацию о человеке'");
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершитьПроверкуАрхивнойЗаписи", ЭтотОбъект);
ПоказатьВводСтроки(ОписаниеОповещения, , Подсказка);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершитьПроверкуАрхивнойЗаписи(ИскомаяСтрока, ДополнительныеПараметры) Экспорт
Если ИскомаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
Если ПустаяСтрока(ИскомаяСтрока) Тогда
Возврат;
КонецЕсли;
РезультатПоиска = НайтиВДанныхАрхивнойЗаписи(ИскомаяСтрока);
Если Не РезультатПоиска.Найдено Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Нет, скорее всего, это другой человек.'"));
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ЗарплатаКадрыКорпоративнаяПодсистемы.ПодборПерсонала") Тогда
МодульПодборПерсоналаКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодборПерсоналаКлиент");
МодульПодборПерсоналаКлиент.ПриЗавершенииПроверкиАрхивнойЗаписи(ЭтотОбъект, РезультатПоиска);
КонецЕсли;
ПоказатьПредупреждение(, НСтр("ru = 'Да, этот человек тот, кто вам нужен.'"));
ЗаменитьАрхивныеДанныеРезультатамиПоиска(ИскомаяСтрока, РезультатПоиска);
КонецПроцедуры
&НаСервере
Функция НайтиВДанныхАрхивнойЗаписи(ИскомаяСтрока)
ИскомыйНомер = НормализованныйНомер(ИскомаяСтрока);
Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИскомыйНомер) Тогда
ИскомыйНомер = Неопределено;
КонецЕсли;
СтрокаДанных = ВсеОднофамильцы.НайтиСтроки(Новый Структура("ПохожийЧеловек", ПохожийЧеловек))[0];
Возврат НайтиВСтрокеДанных(СтрокаДанных, ИскомаяСтрока, ИскомыйНомер);
КонецФункции
&НаСервере
Процедура ЗаменитьАрхивныеДанныеРезультатамиПоиска(ИскомаяСтрока, РезультатПоиска)
Если ЭтоФамилияИмяИлиОтчество(РезультатПоиска.ИмяПоля) Тогда
ЧастиИмени = ФизическиеЛицаКлиентСервер.ЧастиИмени(ФИОПолные);
ЧастиИмени[РезультатПоиска.ИмяПоля] = ИскомаяСтрока;
ФИОПолные = СокрЛП(ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФИОИзЧастей(ЧастиИмени));
Иначе
ЭтотОбъект[РезультатПоиска.ИмяПоля] = ИскомаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЭтоФамилияИмяИлиОтчество(ИмяПоля)
Возврат ОбщегоНазначенияБЗККлиентСервер.ЗначенияВМассиве("Фамилия", "Имя", "Отчество").Найти(ИмяПоля) <> Неопределено;
КонецФункции
&НаКлиенте
Процедура Подключаемый_ПослеЗавершенияПолученияИсторииВзаимоотношений(Результат, ДополнительныеПараметры) Экспорт
СотрудникиКлиент.ЗавершитьЗаполнениеИсторииВзаимоотношений(ЭтотОбъект, Результат, ДополнительныеПараметры);
ЗавершитьЗаполнениеИсторииВзаимоотношенийНаСервере(Результат, ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗавершитьЗаполнениеИсторииВзаимоотношенийНаСервере(Результат, ДополнительныеПараметры)
СотрудникиФормы.ПеренестиИсториюВзаимоотношенийПоРезультатуДлительнойОперации(История, Результат,
ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПараметрыПроверкиУникальностиПоИННиСНИЛС(Параметры)
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Фамилия", "");
ПараметрыОткрытия.Вставить("Имя", "");
ПараметрыОткрытия.Вставить("Отчество", "");
ПараметрыОткрытия.Вставить("ВозможнаПроверкаПоИНН", Ложь);
ПараметрыОткрытия.Вставить("ВозможнаПроверкаПоСНИЛС", Ложь);
ПараметрыОткрытия.Вставить("ИзФормыСотрудника", Ложь);
ЗаполнитьЗначенияСвойств(ПараметрыОткрытия, Параметры);
ПараметрыПроверкиУникальностиПоИННиСНИЛС = Новый ФиксированнаяСтруктура(ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтборВИстории()
Элементы.История.ОтборСтрок = Новый ФиксированнаяСтруктура(Новый Структура("ОбъектВзаимоотношений", ПохожийЧеловек));
КонецПроцедуры
#КонецОбласти