Имя: Пароль:
1C
 
Прав, Лев, СокрЛП
Ø (Волшебник 21.09.2005 17:26)
0 Samir
 
21.09.05
15:24
Народ, ну выдерите код отражающий Иванов Иван Иванович в виде Иванов И.И. Времени нет разбираться, горит.
Заранее благодарен
1 РБ
 
21.09.05
15:27
ФИО()
2 ЗиК 256
 
21.09.05
15:27
//******************************************************************************
//    глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
//    Параметры:
//        Объект     - элемент справочника Сотрудники или Строка
//        Фамилия     - в этот параметр будет записана фамилия сотрудника
//        Имя         - в этот параметр будет записано имя сотрудника
//        Отчество - в этот параметр будет записано отчество сотрудника
//
//    Возвращаемое значение:
//        фамилия и инициалы сотрудника
//
//    Описание:
//        разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
//        и возвращает фамилию и инициалы сотрудника
//
Функция глФамилияИмяОтчество(Объект,Фамилия="",Имя="",Отчество="") Экспорт
   
   Если ТипЗначения(Объект)=2 Тогда
       ФИО = глРазделить(СокрЛП(Объект),",");
   Иначе
       ФИО = глРазделить(СокрЛП(Объект.Наименование),",");
   КонецЕсли;                            
   ФИО = глРазложить(ФИО," ");
   Фамилия = ""; Имя = ""; Отчество = "";
   Если ФИО.РазмерСписка() > 0 Тогда
       Фамилия = ФИО.ПолучитьЗначение(1);
       Если ФИО.РазмерСписка() > 1 Тогда
           Имя        = ФИО.ПолучитьЗначение(2);
           Если ФИО.РазмерСписка() > 2 Тогда
               // а вот отчество бывает и не из одного слова                
               Для Сч = 3 По ФИО.РазмерСписка() Цикл
                   Отчество = Отчество + ФИО.ПолучитьЗначение(Сч) + " ";
               КонецЦикла;
               Если ПустоеЗНачение(Отчество) = 0 Тогда
                   Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
               КонецЕсли;
           КонецЕсли;
       КонецЕсли;
   КонецЕсли;
   
   Возврат Фамилия+?(ПустоеЗначение(Имя)=0," "+Лев(Имя,1)+"."+?(ПустоеЗначение(Отчество)=0,Лев(Отчество,1)+".",""),"")

КонецФункции    // глФамилияИмяОтчество
3 ШтушаКутуша
 
21.09.05
15:28
(0) никогда не забывайте про глобальный модуль,коллега! :)
4 Волшебник
 
модератор
21.09.05
15:28
Тут писать нечего:
ФИО = СокрЛП(ФИО);
ПозПробела = НАйти(ФИО," ");
ИмяОтчество = Сред(ФИО,ПозПробела+1);
ПозПробела2 = НАйти(ИмяОтчество," ");
Отчество = Сред(ИмяОтчество,ПозПробела2+1);
ФамилияИО = Лев(ФИО,ПозПробела-1) + " " + Лев(ИмяОтчество,1) + "." + Лев(Отчество,1);

код не проверял
5 ИвановИван
 
21.09.05
15:28
наркоманы
6 Samir
 
21.09.05
15:29
Спасибо
7 Ёпрст
 
21.09.05
15:29
Вот те 2 функции .... можешь слепить свою

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

//******************************************************************************
//    глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
//  Объект     - элемент справочника Сотрудники или ФизЛицо
//               или строка
//  Фамилия     - в этот параметр будет записана фамилия сотрудника
//  Имя         - в этот параметр будет записано имя сотрудника
//  Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
//  Фамилия и инициалы сотрудника
//
// Описание:
//  Разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
//  и возвращает фамилию и инициалы сотрудника
//
Функция глФамилияИмяОтчество(Объект, Фамилия="", Имя="", Отчество="") Экспорт
   
   ТипОбъекта = ТипЗначения(Объект);
   
   Если ТипЗначенияСтр(Объект) = "Строка" Тогда
       Список = глРазложить(Объект, " ");
       
   ИначеЕсли (ТипЗначенияСтр(Объект) = "Справочник") ИЛИ
             (ТипЗначенияСтр(Объект) = "ГрупповойКонтекст") Тогда
                 
       Если      Объект.Вид()="ФизЛица" Тогда
           Список = глРазложить(Объект.ПолнНаименование," ");
       ИначеЕсли Объект.Вид()="Сотрудники" Тогда
           Список = глРазложить(Объект.ФизЛицо.ПолнНаименование," ");
       КонецЕсли;
   КонецЕсли;
   
   Фамилия  = ?(0 < Список.РазмерСписка(), Список.ПолучитьЗначение(1), "");
   Имя         = ?(1 < Список.РазмерСписка(), Список.ПолучитьЗначение(2), "");
   Отчество = ?(2 < Список.РазмерСписка(), Список.ПолучитьЗначение(3), "");
   
   Возврат Фамилия+?(ПустоеЗначение(Имя) = 0," "+Лев(Имя,1)+"."+?(ПустоеЗначение(Отчество) = 0, Лев(Отчество,1)+".", ""), "");
   
