Имя: Пароль:
1C
1С v8
Разбить составное слитное слово
,
0 abitfrosty
 
21.02.12
11:55
Может кто-то знает, как из "ЕдиницаИзмерения" получить строку "Единица измерения". Так, как это делает 1с штатными механизмами.
1 Чайник Рассела
 
21.02.12
11:56
метод РазбитьСоставноеСлитноеСлово()
2 DrShad
 
21.02.12
11:57
(1) +100500
3 DrShad
 
21.02.12
11:59
делов то на 10 минут
4 Reset
 
21.02.12
12:00
СтрЗаменить(ТРег("Единица измерения")," ","") --> ЕдиницаИзмерения

Я знаю, тебе нужно с тичностью наоборот,, но решил просто отметиться в теме.
5 abitfrosty
 
21.02.12
12:02
(3) Да знаю, что не долго, мало ли кто-то недавно делал, 10 минут тоже сэкономить неплохо)
6 YFedor
 
21.02.12
12:02
(5) Поздно, ты 7 уже потратил
7 Fish
 
21.02.12
12:03
(5) 7 минут на мисте ты уже потерял. :)))
8 D_Pavel
 
21.02.12
12:03
(7) Ты 7 минут потерял
9 D_Pavel
 
21.02.12
12:03
(8) - (5)
10 Reset
 
21.02.12
12:04
(6),(7) Поскольку осталось 3 минуты, а за 3 он не напишет, остается биться до последнего и ждать результата здесь (чтобы 7 минут не были потрачены зря)
11 Fish
 
21.02.12
12:06
(0) Ладно уж, помогу:
Если Стр = "ЕдиницаИзмерения" Тогда
  Стр = "Единица измерения";
КонецЕсли;
12 НафНаф
 
21.02.12
12:06
время вышло
13 DrShad
 
21.02.12
12:06
в минус работы ушли
14 D_Pavel
 
21.02.12
12:06
(0) Нужно искать все заглавные буквы и заменять их на пробел и маленькую букву.
15 DrShad
 
21.02.12
12:07
(14) не нужно их искать
16 НафНаф
 
21.02.12
12:07
(14) там хитрее (у 1С)
17 D_Pavel
 
21.02.12
12:17
(15) Иначе никак
(16) Там с некоторыми дополнениями и условиями.
18 DrShad
 
21.02.12
12:18
(17) уверен? что иначе никак? за 5000 я тебе покажу как делается иначе и проще
19 abitfrosty
 
21.02.12
12:22
regexp?)
20 D_Pavel
 
21.02.12
12:25
(18) 5000 за такое не дам. Если понадобится, мне за 200 сделают более сложным способом чем даже я написал.
21 hhhh
 
21.02.12
12:27
(19) как 1С делает, подскажу.

У реквизита есть имя "ЕдиницаИзмерения", а есть синоним "Единица измерения". Поэтому вам по уму надо взять синоним из метаданных этого реквизита.
22 DexterMorgan
 
21.02.12
12:28
Представление()
23 DexterMorgan
 
21.02.12
12:28
для метаданных
24 DrShad
 
21.02.12
12:29
(21) ТС привел как пример и не факт что он по метаданным идет
25 DexterMorgan
 
21.02.12
12:30
(21) Ну млин а если синоним отсутствует? мало ли
(18) заинтриговал+)
26 abitfrosty
 
21.02.12
12:31
(21) Оно не имеет метаданных
27 salvator
 
21.02.12
12:35
(26) Строка чёли?
28 abitfrosty
 
21.02.12
12:36
(27) Да
29 hhhh
 
21.02.12
12:36
(28) ну тогда элементарно: иди по тексту и меняй каждый большой символ на пробел+маленький символ. Детская задача, а ты уже почти час паришься.
30 salvator
 
21.02.12
12:37
(28) Циклом пройди по каждому символу в строке, и если символ заглавный, но меняй его на пробел+строчный
31 Starhan
 
21.02.12
12:46
(30) у тя ошибка в алгоритме
32 Starhan
 
21.02.12
12:47
хотя вру )
33 Starhan
 
