Имя: Пароль:
1C
 
Инициалы из ФИО
0 Seriy
 
16.06.10
12:12
Можно ли, используя компоненту NameDecl.DLL, из строки типа Иванов Иван Иванович получить строку Иванов И.И.?
1 XLife
 
16.06.10
12:13
можно и не используя
2 zak555
 
16.06.10
12:14
//******************************************************************************
//    глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
//
// Параметры:
//  Объект     - элемент справочника Сотрудники или ФизЛицо
//               или строка
//  Фамилия     - в этот параметр будет записана фамилия сотрудника
//  Имя         - в этот параметр будет записано имя сотрудника
//  Отчество - в этот параметр будет записано отчество сотрудника
//
// Возвращаемое значение:
//  Фамилия и инициалы сотрудника
//
// Описание:
//  Разбирает "наименование" сотрудника по Фамилия, Имя, Отчество
//  и возвращает фамилию и инициалы сотрудника
//
Функция глФамилияИмяОтчество(Объект, Фамилия="", Имя="", Отчество="") Экспорт
   
   ТипОбъекта = ТипЗначения(Объект);
   
   Если ТипЗначенияСтр(Объект) = "Строка" Тогда
       Список = глРазложить(СтрЗаменить(Объект, ".",". "), " ");
       
   ИначеЕсли (ТипЗначенияСтр(Объект) = "Справочник") ИЛИ
             (ТипЗначенияСтр(Объект) = "ГрупповойКонтекст") Тогда
                 
       Если      Объект.Вид()="ФизЛица" Тогда
           Список = глРазложить(СтрЗаменить(Объект.ПолнНаименование, ".", ". ")," ");
       ИначеЕсли Объект.Вид()="Сотрудники" Тогда
           Список = глРазложить(СтрЗаменить(Объект.ФизЛицо.ПолнНаименование, ".", ". ")," ");
       КонецЕсли;
   КонецЕсли;

   Фамилия  = ?(0 < Список.РазмерСписка(), Список.ПолучитьЗначение(1), "");
   Имя         = ?(1 < Список.РазмерСписка(), Список.ПолучитьЗначение(2), "");

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

       Если ПустоеЗНачение(Отчество) = 0 Тогда
           Отчество = Лев(Отчество,СтрДлина(Отчество)-1);
       КонецЕсли;
   КонецЕсли;

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

КонецФункции // глФамилияИмяОтчество()
3 Seriy
 
16.06.10
12:14
(1) Вопрос: Можно ли, ИСПОЛЬЗУЯ компоненту NameDecl.DLL, из строки типа Иванов Иван Иванович получить строку Иванов И.И.?
4 zak555
 
16.06.10
12:29
(3) так она неправильно склоняет
5 also
 
16.06.10
12:32
Можно ли используя пылесос доказать теорему Пифагора?
6 zak555
 
16.06.10
12:33
(5) да
7 also
 
16.06.10
12:35
А по сабжу:

  Сообщить(ОбщегоНазначения.ФамилияИнициалыФизЛица("Иванов Иван Иванович"));
8 zak555
 
16.06.10
12:45
(7) я там только вот, что нашёл :

// Функция формирует фамилию, имя и отчество одной строкой
//
// Параметры
//  Фамилия  - фамилия физ. лица.
//  Имя      - имя физ. лица.
//  Отчество - отчество физ. лица.
//  ФИОКратко    - Булево - если Истина (по умолчанию), Представление физ.лица включает фамилию и инициалы, если Ложь - фамилию и полностью имя и отчество
//
// Возвращаемое значение
//  Фамилия, имя, отчество одной строкой.
//
Функция ПолучитьФамилиюИмяОтчество(Фамилия = " ", Имя = " ", Отчество = " ", ФИОКратко = Истина) Экспорт
   
   Если ФИОКратко Тогда
       Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." +
               ?(НЕ ПустаяСтрока(Отчество) ,
               Лев(Отчество,1)+".", ""), ""), "");
   Иначе
       Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Имя +
               ?(НЕ ПустаяСтрока(Отчество) , " " + Отчество, ""), ""), "");
   КонецЕсли;

КонецФункции // ПолучитьФамилиюИмяОтчество()
9 Быдло замкадное
 
17.06.10
00:22
омг..а я седня извращался )))
Запрос = новый запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    ФИОФизЛицСрезПоследних.Фамилия,
   |    ФИОФизЛицСрезПоследних.Имя,
   |    ФИОФизЛицСрезПоследних.Отчество
   |ИЗ
   |    РегистрСведений.ФИОФизЛиц.СрезПоследних(&ТекущДата, ФизЛицо = &ФизЛицо) КАК ФИОФизЛицСрезПоследних";
   запрос.УстановитьПараметр("Физлицо", физлицо);
   запрос.УстановитьПараметр("ТекущДата", ТекущаяДата());
   Результат = запрос.Выполнить().Выгрузить();
   Если результат.Количество() =1 тогда
       Строкарезультата = результат[0];
       КомОбъект.Variables.Item("ФИОсокр").Value=лев(Строкарезультата.Имя,1) +"."+лев(Строкарезультата.Отчество,1)+". "+ Строкарезультата.Фамилия;
   КонецЕсли;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший