// Формирует фамилию и инициалы либо по наименованию элемента справочника ФизическиеЛица,
// либо по переданным строкам.
// Если передан Объект, то извлеченная из него строка считается совокупностью
// Фамилия + Имя + Отчество, разделенными пробелами.
//
// Параметры
// ОбъектИлиСтрока - строка, ссылка или объект элемента справочника ФизическиеЛица.
// Фамилия - фамилия физического лица.
// Имя - имя физического лица.
// Отчество - отчество физического лица.
//
// Возвращаемое значение
// Строка - фамилия и инициалы одной строкой.
// В параметрах Фамилия, Имя и Отчество записываются вычисленные части.
//
// Пример:
// Результат = ФамилияИнициалыФизЛица("Иванов Иван Иванович"); // Результат = "Иванов И. И."
//
Функция ФамилияИнициалыФизЛица(ОбъектИлиСтрока = "", Фамилия = " ", Имя = " ", Отчество = " ") Экспорт
ТипОбъекта = ТипЗнч(ОбъектИлиСтрока);
Если ТипОбъекта = Тип("СправочникСсылка.ФизическиеЛица") Тогда
ФИО = СокрЛП(ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОбъектИлиСтрока, "Наименование"));
ИначеЕсли ТипОбъекта = Тип("СправочникОбъект.ФизическиеЛица") Тогда
ФИО = СокрЛП(ОбъектИлиСтрока.Наименование);
Иначе
ФИО = ОбъектИлиСтрока;
КонецЕсли;
ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(ФИО, Фамилия, Имя, Отчество);
Возврат ФИО;
КонецФункции
// Функция возвращает ФИО в виде структуры.
// Если в конфигурации есть регистра сведений ФИОФизическихЛиц, то информация будет получена из него.
// Если такого регистра нет, то результатом будет наименование физ. лица, разложена на составляющие его части.
//
// Параметры:
// ФизЛицо - СправочникСсылка.ФизическиеЛица - физ. лицо.
// Дата - Дата - дата для получения ФИО; имеет смысл только есть есть регистр сведений ФИОФизическихЛиц.
//
// Возвращаемое значение:
// Структура - со свойствами:
// * Фамилия - Строка
// * Имя - Строка
// * Отчество - Строка
//
Функция ФамилияИмяОтчество(ФизЛицо, Дата = Неопределено) Экспорт
ФИОФизическогоЛица = Новый Структура("Фамилия, Имя, Отчество", "", "", "");
Если НЕ ЗначениеЗаполнено(ФизЛицо) Тогда
Возврат ФИОФизическогоЛица;
КонецЕсли;
ИмяРегистраФИО = "ФИОФизическихЛиц";
Если Метаданные.РегистрыСведений.Найти(ИмяРегистраФИО) = Неопределено Тогда
Возврат ФизическиеЛицаКлиентСервер.ФамилияИмяОтчество(СокрЛП(ФизЛицо));
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Дата) Тогда
Дата = ТекущаяДатаСеанса();
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ТаблицаСрезПоследних = РегистрыСведений[ИмяРегистраФИО].СрезПоследних(
?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()),
Новый Структура("ФизическоеЛицо", ФизЛицо));
УстановитьПривилегированныйРежим(Ложь);
Если ТаблицаСрезПоследних.Количество() > 0 Тогда
ЗаполнитьЗначенияСвойств(ФИОФизическогоЛица, ТаблицаСрезПоследних[0]);
КонецЕсли;
Возврат ФИОФизическогоЛица;
КонецФункции