Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 мая 2024, 09:13

Разбить ФИО на отдельные строки

Автор Space_minus, 12 авг 2016, 04:26

0 Пользователей и 1 гость просматривают эту тему.

Space_minus

Здравствуйте все :) Подскажите как правильно сделать:
Есть у меня фугкции:

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

Через них пытаюсь Разбить ФИО на отдельные строки:
Функция  ПечатьЭкзаменационныйЛистТеорЭкзВГИБДД (МассивОбъектов,ОбъектыПечати)
ТабДок = Новый ТабличныйДокумент;
ТабДок.АвтоМасштаб = Истина;
ТабДок.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Студенты.ФизЛицо.Наименование КАК Обучающийся,
| Студенты.ФизЛицо.ДатаРождения КАК ДатаРождения,
| Студенты.Специальность.Категория.Наименование КАК Категория,
| Студенты.Ссылка
|ИЗ
| Справочник.Студенты КАК Студенты
|ГДЕ
| Студенты.Ссылка В(&Ссылка)";


  Запрос.УстановитьПараметр("Ссылка",МассивОбъектов);
  РезультатЗапроса = Запрос.Выполнить().Выбрать();
 
  НомерСтрокиНачало = ТабДок.ВысотаТаблицы + 1;
   
  Макет = ПолучитьМакет("ЭкзаменационныйЛистТеорЭкзВГИБДД");
 
  ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
  РезультатЗапроса.Следующий();
  ОбластьМакета.Параметры.Заполнить(РезультатЗапроса);
 
   ОбластьМакета.Параметры.Фамилия = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся); // Фамилия- параметр на ПФ,
   ОбластьМакета.Параметры.Имя = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся);//
   ОбластьМакета.Параметры.Отчество = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся);//

 
  РезультатЗапроса.Сбросить();
  ТабДок.Вывести(ОбластьМакета);

 
 
  ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
  РезультатЗапроса.Следующий();
  ОбластьМакета.Параметры.Заполнить(РезультатЗапроса);
  ОбластьМакета.Параметры.Обучающийся = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся);
  РезультатЗапроса.Сбросить();
 
  ТабДок.Вывести(ОбластьМакета);
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДок,НомерСтрокиНачало, ОбъектыПечати, РезультатЗапроса.Ссылка);
  Возврат ТабДок;
  КонецФункции //Заявка



выводится в поля "Фамилия" "Имя" и "Отчество" фамилия с инсциаломи Иванов И.И.

Подскажите как правильно сделать 

cska-fanat-kz

надо не
Цитата: Space_minus от 12 авг 2016, 04:26Возврат Фамилия + " " + Лев(Имя,1) + ". " + Лев(Отчество,1)+".";

а вернуть например структуру из трех строк
и в соответствующие параметры раскладывать...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Space_minus

Можно по подробнее, мысль понятна, как сделать не пойму

cska-fanat-kz

вы же в функции получаете отдельно фамилию, имя, отчество
теперь надо создать структуру, заполнить и вернуть
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Space_minus

Цитата: cska-fanat-kz от 12 авг 2016, 07:31
вы же в функции получаете отдельно фамилию, имя, отчество
теперь надо создать структуру, заполнить и вернуть

   ОбластьМакета.Параметры.Фамилия = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся); // Фамилия- параметр на ПФ, Обучающийся - из запроса
       ОбластьМакета.Параметры.Имя = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся);//
        ОбластьМакета.Параметры.Отчество = ПолучитьФамилиюИО(РезультатЗапроса.Обучающийся);//


я попробовал вернуть, смаху не получилось!

cska-fanat-kz

кто вам сказал что если вы функцию с одинаковыми параметрами вызовите подряд 3 раза она вернет каждый раз разный результат????
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Space_minus

А если подставить Фамилия, вместо Обучающийся, то ошибка "Поле объекта не обнаружено (Фамилия)"

cska-fanat-kz

соль не во входном параметре, а в том результате, который функция возвращает.
возвращать надо не строку, а структуру.
это тип данных такой.
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Kironten

В свое время, кстати, Rasty выкладывал достаточной эффектный способ решения:
Цитата: Rasty от 28 дек 2015, 15:36
СтрЗаменить(Строка," ",Символы.ПС);
СтрПолучитьСтроку(Строка,<номерстроки>)

cska-fanat-kz

Kironten, да тут пока до оптимизации - чесать и чесать...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск