пятница, 10 февраля 2017 г.

Формирует фамилию и инициалы


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

 ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалыФизЛица(ФИО, Фамилия, Имя, Отчество);
 Возврат ФИО;
КонецФункции

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

 ФИОФизическогоЛица = Новый Структура("Фамилия, Имя, Отчество", "", "", "");

 Если НЕ ЗначениеЗаполнено(ФизЛицо) Тогда
  Возврат ФИОФизическогоЛица;
 КонецЕсли;

 ИмяРегистраФИО = "ФИОФизическихЛиц";

 Если Метаданные.РегистрыСведений.Найти(ИмяРегистраФИО) = Неопределено Тогда
  Возврат ФизическиеЛицаКлиентСервер.ФамилияИмяОтчество(СокрЛП(ФизЛицо));
 КонецЕсли;

 Если НЕ ЗначениеЗаполнено(Дата) Тогда
  Дата = ТекущаяДатаСеанса();
 КонецЕсли;

 УстановитьПривилегированныйРежим(Истина);
 ТаблицаСрезПоследних = РегистрыСведений[ИмяРегистраФИО].СрезПоследних(
  ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса()),
  Новый Структура("ФизическоеЛицо", ФизЛицо));
 УстановитьПривилегированныйРежим(Ложь);

 Если ТаблицаСрезПоследних.Количество() > 0 Тогда
  ЗаполнитьЗначенияСвойств(ФИОФизическогоЛица, ТаблицаСрезПоследних[0]);
 КонецЕсли;
 Возврат ФИОФизическогоЛица;
КонецФункции