Имя: Пароль:
1C
1С v8
ПодразделениеОрганизации в Подразделение организации - функция
0 EarthsSoul
 
26.07.13
12:17
Здравствуйте

Кто нибудь видел функцию самописную или встроенную которая бы текст для 1с преобразовывала в приемлемый тип для человека ?

Например:

"ПодразделениеОрганизации" в "Подразделение организации"
1 Maxus43
 
26.07.13
12:21
что?
2 andreymongol82
 
26.07.13
12:22
(0) Синоним?
3 EarthsSoul
 
26.07.13
12:27
Ну типа того, только у меня на входе строка ...
4 EarthsSoul
 
26.07.13
12:28
Знаю что сейчас скорее всего начнут спрашивать что за задача, скажу что ответ для Конвертации данных пишу ))
5 EarthsSoul
 
26.07.13
12:32
СтрокаТипа = СтрЗаменить(СтрокаТипа,"А"," а");
Можно конечно так, тогда будет 33 строки :). Если другие идеи ?
6 Cube
 
26.07.13
12:34
(5) Ну давай, посмотрим, как ты преобразуешь "СЗВ4"...
7 Галахад
 
гуру
26.07.13
12:34
Врег ?
8 EarthsSoul
 
26.07.13
12:36
(6) с з в4
У тебя есть альтернатива ?
9 EarthsSoul
 
26.07.13
12:36
(7) да зачем мне верхний регистр
10 Cube
 
26.07.13
12:38
(8) Аббревиатуры пишутся "как есть"...
11 Галахад
 
гуру
26.07.13
12:39
(9) Т.е. Нрег.
12 EarthsSoul
 
26.07.13
12:40
только пол дела, как же пробелы ?
13 Либерал
 
26.07.13
12:44
(9) если подумать - вполне пригодится...
примерно так:
перебираешь в цикле каждый символ строки и проверяешь - если Символ = ВРег(Символ) тогда СтрокаРезультат = СтрокаРезультат + " " + НРег(Стмвол)
иначе СтрокаРезультат + " " + НРег(Стмвол)
я ничего не упустил?..
14 Либерал
 
26.07.13
12:46
если
Символ = ВРег(Символ) тогда СтрокаРезультат = СтрокаРезультат + " " + НРег(Символ)
иначе
СтрокаРезультат + НРег(Стмвол)

сори
15 EarthsSoul
 
26.07.13
12:48
Да я уже написал типа         
СтрокаТипа = СтрЗаменить(СтрокаТипа,"А"," а");
для всех букв ...

И вроде они равносильны... Так что буду писать дальше... Всем спасибо :)
16 Поросенок Петр
 
26.07.13
12:51
Писал совсем молодым, так что просьба громко не ржать:

Функция   ПолучитьПредставление(Имя)
    Рез = Лев(Имя,1);
    Для Итер = 2 по СтрДлина(Имя) Цикл
        Символ = Сред(Имя, Итер,1);
        Верхний = (Символ = ВРег(Символ));
        Если Верхний  Тогда
            Рез = Рез + " " + НРег(Символ);
        Иначе
            Рез = Рез + Символ;
        КонецЕсли;
        
    КонецЦикла;
    Возврат Рез;    
КонецФункции

