Имя: Пароль:
1C
1C 7.7
v7: Сделать поиск, имея в распоряжении только часть слова
0 Double_Medved
 
05.11.13
11:51
Добрый день! Такая штука: в справочнике есть реквизит "серийный номер". Иногда приходится искать в этом справочнике, имея лишь кусок серийного номера. То есть например серийный номер 1234567, а известны только 2 последние цифры, 67. Ну это грубо говоря. Как осуществить такой поиск? и надо чтобы он не находил ничего типа 267, 673, и т.д., а нахожил только то, где в конце 67. Для этого есть типа "маска". знак # заменяет любое количество символов, а * один символ. То есть вводят #67 или *****67. Я так понимаю что стандартный поиск с этим не справится? Получается все перебирать и сравнивать посимвольно?
1 dk
 
05.11.13
11:54
черный запрос справится через
Где (Найти(ТвоеПоле, "67") > 0)

1c+++
через like
2 КонецЦикла
 
05.11.13
11:59
like '%67%'
3 КонецЦикла
 
05.11.13
12:00
А штатно давно есть, см. ТиС поиск в номенклатуре
4 Double_Medved
 
05.11.13
12:17
(3) поиск по номенклатуре это что именно в конфигурации? Форма поиска в справочнике номенклатура? Я глянул эту форму, если ввести"67" она найдет все, где есть"67", и в начале, и в середине, и в конце. А мне надо это как-то контролировать.
5 Мимохожий Однако
 
05.11.13
12:19
+(3)F7
6 mikecool
 
05.11.13
12:19
(4) в смысле? что тебе надо контролировать? если надо контролировать - пусть пользователь вводит маску поиска
7 Simod
 
05.11.13
12:20
(4) Помимо Найти() еще есть Лев() и Прав().
8 dk
 
05.11.13
12:22
Где (Найти(ТвоеПоле, "67") = (СтрДлина(СокрП(ТвоеПоле)) - 1))
9 dk
 
05.11.13
12:24
хотя если 2 раза встречается, то (8) не спасет
тогда лучше (7)
10 sda553
 
05.11.13
12:24
(0) Это очень просто - переводишь хранимый в этом поле текст по алгоритму МакКрейта в линейное суффиксное дерево и сохраняешь в таком виде.
11 Double_Medved
 
05.11.13
12:24
(6) да, пользователь должен будет вводить маску поиска. А в стандартном поиске я так понимаю нет маски? Придется это самому писать или не надо изобретать велосипед?
12 Double_Medved
 
05.11.13
12:25
(9) в том то и дело, если типа #67, то до "67" может быть сколько угодно символов
13 dk
 
05.11.13
12:27
ГДЕ ПРАВ(СОКРП(ТвоеПоле), 2) = ""67""
14 Vol71
 
05.11.13
12:30
(0)Есть обработка поиска по вхождению.
15 mikecool
 
05.11.13
12:32
(11) если пользователь введет "%67" и ты это подсунешь параметром в like прямого запроса, то будет работать как ты хочешь
16 mikecool
 
05.11.13
12:32
+15 почитай описание функции like, там все понятно
17 КонецЦикла
 
05.11.13
12:33
(10) :)
18 КонецЦикла
 
05.11.13
12:34
(11) ты бы лучше написал что надо а не про какие-то маски
19 Double_Medved
 
05.11.13
12:42
(18) так как раз и хотят поиск по маске. Например номер "1234567", а цифры 2 и 6 не видно. Введут "1*345*7"
20 mikecool
 
05.11.13
12:42
(19) см (16)
21 sda553
 
05.11.13
12:49
(15) Кроме случаев когда в тексте есть одинарная кавычка
22 Simod
 
05.11.13
12:50
(19) В 7.7 нет поиска по маске штатными средствами. Можешь покурить: http://1c.mazzy.ru/articles/grep/1cgrep02.html
23 mikecool
 
05.11.13
12:53
(21) о ужас! тогда надо предусмотреть обработку таких символов!
24 Double_Medved
 
05.11.13
12:59
(22) спасибо, это похоже то что надо, ищет так как мне надо
25 Double_Medved
 
05.11.13
13:02
Вот как приятно когда не троллят типа "да это каждый школьник знает"
26 Simod
 
05.11.13
13:32
(24) Это для понимания проблемы и ее решения. Для частных случаев решения могут быть попроще и быстрее.