Разбиваем строку "Фамилия Имя Отчество" на "Фамилия И.О." //////////////////////////// Разборка на инициалы Руководителя
////////////////////////////Выборка.ОРуководитель = "Иванов Иван Иванович" ПервИнициалР = 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 ) + "." , "" ) , "" )
КонецФункции
Обязательно посмотрите более краткий вариант!
Категория:
Полезные, Универсальные Функции