Физические лица / Найдены люди с похожими данными / Модуль формы

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

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

&НаСервере
Функция НайтиВДанныхАрхивнойЗаписи(ИскомаяСтрока)
	
	ИскомыйНомер = НормализованныйНомер(ИскомаяСтрока);
	Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИскомыйНомер) Тогда
		ИскомыйНомер = Неопределено;
	КонецЕсли;

	СтрокаДанных = ВсеОднофамильцы.НайтиСтроки(Новый Структура("ПохожийЧеловек", ПохожийЧеловек))[0];

	Возврат НайтиВСтрокеДанных(СтрокаДанных, ИскомаяСтрока, ИскомыйНомер);
			
КонецФункции

&НаСервере
Процедура ЗаменитьАрхивныеДанныеРезультатамиПоиска(ИскомаяСтрока, РезультатПоиска)

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

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

&НаСервере
Функция ЭтоФамилияИмяИлиОтчество(ИмяПоля)
	
	Возврат ОбщегоНазначенияБЗККлиентСервер.ЗначенияВМассиве("Фамилия", "Имя", "Отчество").Найти(ИмяПоля) <> Неопределено;
	
КонецФункции

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

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

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

&НаКлиенте
Процедура УстановитьОтборВИстории()
	
	Элементы.История.ОтборСтрок = Новый ФиксированнаяСтруктура(Новый Структура("ОбъектВзаимоотношений", ПохожийЧеловек));
	
КонецПроцедуры
	
#КонецОбласти

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