Имя: Пароль:
1C
1С v8
Помогите как правильно писать условие в тексте запроса !
,
0 p1C
 
17.11.11
20:51
Делаю запрос по бланкам вида: QW500, QW678, QW4300 .... Мне надо выбрать бланки например после QW4000.
РегистрНакопления.Бланк>=&НачНомер не катит -  в результате запроса попадает и бланки :QW500,QW578. (ну в принципе и логично). Как мне правильно поставить условие чтобы выбрать бланки у которых номер больше 4000?
1 Нуф-Нуф
 
17.11.11
21:10
через подстроку выдели числа и приведи к числу
2 Buster007
 
17.11.11
21:11
(1) Можно строку привести в число в запросе? оО что-то никогда не получалось.
(0) можно попробовать ограничить по длине строке и + твоё условие РегистрНакопления.Бланк>=&НачНомер... осталось узнать как длину строки получить в запросе... )
3 Vakhrin
 
17.11.11
21:22
фиг его знает... может и сработает ))

ВЫБОР
КОГДА ПОДСТРОКА(РегистрНакопления.Бланк, 1, 6) = ПОДСТРОКА(РегистрНакопления.Бланк + "яяяяяяяяяяяя", 1, 6)
       И РегистрНакопления.Бланк >= &НачНомер
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
4 Vakhrin
 
17.11.11
21:23
к (3) это в ГДЕ вставить )
5 p1C
 
17.11.11
21:48
ПОДСТРОКА(РегистрНакопления.Бланк, 3, 6) это тоже формат текста, так он и сравнение делает под текста. А выразить(ПОДСТРОКА(РегистрНакопления.Бланк, 3, 6) как Число(10)) не хочет !
6 Vakhrin
 
17.11.11
21:50
ты попробовал?
7 Total Commander
 
17.11.11
21:51
(5) И не захочет, ВЫРАЗИТЬ только для составных полей
8 Total Commander
 
17.11.11
21:51
(6) Ты документацию читал?
9 shuhard
 
17.11.11
21:54
(0) вырежи из бланка одну цифру и проверь Like
на 4 5 6 7 8 9
10 Vakhrin
 
17.11.11
22:35
(8) читал... давно когда-то
(0) как я и сказал в (3) - работает

ВЫБРАТЬ
   Подзапрос.Бланк
ПОМЕСТИТЬ ВремТаб
ИЗ
   (ВЫБРАТЬ
       "QW500" КАК Бланк
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "QW678"
   
   ОБЪЕДИНИТЬ ВСЕ
   
   ВЫБРАТЬ
       "QW4300") КАК Подзапрос
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
   ВремТаб.Бланк
ИЗ
   ВремТаб КАК ВремТаб
ГДЕ
   ВЫБОР
           КОГДА ПОДСТРОКА(ВремТаб.Бланк, 1, 6) = ПОДСТРОКА(ВремТаб.Бланк + "яяяяяяяяяяяя", 1, 6)
                   И ВремТаб.Бланк >= "QW4000"
               ТОГДА ИСТИНА
           ИНАЧЕ ЛОЖЬ
       КОНЕЦ
11 andrewks
 
17.11.11
22:40
подобно
12 Vakhrin
 
17.11.11
22:41
(11) что и чему подобно?
13 andrewks
 
17.11.11
22:46
QW[4-9][0-9][0-9][0-9]  (если нумерация не превышает 9999)

а вообще, разрядность номеров бланков обычно фиксируют.
это избавляют сразу от большой кучи потенциальных проблем
14 Vakhrin
 
17.11.11
22:53
(13) а как это в запросе будет выглядеть? а если нумерация таки превышает такую разрядность?
15 rs_trade
 
17.11.11
22:54
(13) че то я тоже не понял как это с сабжем связано. пример в студию.
16 andrewks
 
17.11.11
23:00
where
(РегистрНакопления.Бланк like "QW[4-9][0-9][0-9][0-9]")
17 Vakhrin
 
17.11.11
23:05
(16) прикольно... работает(!) )) не думал, что в 1С такое будет работать... а все же с разрядностью что делать?
18 rs_trade
 
17.11.11
23:10
(16) ну да. в случае из сабжа будет конечно работать. но все равно не очень то универсально. если расшрить задачу вопрешся.
19 Vakhrin
 
17.11.11
23:11
кроме так:

ГДЕ
   ВремТаб.Бланк ПОДОБНО "QW[4-9][0-9][0-9][0-9]%"

другого придумать не могу...
20 andrewks
 
17.11.11
23:12
(18) вот об этом я и говорю в (13)
самое главное - продумать заранее структуру данных, чтобы не иметь геморроя, и не писать тяжеловесные и долгоиграющие запросы
21 andrewks
 
17.11.11
23:32
кстати, на DB2 не пашет. как всегда, не доработали
конструкция [] вообще не пашет, как надо
22 hhhh
 
18.11.11
00:15
как-то так можно

ВЫБОР
КОГДА ПОДСТРОКА(РегистрНакопления.Бланк, 3, 1) >= "4"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 3, 1) <= "9"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 4, 1) >= "0"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 4, 1) <= "9"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 5, 1) >= "0"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 5, 1) <= "9"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 6, 1) >= "0"
   И ПОДСТРОКА(РегистрНакопления.Бланк, 6, 1) <= "9"
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ
Программист всегда исправляет последнюю ошибку.