8.х Получение Фамилии и инициалов

Тема в разделе "Другие решения", создана пользователем Riko669, 6 ноя 2016.

  1. TopicStarter Overlay
    Riko669
    Offline

    Riko669

    Регистрация:
    25 окт 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    День добрый!

    У меня такая проблема. В общем есть справочник "Сотрудники", в нем реквизиты (Фамилия, Имя, Отчество, НаименованиеДляРасшифровки). Для первых трех реквизитов прописана процедура "ПриИзменении".

    Пример:
    &НаКлиенте
    Процедура ОтчествоПриИзменении(Элемент)
    Если СокрЛП(Объект.НаименованиеДляРасшифровки)="" Тогда
    ПолучитьФамилиюИнициалыИО();
    КонецЕсли;
    КонецПроцедуры


    Для последнего реквизита прописана Функция.

    Пример:
    &НаКлиенте
    Функция ПолучитьФамилиюИнициалыИО()
    ИнициалИмени = Лев(Объект.Имя,1);
    Инициалотчества = лев(Объект.Отчество,1);
    НаименованиеДляРасшифровки = Объект.Фамилия + " " + Инициалимени + "." + ИнициалОтчества + ".";
    Сообщить("НаименованиеДляРасшифровки " + НаименованиеДляРасшифровки);
    Возврат НаименованиеДляРасшифровки;
    КонецФункции


    Мне нужно чтобы при вводе в строки Фамилия, Имя, Отчество, в строке НаименованиеДляРасшифровки получалось Иванов И.И.
    Но фишка в том, что это значение у меня не отображается в строке РасшифровкаДляНаименования.
    Строка: Сообщить("НаименованиеДляРасшифровки " + НаименованиеДляРасшифровки); она взята для проверки выполняется ли эта функция, и да, она выполняется при заполнении выводится сообщение Иванов И.И., но выводится именно сообщение, а не в строке. Что я не так сделала? Помогите, пожалуйста!
  2. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.579
    Симпатии:
    400
    Баллы:
    104
    вот типовая функция из типовой конфигурации (БП3)
    Код:
    // Функция формирует фамилию, имя и отчество одной строкой
    //
    // Параметры
    //  Фамилия  - фамилия физ. лица.
    //  Имя      - имя физ. лица.
    //  Отчество - отчество физ. лица.
    //  ФИОКратко    - Булево - если Истина (по умолчанию), Представление физ.лица включает фамилию и инициалы, если Ложь - фамилию и полностью имя и отчество
    //
    // Возвращаемое значение
    //  Фамилия, имя, отчество одной строкой.
    //
    Функция ПолучитьФамилиюИмяОтчество(Фамилия = " ", Имя = " ", Отчество = " ", ФИОКратко = Истина) Экспорт
    
        Если ФИОКратко Тогда
            Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Лев(Имя,1) + "." +
                    ?(НЕ ПустаяСтрока(Отчество) ,
                    Лев(Отчество,1)+".", ""), ""), "");
        Иначе
            Возврат ?(НЕ ПустаяСтрока(Фамилия), Фамилия + ?(НЕ ПустаяСтрока(Имя)," " + Имя +
                    ?(НЕ ПустаяСтрока(Отчество) , " " + Отчество, ""), ""), "");
        КонецЕсли;
    
    КонецФункции // ПолучитьФамилиюИмяОтчество()
    
    alexburn нравится это.
  3. TopicStarter Overlay
    Riko669
    Offline

    Riko669

    Регистрация:
    25 окт 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Да, я понимаю, но дело в том, что по моему варианту мне проще для понимания, скажем так) поэтому переделыаать код под этот я не вижу смысла, но все равно спасибо за помощь!
  4. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    15.137
    Симпатии:
    553
    Баллы:
    204
    Зачем изобретать велосипед ? В типовых конфах в общих модулях, есть код, отвечающий за формирование ФИО с инициалами.
  5. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    563
    Симпатии:
    98
    Баллы:
    54
    Так ваша функция ничего не делает, кроме как возвращает строку с инициалами.
    Вероятно, что нужно присвоить реквизиту это значение:
    Код:
    Объект.НаименованиеДляРасшифровки = ПолучитьФамилиюИнициалыИО();
  6. TopicStarter Overlay
    Riko669
    Offline

    Riko669

    Регистрация:
    25 окт 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    1с-ник, верно, это у меня уже добавлено. Но пока получилось, что в строке НаименованиеДляРасшифровки выводится Фамилия и две разделительные точки, т.е. "Иванов . ."
    --- Объединение сообщений, 7 ноя 2016 ---
    Для реквизита код сейчас выглядит как-то так.

    &НаКлиенте
    Процедура ФамилияПриИзменении(Элемент)
    Если СокрЛП(Объект.НаименованиеДляРасшифровки)="" Тогда
    Объект.НаименованиеДляРасшифровки = Объект.Фамилия;
    Объект.НаименованиеДляРасшифровки = ПолучитьФамилиюИнициалыИО();
    КонецЕсли;
    КонецПроцедуры
  7. 1с-ник
    Online

    1с-ник Профессионал в 1С

    Регистрация:
    5 окт 2014
    Сообщения:
    563
    Симпатии:
    98
    Баллы:
    54
    Видимо у вас проблемы не с программированием в 1с, а с основами алгоритмизации. Вряд ли вам тут помогут чем-то.
  8. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.986
    Симпатии:
    801
    Баллы:
    204
    1С о Имени и Отчестве как-то сама должна догадываться?
  9. TopicStarter Overlay
    Riko669
    Offline

    Riko669

    Регистрация:
    25 окт 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Что ж, может действительно стоит пересмотреть основы еще раз
  10. TopicStarter Overlay
    Riko669
    Offline

    Riko669

    Регистрация:
    25 окт 2016
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Ну что могу сказать, спасибо всем кто попытался помочь, то что хотела сделать, сделала, у меня все получилось, хоть и не сразу. В строке наименование полность выводится фамилия и инициалы!

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