Функция ПолучитьИмя(Представление, НомерАвтоколонки = 1) // В обратную сторону
    
    //1. Удаление спецсимволов
    
    Длина = СтрДлина(Представление);
    
    Рез = "";
    Для Ит = 1 по Длина Цикл
        Символ = Сред(Представление, Ит, 1);
        ВСимвол = ВРег(Символ);
        Если (ВСимвол >= "А" И ВСимвол <= "Я") ИЛИ
             (ВСимвол >= "A" И ВСимвол <= "Z") ИЛИ
             (ВСимвол >= "0" И ВСимвол <= "9") ИЛИ
             (ВСимвол = "_") ИЛИ (ВСимвол = " ") Тогда //Пробелы удалим с преобразованием регистра
            
             Рез = Рез + Символ;
        КонецЕсли;
    КонецЦикла;
    
    Если Рез = "" Тогда
        Рез = "Колонка" + Формат(НомерАвтоколонки, "ЧГ=");
        Возврат Рез;
    КонецЕсли;
    
    Пока Найти(Рез, "  ") > 0 Цикл
        Рез = СтрЗаменить(Рез, "  ", " ");
    КонецЦикла;
    
    //2. Если начинается с цифры - добавляем в начало символ "n"
    
    Если Рез >="0" И Рез<="9" Тогда
        Рез = "_" + Рез;
    КонецЕсли;
    
    Имя = Рез;
    
    //3. Все символы за пробелами делаем ВРег, пробелы удаляем
    
    Рез = Лев(Имя,1);
    СледующийБольшой = Ложь;
    Для Итер = 2 по СтрДлина(Имя) Цикл
        Символ = Сред(Имя, Итер,1);
        Если Символ = " " Тогда
            СледующийБольшой = Истина;
            Продолжить;
        КонецЕсли;
        
        Если СледующийБольшой Тогда
            Рез = Рез + ВРег(Символ);
            СледующийБольшой = Ложь;
        Иначе
            Рез = Рез + Символ;
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Рез;

КонецФункции
17 sirsp
 
26.07.13
13:00
(0) Как вариант:

//-----------------------------------------------------------------------------
//Преобразует имя в синоним. Символы "_" не обрабатываются (удаляются).
//    Имя            - (Строка)
//    Префикс     - (Строка) Начало имени подлежащее удалению перед преобразованием;
//    Постфикс     - (Строка) Конец имени подлежащий удалению перед преобразованием;
//
Функция ИмяВСиноним(Имя, Префикс = неопределено, Постфикс = неопределено)
    
    //TODO разобраться с возможностью передачи значения с точками
    
    лПредлоги = "ива";
    лРез = "";
    лИмя = СокрЛП(СтрЗаменить(Имя, "_", ""));
    Если
        НЕ ПустаяСтрока(Префикс)
        И найти(НРег(лИмя), НРег(Префикс)) = 1
    Тогда
        лИмя = Сред(лИмя, СтрДлина(Префикс) + 1);
    КонецЕсли;
    
    Если
        НЕ ПустаяСтрока(Постфикс)
        И Прав(НРег(лИмя), СтрДлина(Постфикс)) = НРег(Постфикс)
    Тогда
        лИмя = Лев(лИмя, СтрДлина(лИмя) - СтрДлина(Постфикс));
    КонецЕсли;
    
    лНовоеСлово = ИСТИНА;
    Для лПоз = 1 По СтрДлина(лИмя) Цикл
        
        лСимвол = Символ(КодСимвола(лИмя, лПоз));
        лСимвол1 = Символ(КодСимвола(лИмя, лПоз + 1));
        лСимвол2 = Символ(КодСимвола(лИмя, лПоз + 2));
        лРез         =     лРез
                        + ?(лНовоеСлово И НЕ лРез = "", " ", "")
                        + ?(лНовоеСлово И НЕ лСимвол1 = ВРег(лСимвол1)И НЕ лРез = "" ИЛИ Найти(лПредлоги, НРег(лСимвол)), НРег(лСимвол), лСимвол);
                        
        лНовоеСлово =     (НЕ лСимвол = ВРег(лСимвол) И лСимвол1 = ВРег(лСимвол1))
                        ИЛИ (лСимвол = ВРег(лСимвол) И лСимвол1 = ВРег(лСимвол1) И НЕ лСимвол2 = ВРег(лСимвол2));
        
    КонецЦикла;
    
    возврат лРез
    
КонецФункции
18 almar
 
26.07.13
13:04
Вроде бы в 8.3 есть какая-то подобная функция. Но я сразу в СП не нашел :(