21.02.12
12:47
но надо проверить на две заглавные пордяд )
34 Starhan
 
21.02.12
12:48
(30) и начинать надо со 2го символа
35 Jaffar
 
21.02.12
12:50
(33) а что тут не так? МетрыИКилограммы должны превратиться в "Метры и килограммы", исключений для 2 подряд заглавных нет.
36 DrShad
 
21.02.12
12:50
(20) ну как тебе решение в (29)? без поиска
37 Reset
 
21.02.12
12:59
(29) Так он и не парится. Сидит с покорном и ждет, когда напишут.
38 DexterMorgan
 
21.02.12
13:16
(36) Что значит без поиска? условие на то, что заглавная и есть поиск при обходе..
39 DexterMorgan
 
21.02.12
13:17
(36) он это и имел ввиду
40 Fish
 
21.02.12
13:20
Всё спорите и спорите, а правильный ответ на (0) был ещё в (11) :))))
41 Reset
 
21.02.12
13:28
(40) Там не по феншую. По феншую должна быть еще
Иначе
ВызыватьИсключение "Такая строка не поддреживается"

тогда решение будет законченным
42 Fish
 
21.02.12
13:32
(41) Согласен, только вместо ВызватьИсключение я бы использовал ЗавершитьРаботуСистемы(Ложь) :)))
43 davidman1984
 
21.02.12
13:36
вход="МетрыИКилограммы";
   стр=Прав(вход,СтрДлина(вход)-1);
   разница=КодСимвола("а")-КодСимвола("А");
   Для с=КодСимвола("А") по КодСимвола("Я") цикл
       стр=СтрЗаменить(стр,Символ(с)," "+Символ(с+разница));
   КонецЦикла;
   стр=СокрЛП(стр);
   выход=Лев(вход,1)+стр;
   Сообщить(выход);
44 davidman1984
 
21.02.12
13:40
вход="МетрыИКилограммы";
   стр=Прав(вход,СтрДлина(вход)-1);
   разница=КодСимвола("а")-КодСимвола("А");
   Для с=КодСимвола("А") по КодСимвола("Я") цикл
       стр=СтрЗаменить(стр,Символ(с)," "+Символ(с+разница));
   КонецЦикла;
//    стр=СокрЛП(стр);
   выход=Лев(вход,1)+стр;
   Сообщить(выход);

оно лишнее :)
45 Reset
 
21.02.12
13:45
(44) Можно написать Гораздо лучше по методу из (29), код будет в 3 раза короче, при этом поддерживать также латиницу и знаки препинания. Слабо?
46 Reset
 
21.02.12
13:46
+(45) плюс грубо в 5-10 раз быстрее
47 D_Pavel
 
21.02.12
13:48
(36) То же самое что я предложил. Это и было решение за 5000?
48 DexterMorgan
 
21.02.12
13:50
Для i=1 По СтрДлина(ТвояСтрока) Цикл
   ПроверяемыйСимвол = Сред(ТвояСтрока, i, 1);
   Если ПроверяемыйСимвол = ВРег(ПроверяемыйСимвол) Тогда
       СтрЗаменить(ПроверяемыйСимвол, " " + НРег(ПроверяемыйСимвол);    
   КонецЕсли;
КонецЦикла;

P.S. Не проверял =))
49 D_Pavel
 
21.02.12
13:51
(48) +1, так по моему и надо
50 DexterMorgan
 
21.02.12
13:51
о надо в цикле еще i=i+1, тк на два символа меняем
51 D_Pavel
 
21.02.12
13:52
Только потом СокрЛ () сделать
52 Reset
 
21.02.12
13:52
(49) После драки? кулаками? Дада, ты точно то же и имел в виду.

ТС кстати грац - дождался (ну почти)
Сейчас еще ошибки исправят, подрихтуют)
53 davidman1984
 
21.02.12
13:55
вход="ВМетрыИКилограммы";
   стр=Лев(вход,1);
   разница=КодСимвола("а")-КодСимвола("А");
   Для н=2 по СтрДлина(вход) цикл
       тек=КодСимвола(вход,н);
       Если (тек>=КодСимвола("А"))И(тек<=КодСимвола("Я")) Тогда
           стр=стр+" "+Символ(тек+разница);
       иначе
           стр=стр+Символ(тек);
       КонецЕсли;
   КонецЦикла;
   Сообщить(стр);
