Имя: Пароль:
1C
1С v8
Не работает запрос: поиск части числового значения (поиск числа по подстроке)
0 бегинер
 
26.07.17
14:38
Запрос.Текст="выбрать вагоны.код, выразить(вагоны.код как строка (8)) как число_строкой из справочник.дислокациявагонысписок как вагоны где число_строкой подобно"+""""+"%"+ элементыформы.ИскомаяЧастьНомераВагона.Значение + "%"+"""";

код - тип число
хочу искать все числа-номера к которых есть определенные-искомые наборы цифр
например найти все номера в которых есть 234.

ругается:
Поле не найдено "число_строкой"

подскажите как правильно организовать запрос-поиск подстроки в числовом поле, где ошибка в запросе?
1 Ёпрст
 
гуру
26.07.17
14:40
(26)
пиши так:
"выбрать вагоны.код из справочник.дислокациявагонысписок как вагоны где  вагоны.код подобно"+""""+"%"+ элементыформы.ИскомаяЧастьНомераВагона.Значение + "%"+"""";
2 Ёпрст
 
гуру
26.07.17
14:42
и лучше, так:
"выбрать вагоны.код из справочник.дислокациявагонысписок как вагоны где  вагоны.код подобно ""%"+СокрЛП( элементыформы.ИскомаяЧастьНомераВагона.Значение) + "%""";
3 бегинер
 
26.07.17
14:44
(2)
ругается
Неверные параметры "ПОДОБНО"
выбрать вагоны.код из справочник.дислокациявагонысписок как вагоны где  <<?>>вагоны.код подобно "%330%"

повторюсь: вагоны.код - числовое поле
4 Рабочая имитация
 
26.07.17
14:47
>поиск числа по подстроке

Не взлетит. ВЫРАЗИТЬ в языке запросов предназначено только для уточнения существующего типа, например выделения из составного типа или уточнения длины/разрядности числа или строки.
5 бегинер
 
26.07.17
14:52
подскажите как взлететь :)
6 Ёпрст
 
гуру
26.07.17
14:56
(3) ну переделай код в строку, делов-то
В запросе из числа строку не слепишь без извратов, тут каста и конверта нема
7 Вафель
 
26.07.17
15:01
выполнить запрос, преобразовать в строку, выполнить новый запрос по тз
8 dezss
 
26.07.17
15:01
держи изврат)))
http://catalog.mista.ru/public/461171/
9 Ненавижу 1С
 
гуру
26.07.17
15:20
нефиг коды в справочниках делать числовыми
10 Ёпрст
 
гуру
26.07.17
15:21
(9) толи дело клюшки, там code - всегда строка была в самих табличках.
11 бегинер
 
26.07.17
15:28
(9) да уж ошибся получается давно, поленился проверять на числовое значение, задал жестко тип коду "число"
а так тоже не пройдет?

ВЫБРАТЬ
    врм_табл.Код КАК код,
    ПРЕДСТАВЛЕНИЕ(врм_табл.Код) КАК число_строкой
ПОМЕСТИТЬ врм_табл
ИЗ
    Справочник.ДислокацияВагоныСписок КАК врм_табл
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    врм_табл.Код
ИЗ
    врм_табл
ГДЕ
    врм_табл.число_строкой     ПОДОБНО &z
12 бегинер
 
26.07.17
15:29
Неверные параметры "ПОДОБНО" опять ругается
13 Ёпрст
 
гуру
26.07.17
15:29
(11) нет.
Представление - эта хрен после запроса получает
14 PR
 
26.07.17
15:29
(0) Ни. Как.
15 Timon1405
 
26.07.17
15:34
0) успокоиться и понять что (14)
1) добавить свойство/реквизит.
2) заполнять его при записи
3) искать по нему
4) прекратить %мозг% себе и окружающим
16 бегинер
 
26.07.17
15:37
буду курить как связать (8) с моим запросом
сразу не вьехал еще как юзать:
т.е. есть вот это:
"выбрать вагоны.код из справочник.дислокациявагонысписок как вагоны где  вагоны.код подобно ""%"+СокрЛП( элементыформы.ИскомаяЧастьНомераВагона.Значение) + "%""";
меняем на:

"выбрать вагоны.код из справочник.дислокациявагонысписок как вагоны где"  +ТекстЗапросаИзЧислаВСтроку(вагоны.код, 8, 0)+ "  подобно ""%"+СокрЛП( элементыформы.ИскомаяЧастьНомераВагона.Значение) + "%""";

верно?
17 бегинер
 
26.07.17
15:38
справочник не тяжелый, не больше 100 элементов, поэтому можно и по извращаться :)

на край тупо перебором в цикле и в коде уже по подстроке сам поиущу...
18 Ёпрст
 
гуру
26.07.17
15:40
(16) быстрее будет, открыть пофигуратор, поменять тип кода на строку и сохранить
19 бегинер
 
26.07.17
15:42
(18) ну там в других местах уже много на числовом типе завязано...
всем спасибо!
20 FIXXXL
 
26.07.17
15:43
(17) выгрузи в ТЗ, добавь колонку "СтрКод", заполни в цикле
ТЗ обратно в запрос и ищи
а можно и в прямо в цикле по СтрНайти()
21 бегинер
 
26.07.17
15:45
(20) уже так и делаю, хотелось красивости :)
а тут грабельки....
22 FIXXXL
 
26.07.17
15:47
(21) красивости в (15)  :)
а это кастылики
23 dezss
 
26.07.17
16:59
(16) а фигли там непонятного...
первый запрос меняешь на выборку твоих кодов
во втором тебе нужно только это
ВЫБРАТЬ
    ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 10000 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 100000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
    ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 1000 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 10000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
    ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 100 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 1000 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
    ПОДСТРОКА("0123456789", 1 + (ВЫРАЗИТЬ(ТЗ.Поле / 10 - 0.5 КАК ЧИСЛО(14, 0))) - (ВЫРАЗИТЬ(ТЗ.Поле / 100 - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1) +
    ПОДСТРОКА("0123456789", 1 + ТЗ.Поле - (ВЫРАЗИТЬ(ТЗ.Поле / 10  - 0.5 КАК ЧИСЛО(14, 0))) * 10, 1)+
    КАК СтрокаПоле
ИЗ
    ТЗ КАК ТЗ

Добавляешь выражений (ПОДСТРОКА) до нужного числа разрядов, профит.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший