Имя: Пароль:
1C
1С v8
СокрЛП в Запросе
0 neo1109
 
14.12.11
07:38
Собственно сабж.
Можно ли как то "откусить" в строковом реквизите пробелы справа?

Вдогонку задача 2: а потом получить после этого самый правый символ...
1 zak555
 
14.12.11
07:39
зачем строки в запросе ?
2 neo1109
 
14.12.11
07:40
Нууу, например то же наименование - чем не строка?
3 Aleksey
 
14.12.11
07:41
ВЫРАЗИТЬ ?
4 zak555
 
14.12.11
07:41
выводить куда будешь ? в макет ? там и откусывай =)
5 Aleksey
 
14.12.11
07:44
Начиная с 8.2.9
Операция языка запросов ВЫРАЗИТЬ возвращает строку переменной длины (без концевых пробелов) при приведении к типу СТРОКА. В режиме совместимости с версией 8.1 поведение не изменилось.
6 neo1109
 
14.12.11
07:51
Спасибо, Aleksey! )

Идем дальше ;)
А как быть с задачей 2?
7 Паучог
 
14.12.11
07:52
(5) А разве ВЫРАЗИТЬ применимо не только к полям составных типов?
8 mirosh
 
14.12.11
07:53
(7) чой-то?
9 Wobland
 
14.12.11
07:54
(7) истина
(6) обрабатывай уже после. зачем тебе это в запросе?
10 neo1109
 
14.12.11
07:58
(9) см. задачу 2.
нужен самый правый символ далее в запросе
причем не пробел.
11 Wobland
 
14.12.11
08:01
(10) посмотрел. ответь на (9)
12 mirosh
 
14.12.11
08:01
(7) (9)
да вы чего, парни? с помощью ВЫРАЗИТЬ, я, например, могу округлить число до целой части. И это не составной тип :).
13 Wobland
 
14.12.11
08:03
(12) я не против, чего ты на меня "вы чего"? ;)
14 neo1109
 
14.12.11
08:15
(11)
самый правый символ нужен далее в запросе
15 Wobland
 
14.12.11
08:16
(14) не верю ;)
16 neo1109
 
14.12.11
08:16
(15) а если на секунду поверить? ;)
17 dk
 
14.12.11
08:19
меня тож бесит, что таких простых функций по работе с текстом в запросах 8-ки нету
18 Wobland
 
14.12.11
08:19
(16) запроса не вижу, верить не стану. строки - вообще ветреная штука. сегодня один символ справа, завтра другой. имхо проблема в пути решения, которым ты пришёл к правому символу
19 dk
 
14.12.11
08:21
хотя часть задач можно через "подобно" решить
20 neo1109
 
14.12.11
08:33
(18) вопрос то не в этом - оптимально или нет я решил ;)
вопрос всего лишь - возможно или нет получить правый символ?..
21 andrewks
 
14.12.11
08:34
(20) возможно. через изврат
22 Ненавижу 1С
 
гуру
14.12.11
08:36
зачем?
23 Evil-Wisp
 
14.12.11
08:45
ПОДСТРОКА(&Строка, ВЫБОР
       КОГДА &Строка = (ВЫРАЗИТЬ(&Строка КАК СТРОКА(1)))
           ТОГДА 1
       ИНАЧЕ ВЫБОР
                 КОГДА &Строка = (ВЫРАЗИТЬ(&Строка КАК СТРОКА(2)) ТОГДА 2
                 ИНАЧЕ ....
             КОНЕЦ              
   КОНЕЦ, 1)

Предварительно убрать в строке пробел сзади. Ну и выборов 20-30. В зависимости от того, какой длинны максимум у тебя будет строка
24 Evil-Wisp
 
14.12.11
08:48
(23) Скобку потерял, после "КАК СТРОКА(2)".
Ну вот он, собстно изврат:)
25 luckyluke
 
14.12.11
09:01
(23) только вот на кой вот эти все иначе, потом еще вылезет ошибка об ограничении вложенности оператора ВЫБОР.
26 Ненавижу 1С
 
гуру
14.12.11
09:05
(25) на кой этот изврат я не в курсе, но я также не в курсе зачем делать вложенные ВЫБОР, если он нормально раскладывается в один длинный ВЫБОР
27 andrewks
 
14.12.11
09:06
(24) не, настоящий изврат не так, и для произвольной длины строки
28 mirosh
 
14.12.11
09:12
извращенцы 80-го уровня))
29 andrewks
 
14.12.11
09:29
сделал для произвольной строки. страшно показывать :)

кстати, вопрос: почему условие подстрока(стр,n,1)>"" ложно не тольуо для пустых строк, но и пробелов?
как и подстрока(стр,n,1)<>""?
30 neo1109
 
14.12.11
10:43
(20) будем считать что нельзя ;)
31 Anita_Rost
 
14.12.11
11:04
(29) Потому что в "" - 0 символов. Если будет " ", то будет истина
32 Ненавижу 1С
 
гуру
14.12.11
11:09
потому что конечные пробелы срезаются
33 Max1986
 
14.12.11
11:28
(10)нафига в запросе вырезать крайний правый символ.
Была такая задача - можно и запросом - через временную ТЗ, только работает МЕДЛЕННО.
Через ТЗ быстрее намного
34 andrewks
 
14.12.11
14:42
(32) проблема не только в конечных пробелах.

при расщеплении строки на символы с таким условием вылетают ВСЕ пробелы из строки, т.к. условие для пробела не выполняется.

но, если выбрать без условия, то в результате правильно стоит символ пробела, а не пустая строка. где собака порылась?
35 vovus
 
14.12.11
14:45
(34) Делай два запроса, а не один.
Сформировал таблицу, откуда "поткусывать надо", выгрузил в ТЗ, обработал функцией СокрЛП, потом обратился к этой таблице из нового запроса
36 andrewks
 
14.12.11
14:48
(35) это некошерно :)
я делаю одним. да собственно, в применении к сабжу он и работает корректно. просто интересно, почему пробелы выпадают
37 vovus
 
14.12.11
14:51
Мне кажется, некошерно будет потом в таком извратном запросе работать, но наверное дело вкуса
38 andrewks
 
14.12.11
14:53
(37) зри в сабж, мопед не мой :)

я просто сделал решение извращённой проблемы ТС настолько же извращённым методом, и наткнулся на (34). стало интересно выяснить причину
39 andrewks
 
14.12.11
16:52
ап к (34)
40 Ненавижу 1С
 
гуру
14.12.11
17:15
(39) потому что если там пробел, то он как конечный (единственный вообще) обрезается и считается, что " "=""
41 andrewks
 
14.12.11
17:16
(40) а почему тогда в результат запроса идёт не "", а " "

получается, тут в уме держу, а тут нет? какое-то странное поведение, имхо
42 Ненавижу 1С
 
гуру
14.12.11
17:21
(41) странное, сам не согласен, но тем не менее это даже стандарт SQL, которого придерживаются большинство СУБД

просто хотел сделать движок, который бы единообразно работал всюду: на клиенте и в запросах, а тут такой замес ((
43 andrewks
 
14.12.11
17:36
(42) ясно. ну, нет - так нет. просто раньше не сталкивался, а щас столкнулся - удивился
Закон Брукера: Даже маленькая практика стоит большой теории.