КонецФункции // глФамилияИмяОтчество()
8 Волшебник
 
модератор
21.09.05
15:32
Надо после первого поста закрывать ветку, а то избыточные ответы бывают. Сейчас он начнет спрашивать: какой способ работает быстрее...
9 Рупор абсурда
 
21.09.05
15:35
Стр=СтрЗаменить(ФИО," ",РазделительСтрок);
Стр=СтрПолучитьСтроку(Стр,1)+" "+Лев(СтрПолучитьСтроку(Стр,2),1)+"."+Лев(СтрПолучитьСтроку(Стр,3),1)+".";
10 Волшебник
 
модератор
21.09.05
15:37
(9) Как всегда, гениально просто.
11 Рупор абсурда
 
21.09.05
15:39
(10) Давай теперь ты чё-нить с регулярными выражениями замути, отдай мне Эмблему и ветку можно будет спокойно закрывать ...
12 Grant
 
21.09.05
15:41
Стр="Иванов Иван Иванович";
Стр1="";
Пока СокрЛП(Лев(Стр,к))<>СокрЛП(Лев(Стр,к+1)) Цикл
   к=к+1;
КонецЦикла;
Стр1=Лев(Стр,к+2)+".";
к=1;
Пока СокрЛП(Прав(Стр,к))<>СокрЛП(Прав(Стр,к+1)) Цикл
   к=к+1;
КонецЦикла;
Стр1=Стр1+Лев(Прав(Стр,к),1)+".";
Сообщить(Стр1);
13 Рупор абсурда
 
21.09.05
15:43
(12) Переменная к не определена ...
14 КонецЦикла
 
21.09.05
15:44
2(11) В каком-то релизе ЗИКа писали, что что-то может быть двойным (Отчество вроде)... лучше взять функцию оттуда ;)
15 Волшебник
 
модератор
21.09.05
15:46
(11) Регулярные выражения для такой задачи как из пушки по воробьям. Достаточно будет:

$words = split(" ", $FIO);
$result = substr($words[0],0,1) + .... и т.д.

p.s. Эмблему не отдам. Ник какой-то "много-на-себя-берущий"...
16 Рупор абсурда
 
21.09.05
15:46
(14) Двойное отчество, это когда мать не уверена, кто отец?
17 Grant
 
21.09.05
15:46
(13) Добавь, не маленький...
ЗЫ я по условию сабжа... (Прав, Лев, СокрЛП )...
18 Рупор абсурда
 
21.09.05
15:47
(15) Ладно, оставь себе ... Считай, это мой тебе подарок ...
19 Рупор абсурда
 
21.09.05
15:49
(17) Хе ... у тебя ж там ещё Пока, Цикл, КонецЦикла ...
20 skunk
 
21.09.05
15:51
(16)когда папа не уверен... что он творец... своего создания
21 КонецЦикла
 
21.09.05
15:51
2(16) Ты слишком умный... заходи в КУЛ - я тебя забаню бугага
22 Cerrg
 
21.09.05
15:50
А бывает и без отчества...
23 Фокусник
 
21.09.05
15:53
(16) Это "Оглы". У нас есть несколько таких
24 Grant
 
21.09.05
15:53
(19) Это уже не строковые процедуры/функции...
25 Волшебник
 
модератор
21.09.05
15:54
(20) Взгляни на себя в зеркало.
26 Кудесник
 
21.09.05
16:06
2(20)->(25) Я бы обиделся
27 skunk
 
21.09.05
16:16
(25)и что?

(26)обиженных... ну я уже говорил
28 Рупор абсурда
 
21.09.05
16:47
Интересно, чья рожа не понравилась Волшебнику? Может он просто веткой промахнулся?
29 Волшебник
 
модератор
21.09.05
16:48
(28) Я имел в виду психологическое зеркало, зеркало души.
30 Кудесник
 
21.09.05
16:49
Или форумом?
31 Рупор абсурда
 
21.09.05
16:51
(29) 20-х постов - 3, кому именно было адресовано (25)?
32 Йожик
 
21.09.05
16:53
(31) Тебе, старичок.
33 skunk
 
21.09.05
16:57
(29)и что в моем зеркале души?
34 Кудесник
 
21.09.05
16:58
2(33) Темноту вижу, пятна красные
35 skunk
 
21.09.05
17:02
(34)ты прямо гри... что есть темнота... пятна красные... а то мы в школах не обученные...
36 Волшебник
 
модератор
21.09.05
17:03
(31) Для КонецЦикла.
37 Рупор абсурда
 
21.09.05
17:05
Я всё понял!
38 КонецЦикла
 
21.09.05
17:11
2(36) И что?
2(37) Я ничего не понял!
39 Кудесник
 
21.09.05
17:12
2(35) Нельзя
Простой смертный не должен знать будущее
40 skunk
 
21.09.05
17:13
(39)понятно...
41 shura
 
21.09.05
17:25
Загадили ветку...
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс