Имя: Пароль:
1C
 
Как разбить ФИО по частям?
,
0 1сПупс
 
09.08.18
11:29
Добрый день даммы и господа.
В КД 2.1 из источника передаю ФИО реквизитом "Наименование"
в Приемнике нужно разбивать его на "Имя", "Фамилия", "Отчество".
Подскажите как это сделать если кто сталкивался.
1 hhhh
 
09.08.18
11:32
(0) 1. найти эту функцию в общем модуле конфы 2. применить 3. забыть до следующего раза
2 Birmingem
 
09.08.18
11:34
Если всегда строгий порядок: 1-Фамилия, 2-Имя, 3-Отчество, то элементарно.
Работаешь строковыми методами. Находишь пробел, отрезаешь и т.д.
А если порядок разный, то никак. Запишется имя в фамилию или типа того.
3 1сПупс
 
09.08.18
11:36
да, порядок всегда Фамилия Имя Отчество
4 Вафель
 
09.08.18
11:41
(2) Уже есть СтрРазделить
5 catena
 
09.08.18
11:52
(4)Не у всех
6 1Сергей
 
09.08.18
11:54
Па́бло Дие́го Хосе́ Франси́ско де Па́ула Хуа́н Непомусе́но Мари́я де лос Реме́диос Сиприа́но де ла Санти́сима Тринида́д Ма́ртир Патри́сио Руи́с и Пика́ссо

Это один человек
7 1сПупс
 
09.08.18
11:58
(6) есть еще
Барнаби Мармадюк Алоизий Бенджи Кобвеб Дартаньян Эгберт Феликс Гаспар Гумберт Игнатий Джейден Каспер Лерой Максимилиан Недди Объяхулу Пепин Кьюллиам Розенкранц Секстон Тедди Апвуд Виватма Уэйленд Ксилон Ярдли Закари Усански
8 1сПупс
 
09.08.18
11:58
9 1сПупс
 
09.08.18
12:00
ФИО = Источник.Наименование;
ЧислоФамилии = Найти(ФИО, " ");
Фамилия = Лев(ФИО, ЧислоФамилии-1);
сообщить(Фамилия);
ИО = сред(ФИО, ЧислоФамилии+1);
ЧислоИмени = Найти(ИО, " ");
Имя = Лев(ИО, ЧислоИмени-1);
сообщить(Имя);
Отчество = сред(ИО, ЧислоИмени+1);
сообщить(Отчество);
сообщить(Фамилия+ " "+ Имя+ " "+ Отчество);
сообщить(Фамилия+ Имя+ Отчество);


можно оптимальней?
10 hhhh
 
09.08.18
12:04
(9) можно, найти в типовой конфе, скопипастить себе. Там оптимально. я же тебе написал в (1). чего ты фигней страдаешь?
11 catena
 
09.08.18
12:04
(8)Смех смехом, а у меня 32 сотрудника, у которых в ФИО больше 3 слов...
12 olegves
 
09.08.18
12:07
(9) у некоторых муслимов есть части  в ФИО, типа "Огли" или "Угли" - куда ты их прицепишь?
13 Быдло замкадное
 
09.08.18
12:09
ОбщегоНазначения.РазложитьФИО

Слова с третьего по N считаются отчеством. Что велосипед придумывать?
14 mistеr
 
09.08.18
12:09
(12) "Угли" и "кызы" относится к отчеству.
15 0xFFFFFF
 
09.08.18
12:11
(7) это приматы из семейства "дурачок обыкновенный" - на них не надо ориентироваться :))
16 catena
 
09.08.18
12:16
(12)А бывают еще имена смешные, "Казыбек би" вот например. А еще в фамилии вместо -ов приписывают тегі.
17 1Сергей
 
09.08.18
12:20
(15) Как ты плохо о Пикассо(6) высказываешься :)
18 1сПупс
 
09.08.18
12:23
Функция РазложитьФИО(Знач ФИОСтр) Экспорт
    
    ФИОСтр = СокрЛП(ФИОСтр);
    
    ФИО = Новый Структура("Фамилия, Имя, Отчество", "", "", "");
    
    ПервыйПробел = СтрНайти(ФИОСтр, " ");
    
    Если ПервыйПробел = 0 Тогда
        
        ФИО.Фамилия = ФИОСтр;
        
        Возврат ФИО;
        
    КонецЕсли;
    
    ФИО.Фамилия = СокрЛП(Лев(ФИОСтр, ПервыйПробел - 1));
    
    ФИОСтр = СокрЛП(Сред(ФИОСтр, ПервыйПробел + 1));
    
    ВторойПробел = СтрНайти(ФИОСтр, " ");
    
    Если ВторойПробел = 0 Тогда
        
        ФИО.Имя = ФИОСтр;
        
        Возврат ФИО;
        
    КонецЕсли;
    
    ФИО.Имя = СокрЛП(Лев(ФИОСтр, ВторойПробел - 1));
    
    ФИО.Отчество = СокрЛП(Сред(ФиоСтр, ВторойПробел + 1));
19 1сПупс
 
09.08.18
12:24
в принципе то же самое
20 catena
 
09.08.18
12:32
(18)Что ж ты так мучаешься, в поиске масса вариантов.

ФИО = СтрЗаменить(ФИО," ",Символы.ПС);
Фамилия = СтрПолучитьСтроку(Стр,1);
Имя = СтрПолучитьСтроку(Стр,2);
Для к=2 по СтрЧислоСтрок(ФИО) Цикл
   Отчество = Отчество+" "+СтрПолучитьСтроку(Стр,к);
КонецЦикла;
21 Вафель
 
09.08.18
12:33
(20) лучше использовать (4)
22 catena
 
09.08.18
12:36
(21)Если платформа позволяет.
23 hhhh
 
09.08.18
12:37
(21) + и СтрРазделить гораздо эффективнее. У меня была строка многострочная из 18000 строк. через (20) раскладывалась около минуты, а через СтрРазделить меньше 1 сек.