HelpF.pro

Как разобрать "наименование" сотрудника Ф.И.О. на Фамилию и инициалы сотрудника?

Код 1C v 7.x
 
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
СЗ = СоздатьОбъект("СписокЗначений");
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.ДобавитьЗначение(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.ДобавитьЗначение(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции

Функция ФамилияИмяОтчество(Объект,Фамилия="",Имя="",Отчество="") Экспорт

Если ТипЗначения(Объект)=2 Тогда
ФИО = глРазделить(СокрЛП(Объект),",");
Иначе
ФИО = глРазделить(СокрЛП(Объект.Наименование),",");
КонецЕсли;
ФИО = глРазложить(ФИО," ");
Фамилия = ""; Имя = ""; Отчество = "";
Если ФИО.РазмерСписка() > 0 Тогда
Фамилия = ФИО.ПолучитьЗначение(1);
Если ФИО.РазмерСписка() > 1 Тогда
Имя = ФИО.ПолучитьЗначение(2);
Если ФИО.РазмерСписка() > 2 Тогда
// а вот отчество бывает и не из одного слова
Для Сч = 3 По ФИО.РазмерСписка() Цикл
Отчество = Отчество + ФИО.ПолучитьЗначение(Сч) + " ";
КонецЦикла;
Если ПустоеЗНачение(Отчество) = 0 Тогда
Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Возврат Фамилия+?(ПустоеЗначение(Имя)=0," "+Лев(Имя,1)+"."+?(ПустоеЗначение(Отчество)=0,Лев(Отчество,1)+".",""),"")

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



Код 1C v 8.х
 
Функция глРазложить(Знач Стр, Разделитель = ",") Экспорт
СЗ = Новый СписокЗначений;
Если Разделитель = " " Тогда
Стр = СокрЛП(Стр);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.Добавить(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.Добавить(Лев(Стр,Поз-1));
Стр = СокрЛ(Сред(Стр,Поз));
КонецЦикла;
Иначе
ДлинаРазделителя = СтрДлина(Разделитель);
Пока 1=1 Цикл
Поз = Найти(Стр,Разделитель);
Если Поз=0 Тогда
СЗ.Добавить(Стр);
Возврат СЗ;
КонецЕсли;
СЗ.Добавить(Лев(Стр,Поз-1));
Стр = Сред(Стр,Поз+ДлинаРазделителя);
КонецЦикла;
КонецЕсли;
КонецФункции

Функция РазборФИО(Сотрудник)
ФИО = глРазложить(Сотрудник," ");
Фамилия = ""; Имя = ""; Отчество = "";
Если ФИО.Количество() > 0 Тогда
Фамилия = Строка(ФИО.Получить(0));
Если ФИО.Количество() > 1 Тогда
Имя = Строка(ФИО.Получить(1));
Если ФИО.Количество() > 2 Тогда
// а вот отчество бывает и не из одного слова
Для Сч = 2 По ФИО.Количество()-1 Цикл
Отчество = Отчество + Строка(ФИО.Получить(Сч)) + " ";
КонецЦикла;
Если ЗначениеЗаполнено(Отчество) Тогда
Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат Фамилия+?(ЗначениеЗаполнено(Имя)," "+Лев(Имя,1)+"."+?(ЗначениеЗаполнено(Отчество),Лев(Отчество,1)+".",""),"")
КонецФункции


Обязательно посмотрите более краткий вариант!
)
Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq8/view/39.html