Физические лица / Модуль менеджера

файл
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

#Область ДляВызоваИзДругихПодсистем

// СтандартныеПодсистемы.УправлениеДоступом

// См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
	Ограничение.Текст =
	"ПрисоединитьДополнительныеТаблицы
	|ЭтотСписок КАК Т
	|
	|ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Т1
	|	ПО Т1.ФизическоеЛицо = Т.Ссылка
	|;
	|РазрешитьЧтениеИзменение
	|ГДЕ
	|	ЭтоГруппа
	|	ИЛИ ЗначениеРазрешено(Т.Ссылка)
	|	ИЛИ ЭтоАвторизованныйПользователь(Т1.Ссылка)";
КонецПроцедуры

// Конец СтандартныеПодсистемы.УправлениеДоступом

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

// Функция определяет реквизиты физического лица.
//
// Параметры:
//  ФизЛицо - СправочникСсылка.ФизическиеЛица - Ссылка на элемент справочника
//
// Возвращаемое значение:
//	Выборка - Реквизиты выбранного физического лица
//
Функция ПолучитьРеквизитыФизическогоЛица(ФизЛицо) Экспорт
	
		
	Запрос = Новый Запрос("
	|ВЫБРАТЬ
	|	ФизическиеЛица.ИНН КАК ИНН
	|ИЗ
	|	Справочник.ФизическиеЛица КАК ФизическиеЛица
	|ГДЕ
	|	ФизическиеЛица.Ссылка = &ФизЛицо
	|");
	
	Запрос.УстановитьПараметр("ФизЛицо", ФизЛицо);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка;
	Иначе
		Возврат Неопределено;
	КонецЕсли;

КонецФункции

// Функция определяет представление документа физического лица.
// Возвращает представление документа физического лица, если найден один документ.
// Возвращает пустую строку, если документ не найден или документов больше одного
//
// Параметры:
//  ФизЛицо - СправочникСсылка.ФизическиеЛица - Ссылка на физ. лицо
//  ВидДокумента - СправочникСсылка.ВидыДокументовФизическихЛиц - Вид документа физ. лица
//
// Возвращаемое значение:
//  Строка - Представление документа физического лица
//
Функция ПолучитьДокументФизическогоЛицаПоУмолчанию(ФизЛицо, ВидДокумента = Неопределено) Экспорт
	
	Запрос = Новый Запрос("
	|ВЫБРАТЬ ПЕРВЫЕ 2
	|	ДокументыФизическихЛиц.Представление КАК ПредставлениеДокументаФизическогоЛица
	|ИЗ
	|	РегистрСведений.ДокументыФизическихЛиц КАК ДокументыФизическихЛиц
	|ГДЕ
	|	ДокументыФизическихЛиц.Физлицо = &Физлицо
	|	И (ДокументыФизическихЛиц.ВидДокумента = &ВидДокумента
	|		ИЛИ &ВидДокумента = Неопределено)
	|");
	
	Запрос.УстановитьПараметр("Физлицо", ФизЛицо);
	Запрос.УстановитьПараметр("ВидДокумента", ?(ЗначениеЗаполнено(ВидДокумента), ВидДокумента, Неопределено));
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Количество() = 1 
	   И Выборка.Следующий()
	Тогда
		ПредставлениеДокументаФизическогоЛица = Выборка.ПредставлениеДокументаФизическогоЛица;
	Иначе
		ПредставлениеДокументаФизическогоЛица = "";
	КонецЕсли;
	
	Возврат ПредставлениеДокументаФизическогоЛица;

КонецФункции

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

#КонецЕсли

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

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

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

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
	
#Область СлужебныеПроцедурыИФункции

#Область Печать

// Заполняет список команд печати.
// 
// Параметры:
//   КомандыПечати – ТаблицаЗначений – состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати
//
Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт
		
	ЗащитаПерсональныхДанных.ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных(КомандыПечати);
	
КонецПроцедуры

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

#Область ШаблоныСообщений

// Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений.
//
// Параметры:
//  Реквизиты               - ДеревоЗначений - список реквизитов шаблона.
//         ** Имя            - Строка - Уникальное имя общего реквизита.
//         ** Представление  - Строка - Представление общего реквизита.
//         ** Тип            - Тип    - Тип реквизита. По умолчанию строка.
//         ** Формат         - Строка - Формат вывода значения для чисел, дат, строк и булевых значений.
//  Вложения                - ТаблицаЗначений - печатные формы и вложения
//         ** Имя            - Строка - Уникальное имя вложения.
//         ** Представление  - Строка - Представление варианта.
//         ** ТипФайла       - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" и др.
//  ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений.
//
Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений.
//
// Параметры:
//  Сообщение - Структура - структура с ключами:
//    * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов.
//      ** Ключ     - Строка - имя реквизита в шаблоне;
//      ** Значение - Строка - значение заполнения в шаблоне.
//    * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов.
//      ** Ключ     - Строка - имя реквизита в шаблоне;
//      ** Значение - Строка - значение заполнения в шаблоне.
//    * Вложения - Соответствие - значения реквизитов 
//      ** Ключ     - Строка - имя вложения в шаблоне;
//      ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//  ДополнительныеПараметры - Структура -  Дополнительная информация о шаблоне сообщения.
//
Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт
	
КонецПроцедуры

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS.
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма.
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

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

#Область Прочие

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

//Определяет, есть ли в базе физическое лицо с таким же ИНН
// Параметры
//  ИНН  - Строка - проверяемый ИНН
//  ИсключаяСсылку  - СправочникСсылка.ФизическиеЛица - физическое лицо, исключаемое из проверки
//
// Возвращаемое значение:
//   ВыборкаИзРезультатовЗапроса, Неопределено   - выборка с данными найденного физического лица
//  с таким же ИНН, Неопределено если искомый ИНН никому не назначен.
//
Функция ИННУжеНазначенДругомуФизЛицу(ИНН, ИсключаяСсылку = Неопределено)
	
	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ ПЕРВЫЕ 1
	|	ФизическиеЛица.Ссылка,
	|	ПРЕДСТАВЛЕНИЕ(ФизическиеЛица.Наименование) КАК Представление
	|ИЗ
	|	Справочник.ФизическиеЛица КАК ФизическиеЛица
	|ГДЕ
	|	ФизическиеЛица.ИНН = &ИНН
	|	И ФизическиеЛица.Ссылка <> &Ссылка";
	
	Запрос.УстановитьПараметр("ИНН",	ИНН);
	Запрос.УстановитьПараметр("Ссылка", ИсключаяСсылку);
	
	Выборка = Запрос.Выполнить().Выбрать();
	Если Выборка.Следующий() Тогда
		Возврат Выборка;
	КонецЕсли;
	
	Возврат Неопределено;
	
КонецФункции

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

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

#КонецЕсли

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