Разбиваем строку "Фамилия Имя Отчество" на "Фамилия И.О." //////////////////////////// Разборка на инициалы Руководителя
////////////////////////////Выборка.ОРуководитель = "Иванов Иван Иванович" ПервИнициалР = 0; ПервИнициалР = СтрНайти(Выборка.ОРуководитель, " ") + 1; ПервИнициалР = Сред(Выборка.ОРуководитель, ПервИнициалР, 1); ВторойИнициалР = 0; ВторойИнициалР = СтрНайти(Выборка.ОРуководитель, " ",НаправлениеПоиска.СКонца) + 1; ВторойИнициалР = Сред(Выборка.ОРуководитель, ВторойИнициалР, 1); ////////////////////////////////// Конец Разборки на Инициалы Руководителя
//////////////вывод в табличной части "Подвал"
Подвал.Параметры.ОРуководитель = Лев(Выборка.ОРуководитель, СтрНайти(Выборка.ОРуководитель, " ")) + ПервИнициалР + "." + ВторойИнициалР + ".";
Категория:
Работа с Текстом (Строкой) Определение пола по имени Функция проверяет уже существующих в базе данных людей на наличие требуемого имени.
Во время поиска следует учитывать следующие ситуации:
1) Вместо имени записаны
инициалы
2) Существуют имена, которые могут быть как мужскими, так и женскими (например, Саша)
На второй пункт можно возразить: следует писать полное паспортное имя, а не уменьшительное. На самом деле это не всегда удобно, особенно во время большого потока людей или же, например, при работе с иностранными именами.
Код 1C v 8.х Функция ОпределитьПол(Имя) Экспорт
Если СтрДлина(Имя) > 1 Тогда
Запрос = Новый Запрос("
|ВЫБРАТЬ
| П.Пол КАК Пол
|ИЗ
| Справочник.Пациенты КАК П
|ГДЕ
| ВЫРАЗИТЬ(П.Имя КАК СТРОКА(100)) = ВЫРАЗИТЬ(&Имя КАК СТРОКА(100))");
Запрос.УстановитьПараметр("Имя",Имя);
Результат = Запрос.Выполнить().Выгрузить();
М = 0;
Ж = 0;
Для Каждого Строка Из Результат Цикл
Если Строка.Пол = Перечисления.Пол.Мужской Тогда
М = 1;
КонецЕсли;
Если Строка.Пол = Перечисления.Пол.Женский Тогда
Ж = 1;
КонецЕсли;
КонецЦикла;
Если (М = 1) И (Ж = 0) Тогда
Возврат Перечисления.Пол.Мужской;
КонецЕсли;
Если (М = 0) И (Ж = 1) Тогда
Возврат Перечисления.Пол.Женский;
КонецЕсли;
КонецЕсли;
КонецФункции
Категория:
Полезные, Универсальные Функции Как разобрать "наименование" сотрудника Ф.И.О. на Фамилию и инициалы сотрудника? Код 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)+".",""),"")
КонецФункции
Обязательно посмотрите более краткий вариант!
Категория:
Полезные, Универсальные Функции