Имя: Пароль:
1C
1C 7.7
v7: Как обрезать строку с данными до пробела???
,
0 faring
 
27.12.14
16:42
Приветствую!
Прошу помощи по такому вопросу:

есть внешняя печатная форма.
при ее заполнении, необходимо в одной строке сократить данные вот так:

(Иванов Иван Иванович) сократить до (Иванов)

вот кусочек кода:

Процедура Печать(Докум, Устройство=0, КолвоКопий=1)
    Перем НачПовт, КонПовт;
    
    Сумма = Докум.Сумма;
    Выдать =Докум.Выдать; //Вот эта строка, Вытаскивает ФИО из Документа, нужно только Фамилию!!!!
    
    
    ИсхТабл = СоздатьОбъект("Таблица");
    НачПовт = 0; КонПовт = 0;
   ИсхТабл.ИсходнаяТаблица("Таблица");
                                                                    
        ИсхТабл.ВывестиСекцию("Секция_1");
        ИсхТабл.Показать("Таблица");
КонецПроцедуры // Печать()
1 DimG
 
27.12.14
16:47
Не смешно.
2 Aleksey
 
27.12.14
16:47
Выдать =  Лев(СокрЛП(Докум.Выдать(,Найти(СокрЛП(Докум.Выдать)," ")-1);
3 MAG
 
27.12.14
16:49
В типовой ТИС есть такая функция глФамилияИмяОтчество(Объект,Фамилия,Имя,Отчество)
4 faring
 
27.12.14
17:00
Спасибо, я в 1с вооще дуб.
5 faring
 
27.12.14
17:06
Не канает...
Выдать =  Лев(СокрЛП(Докум.Выдать(,Найти(СокрЛП(Докум.Выдать)," ")-1)<<?>>;
: Ожидается символ ')'
6 faring
 
27.12.14
17:07
добавляешь скобку, просит запятую...
7 b_ru
 
27.12.14
17:11
Выдать =  Лев(СокрЛП(Докум.Выдать),Найти(СокрЛП(Докум.Выдать)," ")-1);
8 faring
 
27.12.14
17:13
Отлично... все зашуршало....
9 faring
 
27.12.14
17:13
Спасибки....
10 shulerr
 
27.12.14
17:43
Можно вот так еще:
Выдать = стрПолучитьСтроку(стрЗаменить(сокрЛП(Докум.Выдать), " ", символы.ПС), 1);
11 aka AMIGO
 
27.12.14
18:04
Обычно в типовых есть функция "ПолучитьФИО()"
Типа такой:
Функция ПолучитьФИО(Сотр)
    
    Сотр = СтрЗаменить(Сотр, "  "," ");
    СЗАвт = СоздатьОбъект("СписокЗначений");
    СЗАвт = глРазложить(Сотр," ");
    Сотр = СЗАвт.ПолучитьЗначение(1);
    Если СЗАвт.РазмерСписка()>1 Тогда
        Сотр = Сотр+" " + Врег(Лев(СЗАвт.ПолучитьЗначение(2),1)) +".";
    КонецЕсли;
    Если СЗАвт.РазмерСписка()>2 Тогда
        Сотр = Сотр+" " + Врег(Лев(СЗАвт.ПолучитьЗначение(3),1)) +".";
    КонецЕсли;
    Возврат Сотр;
КонецФункции

Правда, в сочетании с глРазложить.. но это тоже не та проблема

или-б так решал:
Фам = СокрП(Лев(Докум.Выдать,Найти(Докум.Выдать," ")));
12 aka AMIGO
 
27.12.14
18:06
ЗЫ. кстати, "до пробела" - бывает разное.. ©
Хорошо, что в топике есть разъяснение, какой этот "до пробела" должен быть..
13 Chameleon1980
 
27.12.14
21:00
пока найти
14 Aleksey
 
27.12.14
21:07
(11) А если впереди пробел?
15 timurhv
 
27.12.14
21:15
(0)

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

Имя = ?(ФИОСписком.РазмерСписка()>1,ФИОСписком.ПолучитьЗначение(2));
Отчество = ?(ФИОСписком.РазмерСписка()>2,ФИОСписком.ПолучитьЗначение(3));
17 Chameleon1980
 
27.12.14
21:24
пока гада находим - расстреливаем.
че не так-то?
18 User_Agronom
 
27.12.14
21:38
(0) И кто после этой темы скажет, что 1С-ники программисты?

Тема "Как выбрать первое слово из строки" так серьезно обсуждается.
19 Chameleon1980
 
28.12.14
01:38
б.ля когда народ думать то начнет.
с такими вопросами вообще в школу.
тфу.
20 vcv
 
28.12.14
09:09
Да какие программисты на 1С? Откуда?
Иногда создаётся впечатление, что 1С - рак мозга, который поражает всех причастных. Во ветка на инфостарте http://forum.infostart.ru/forum9/topic48161/message1276199/ , где, начиная с сообщения 19, "админ" занимается поиском ответа на вопрос, как запустить консольную утилиту для каждого pdf в папке, потому что "программист" говорит, что это невозможно.
21 iceman2112
 
28.12.14
11:10
типовые вроде есть
22 aka AMIGO
 
28.12.14
14:05
Вы о чем? Ветка создана в пятницу, потому в ней могут быть самые неожиданные мысли.
Распальцовка нужна только при устройстве на работу, или сдаче экзаменов на спеца в 1С