54 D_Pavel
 
21.02.12
14:00
(52) В каком смысле дада? На самом деле, я именно это и говорил. Смотри (14)
55 DexterMorgan
 
21.02.12
14:09
i = 2;
Пока Сред(ТвояСтрока, i) <> "" Цикл
ПроверяемыйСимвол = Сред(ТвояСтрока, i, 1);
Если ПроверяемыйСимвол = ВРег(ПроверяемыйСимвол) Тогда
 СтрокаЗамены = " " + НРег(ПроверяемыйСимвол);
 ТвояСтрока = СтрЗаменить(ТвояСтрока, ПроверяемыйСимвол, СтрокаЗамены);    
КонецЕсли;
i = i + 1;
КонецЦикла;
56 kinsm
 
21.02.12
14:17
(55) Неверно. КоличествоКолбасы => количество колбасы
57 Reset
 
21.02.12
14:19
(54) В том, что когда кто-то решит, сказать, "я хотел так же, я тоже умный, даже раньше".
В (14) - некая формализация условия из (0), а не предложение. Причем неточно сформулированное. Ничего "искать" не нужно. Впрочем, я думаю, мы с тобой на разных языках говорим.
58 DexterMorgan
 
21.02.12
14:23
(56) i=2 МБ???!!
59 kinsm
 
21.02.12
14:24
+(55) хотя вообще не отработает по причине (50)
60 DexterMorgan
 
21.02.12
14:24
(56) Че ты врешь тестер=)))
61 DexterMorgan
 
21.02.12
14:24
(59) Не вводи людей в заблуждение.
62 DexterMorgan
 
21.02.12
14:25
(59) Я проверил=)
63 DrShad
 
21.02.12
14:25
(47) поиск и перебор разные вещи если что
64 kinsm
 
21.02.12
14:26
(60) Если в строке будут 2 одинаковые заглавные буквы и одна из них первая, то код заменит обе, что не по условию в (0). А вообще твой код в (55) не может работать
65 kinsm
 
21.02.12
14:28
(58) ТвояСтрока = СтрЗаменить(ТвояСтрока, ПроверяемыйСимвол, СтрокаЗамены);  заменяет все вхождения подстроки, независимо от твоего i2
66 DexterMorgan
 
21.02.12
14:31
(65) Ладно, не проверял, ибо нах=)))
67 kinsm
 
21.02.12
14:31
(66) ну и вдогонку: i = i + 1 надо внутрь условия добавить, чтоб вообще заработало
68 Киборг
 
21.02.12
14:35
Можно и без программирования решить задачку... Добавить кнопку командной панели "ВМетрыИКилограммы", не указывая текст. Тогда в ее свойстве "Текст" будет значение "В метры и килограммы". :)
69 DexterMorgan
 
21.02.12
14:35
(67) Да тут кароче надо просто новую строку формировать, а не в старой пытаться заменить ибо (65)
70 Reset
 
21.02.12
14:37
Исходная="ВесИОбъемToBeOrNotToBe";
Конечная=Лев(Исходная,1);
Для Индекс=2 по СтрДлина(Исходная) цикл
   Символ=Сред(Исходная,Индекс,1);
   Конечная=Конечная+?(ВРег(Символ)=Символ," "+НРег(Символ),Символ);
КонецЦикла;
71 Reset
 
21.02.12
14:38
(чтоб за сотку не перевалило)
72 kinsm
 
21.02.12
14:40
(71) гыгы, к 70 посту родили-таки работающее решение
73 Киборг
 
21.02.12
14:46
(70) "ВПроизводныеИзСИ" -> "В производные из СИ" получится?
74 D_Pavel
 
22.02.12
06:31
(57) Я не говорю что я "хотел" так же, я говорю что я предложил так же.
Как это ничего не нужно искать? А как ты определишь в какой позиции нужно заменять букву, телепатией чтоли? Я согласен с тобой в том что ты меня не понял.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.