8.х как из строки с полным ФИО получить строку с полной фамилией+инициалы

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем wertklop, 12 май 2008.

  1. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    у меня в форме документа есть поле ввода, где печатается полностью ФИО.
    мне необходимо в печатной форме напечатать в ячейке фамилию полностью, а вот имя и отчество инициалами.
    подскажите, как мне это осуществить
  2. LordKim
    Offline

    LordKim Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    СП - Функции работы со строкой.

    Читаем и грокаем)))
  3. TopicStarter Overlay
    wertklop
    Offline

    wertklop Опытный в 1С

    Регистрация:
    12 май 2008
    Сообщения:
    321
    Симпатии:
    0
    Баллы:
    26
    что за сп?
  4. LordKim
    Offline

    LordKim Опытный в 1С

    Регистрация:
    11 мар 2008
    Сообщения:
    118
    Симпатии:
    0
    Баллы:
    26
    Синтакс-Помощник
  5. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Код:
     
    ЭлементыФормы.Надпись.Заголовок = Лев(ЭлементыФормы.ПолеВвода.Значение,Найти(ЭлементыФормы.ПолеВвода.Значение, " ")) + 
    Сред(ЭлементыФормы.ПолеВвода.Значение, Найти(ЭлементыФормы.ПолеВвода.Значение, " ")+1, 1)+ ". "+
    Сред(Сред(ЭлементыФормы.ПолеВвода.Значение,Найти(ЭлементыФормы.ПолеВвода.Значение, " ")), Найти(ЭлементыФормы.ПолеВвода.Значение, " ")+1, 1)+ ".";
    
    Извратился :)
    Работает только в том случае если имя и отчество отделены пробелами.
  6. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Еще вариант (тут ФИО разделены так же пробелами, не больше одного, но можно переделать и под большее и под другие разделители)
    Код:
    // НАИМЕНОВАНИЕ - это текст вашего поля ввода
    СтрокиФИО = СтрЗаменить(НАИМЕНОВАНИЕ, " ", Символы.ПС);
    ФИО = СтрокиФИО[1] + Лев(СтрокиФИО[2], 1) + "." + Лев(СтрокиФИО[3], 1) + ".";
    
    
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В каждой типовой есть такая функция...
    ПолучитьИнициалы или что-то в этом духе называется.
  8. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Вот в УТ 10.3.3.3

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

Поделиться этой страницей