|
Преобразование строки в число в запросе | ☑ | ||
---|---|---|---|---|
0
CaIIIka
25.05.16
✎
11:07
|
Здравствуйте! Не появилась ли данная возможность в свежих версиях 1С? Работаю на 8.2. Перейти на 8.3 возможности нет пока, острой необходимости тоже. Спрашиваю, чтоб велосипед не изобретать. В инете готовых решений, чтоб прям запросом из строки в число, не видел пока что.
|
|||
1
Cyberhawk
25.05.16
✎
11:07
|
выбор когда "1" тогда 1
когда "2" тогда 2 ... конец |
|||
2
Александр Б
25.05.16
✎
11:08
|
ВЫРАЗИТЬ (Таблица.Строка КАК Число(15,2))
|
|||
3
ДенисЧ
25.05.16
✎
11:08
|
В явном виде нельзя.
Если только извращаться как в (1) |
|||
4
ДенисЧ
25.05.16
✎
11:08
|
(2) Размечтался...
|
|||
5
Александр Б
25.05.16
✎
11:08
|
Такая возможность была давно, если не всегда.
|
|||
6
Господин ПЖ
25.05.16
✎
11:08
|
(2) ага ага
|
|||
7
Господин ПЖ
25.05.16
✎
11:09
|
(5) ловите наркомана
|
|||
8
Александр Б
25.05.16
✎
11:10
|
(4)(6) :)
(0) не слушай их. Всю жизнь использовал как в (2). Прекрасно работает. |
|||
9
rs_trade
25.05.16
✎
11:10
|
(2) сам то пробовал так делать?
|
|||
10
Александр Б
25.05.16
✎
11:10
|
(9) десятки раз.
|
|||
11
CaIIIka
25.05.16
✎
11:11
|
(1) )) А если справочник с 70 тыс строками и реквизит из строки в число?
(2) Так низя. Не работает. |
|||
12
Александр Б
25.05.16
✎
11:11
|
Пля. Или я туплю, сейчас проверю...
|
|||
13
rs_trade
25.05.16
✎
11:11
|
(12) ты тупишь. можешь не проверять.
|
|||
14
CaIIIka
25.05.16
✎
11:11
|
(10) Ругнется она на разные типы данных
|
|||
15
Fragster
гуру
25.05.16
✎
11:12
|
не, ну если тип реквизита "строка" - число - то (2) работает.
а вообще надо сделать так, чтобы в исходных данных было число |
|||
16
DrZombi
гуру
25.05.16
✎
11:12
|
(8) Не работает оно как надо. Может у Скуля робит, но не у 1С :)
|
|||
17
CaIIIka
25.05.16
✎
11:14
|
Готовых решений не было не у кого? Я вчера задался идеей победить. Несколько раз в ступор восмёрошными ограничениями (по сравнению со скулем) вставал.
|
|||
18
PR
25.05.16
✎
11:14
|
(0) Нет
|
|||
19
GROOVY
25.05.16
✎
11:14
|
(12) Не тупишь, в результате запроса будет то что в выразить, но в самом запросе будет строка. Преобразование, по сути, происходит после выполнения всего запроса.
|
|||
20
Fragster
гуру
25.05.16
✎
11:15
|
(17) сделай так, чтобы в исходных данных было число
|
|||
21
CaIIIka
25.05.16
✎
11:15
|
(19) Ругается парсер на енто
|
|||
22
Timon1405
25.05.16
✎
11:16
|
(0) http://catalog.mista.ru/public/170336/ рвет шаблоны и взрывает мозг, как и все статьи автора
|
|||
23
Александр Б
25.05.16
✎
11:17
|
(19) и всё-таки я тупанул :)
Пишет "Несовместимые типы" |
|||
24
ДенисЧ
25.05.16
✎
11:17
|
выбрать ВЫРАЗИТЬ (&парам как число(10, 0))
где парам задан как строка "15" Текст запроса: Строка 1: {(1,9)}: Несовместимые типы "ВЫРАЗИТЬ" выбрать <<?>>ВЫРАЗИТЬ (&парам как число(10, 0)) |
|||
25
Fragster
гуру
25.05.16
✎
11:17
|
(22) страшно далек он от реальности
|
|||
26
PR
25.05.16
✎
11:18
|
Господа, вы меня пугаете.
(19) ВЫРАЗИТЬ не работает в конце запроса, в конце работает ПРЕДСТАВЛЕНИЕ. (14) Думаю, что не ругнется, просто в значении типа строка значения типа число не будет обнаружено, а поэтому вернется какая-нить пустая кака, может неопределено. |
|||
27
ДенисЧ
25.05.16
✎
11:18
|
(26) читай (24) до просветления
|
|||
28
PR
25.05.16
✎
11:19
|
(22) Кому рвет? Мне не рвет.
|
|||
29
Fragster
гуру
25.05.16
✎
11:19
|
(26) не будет ругани и будет пусто, если реквизит составного типа, один из которых - число, но в момент запроса там находится значение другого типа. в остальных случаях заругается.
|
|||
30
PR
25.05.16
✎
11:20
|
(27) Ну значит так. Че ты как ребенок :))
В любом случае главное, что никакого преобразования ни в начале запроса ни в конце не будет. |
|||
31
PR
25.05.16
✎
11:20
|
(29) Думаю, что так, да.
|
|||
32
CaIIIka
25.05.16
✎
11:26
|
(20) Можно и так, но победить оч захотелось.
(22) )) Хорошая статья, надо проверить как механизм с пробелами борется. По идее должен. Мимолетом на сколько смог код вкурить: там вроде сравнение на вхождение в 0123456789 проверяется, так что пробелы в сад вроде.. Я про то, когда Код в справочнике строковый, то в конце пробелы до длины строки добавляются. Они и костыли в колеса добавляют. А ни ltrim-rtrim ни right 1c не умеет. |
|||
33
Тролль главный
25.05.16
✎
11:28
|
когда уже народ будет требовать в запросах операторы ISERT/UPDATE/DELETE?
|
|||
34
CaIIIka
25.05.16
✎
11:29
|
(33) видимо за последствия боятся
|
|||
35
aleks_default
25.05.16
✎
11:33
|
(33) а зачем тогда язык 1с нужен будет?
|
|||
36
CaIIIka
25.05.16
✎
11:44
|
(22) Все работает. Статья в точку, спасибо огромнищее за ссылку!
А я, не видя (22), вчера вот такой код наваял. Теперь не актуально, но мож на мысли хорошие натолкнет кого... Запрос.Текст = "ВЫБРАТЬ | ВЫБОР | КОГДА ПОДСТРОКА(Товары.Код, 6, 1) <> "" "" | ТОГДА Товары.Код | КОГДА ПОДСТРОКА(Товары.Код, 5, 1) <> "" "" | ТОГДА "" "" + ПОДСТРОКА(Товары.Код, 1, 5) | КОГДА ПОДСТРОКА(Товары.Код, 4, 1) <> "" "" | ТОГДА "" "" + ПОДСТРОКА(Товары.Код, 1, 4) | КОГДА ПОДСТРОКА(Товары.Код, 3, 1) <> "" "" | ТОГДА "" "" + ПОДСТРОКА(Товары.Код, 1, 3) | КОГДА ПОДСТРОКА(Товары.Код, 2, 1) <> "" "" | ТОГДА "" "" + ПОДСТРОКА(Товары.Код, 1, 2) | КОГДА ПОДСТРОКА(Товары.Код, 1, 1) <> "" "" | ТОГДА "" "" + ПОДСТРОКА(Товары.Код, 1, 1) | ИНАЧЕ """" | КОНЕЦ КАК Код |ПОМЕСТИТЬ Коды |ИЗ | Справочник.Товары КАК Товары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ 0 КАК n, ""0"" КАК nstr |ПОМЕСТИТЬ conv |ОБЪЕДИНИТЬ ВЫБРАТЬ 1, ""1"" ОБЪЕДИНИТЬ ВЫБРАТЬ 2, ""2"" ОБЪЕДИНИТЬ ВЫБРАТЬ 3, ""3"" ОБЪЕДИНИТЬ ВЫБРАТЬ 4, ""4"" ОБЪЕДИНИТЬ ВЫБРАТЬ 5, ""5"" |ОБЪЕДИНИТЬ ВЫБРАТЬ 6, ""6"" ОБЪЕДИНИТЬ ВЫБРАТЬ 7, ""7"" ОБЪЕДИНИТЬ ВЫБРАТЬ 8, ""8"" ОБЪЕДИНИТЬ ВЫБРАТЬ 9, ""9"" |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(f.n, 0) * 1 + ЕСТЬNULL(e.n, 0) * 10 + ЕСТЬNULL(d.n, 0) * 100 + ЕСТЬNULL(c.n, 0) * 1000 + ЕСТЬNULL(b.n, 0) * 10000 + ЕСТЬNULL(a.n, 0) * 100000 КАК КодЧисло |ИЗ | Коды КАК Коды | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК a | ПО (a.nstr = ПОДСТРОКА(Коды.Код, 1, 1)) | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК b | ПО (b.nstr = ПОДСТРОКА(Коды.Код, 2, 1)) | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК c | ПО (c.nstr = ПОДСТРОКА(Коды.Код, 3, 1)) | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК d | ПО (d.nstr = ПОДСТРОКА(Коды.Код, 4, 1)) | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК e | ПО (e.nstr = ПОДСТРОКА(Коды.Код, 5, 1)) | ЛЕВОЕ СОЕДИНЕНИЕ conv КАК f | ПО (f.nstr = ПОДСТРОКА(Коды.Код, 6, 1)) |ГДЕ ЕСТЬNULL(f.n, 0) * 1 + ЕСТЬNULL(e.n, 0) * 10 + ЕСТЬNULL(d.n, 0) * 100 + ЕСТЬNULL(c.n, 0) * 1000 + ЕСТЬNULL(b.n, 0) * 10000 + ЕСТЬNULL(a.n, 0) * 100000 МЕЖДУ 65422 И 69287"; Есть справочник Товары со строковым кодом. Нужно обобрать все коды в числовом интервале (для поиска дырки для нового кода). Длина кода 6 символов. Если вопросы появятся по данной реализации, что где и зачем, спрашивайте. Потому как одна идея порождает другую :) |
|||
37
CaIIIka
25.05.16
✎
11:45
|
+36 обобрать = отобрать ))
|
|||
38
hhhh
25.05.16
✎
12:18
|
(37) вроде поиск дырок в числовом интервале и в таком же строковом одинаково будет. Зачем тебе понадобилось в число преобразовывать?
|
|||
39
rs_trade
25.05.16
✎
13:22
|
(33) Никогда. Этого не надо.
|
|||
40
rs_trade
25.05.16
✎
13:24
|
(36) Загнать в ТЗ с кодами как число и выбрать в запросе.
|
|||
41
CaIIIka
25.05.16
✎
13:26
|
(38) Потому что такой запрос
выбрать первые 20 код из справочник.товары упорядочить по код выдает Код 0 1 10 100004 10023 1010 10100 10101 10102 10103 10104 10105 101051 10106 10107 10108 10109 10110 10111 10112 |
|||
42
hhhh
25.05.16
✎
13:33
|
(41) дык напиши небольшую обработку, добавь к коду спереди нули, чтобы все были шестизначные. Ведь это и для многих других целей будет полезно, не только для поиска дырок.
|
|||
43
CaIIIka
25.05.16
✎
13:35
|
(40)
1. Создать запрос с выборкой всего справочника и одной колонки 2. Выборкой обойти весь результат и в ранее созданную ТЗ при каждой итерации добавлять строки со значением Число(Выборка.Код) 3. Сортировать ТЗ 4. Выбрать строки ТЗ, проверяя на дырки 2-й пункт плохой тут. Ресурсы СУБД на получение результата запроса и передачу его на сторону 1С, обход результата в 1С с преобразованием значения, заполнение объекта на стороне 1С.... Да и подход к решению задачи так себе получается |
|||
44
CaIIIka
25.05.16
✎
13:36
|
(42) Так нельзя у нас
|
|||
45
CaIIIka
25.05.16
✎
13:40
|
(42) Тогда уж новый реквизит КодЧисло числовой и туда при записи гнать число. И обработкой по всем один раз. Но это новый реквизит в базе, дополнительный объем, его обработка при каждой записи. Справочник под 100 тыщ элементов. А у меня только запрос
|
|||
46
Ildarovich
25.05.16
✎
13:55
|
Вот еще одна статья http://catalog.mista.ru/public/439218/ . Называется "Поиск пропусков в нумерации документов запросом". Там приложена обработка, которую можно и на справочник(и) переделать. Расчет был на 11-ти значные номера. С 6-ти значными еще проще.
Пропуски в нумерации показываются в виде интервалов ... - ... . |
|||
47
Cyberhawk
25.05.16
✎
13:59
|
(46) Ildarovich, напиши как-нибудь статью, как ты пришел к этому (с двух глобальных ракурсов: что сподвигло к написанию таких статей и что сподвигло заниматься вычислением этих штук в запросах)
|
|||
48
CaIIIka
25.05.16
✎
14:14
|
(46) Спасибо большое, поизучаю, интересно! Уважуха за труды! :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |