Имя: Пароль:
1C
1С v8
Не получается сделать полнотекстовый поиск по середине слова.
,
0 Romeooo
 
12.04.13
08:19
Всем привет! Помогите, пожалуйста, разобраться с полнотекстовым поиском. Не хочет искать по середине строки. Например, у клиента номер телефона 06702338934, и мне нужно, что бы он находился, например, по куску строки "233".
п.с.Предыдущую тему случайно отправил)
1 Волшебник
 
12.04.13
08:19
ГДЕ Телефон ПОДОБНО "%233%"
2 Romeooo
 
12.04.13
08:19
Если точнее, то он ищет по "233", но только после того, как выполнить поиск по началу строки, например по "06702"
3 Romeooo
 
12.04.13
08:20
(1)Так это ж не в запросе, а в стандартном полнотекстовом поиске. Или там тоже можно куски запроса использовать?
4 Jonny_Khomich
 
12.04.13
08:22
(3) есть же такая функция в 1с, СРЕД называется
5 Romeooo
 
12.04.13
08:23
(4) Не понял. Можете поподробней?
6 Wobland
 
12.04.13
08:23
(4) бесспорно, с помощью Сред() можно искать подстроку в строке. и это, пожалуй, наиболее красивый и удобный метод
7 Jonny_Khomich
 
12.04.13
08:25
(6) я других просто не увидел)))
8 Romeooo
 
12.04.13
08:25
Код обработки поиска:

Процедура ПоискНужного(ВКакуюСторонуИскать)
   Если ПустаяСтрока(СтрПоиска) Тогда
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Не заполнена строка поиска!";
       Сообщение.Сообщить();
       Возврат;
   КонецЕсли;
   
   _СтрПоиска = СтрПоиска;
   Если ИскатьНаВхождение И Прав(СтрПоиска,1)<>"*" Тогда
       _СтрПоиска = СтрПоиска+"*";
   КонецЕсли;
   
   СписокПолнотекстовогоПоиска = ПолнотекстовыйПоиск.СоздатьСписок(_СтрПоиска,10);
   ОтборОбластиПоиска = Новый Массив;
   ОтборОбластиПоиска.Добавить(Метаданные.Справочники.Номенклатура);
   ОтборОбластиПоиска.Добавить(Метаданные.Справочники.Контрагенты);
   СписокПолнотекстовогоПоиска.ОбластьПоиска = ОтборОбластиПоиска;
   Если ВКакуюСторонуИскать="ПерваяЧасть" Тогда
       СписокПолнотекстовогоПоиска.ПерваяЧасть();
   ИначеЕсли ВКакуюСторонуИскать="ПредыдущаяЧасть" Тогда
       СписокПолнотекстовогоПоиска.ПредыдущаяЧасть(Указатель);
   ИначеЕсли ВКакуюСторонуИскать="СледующаяЧасть" Тогда
       СписокПолнотекстовогоПоиска.СледующаяЧасть(Указатель);
   КонецЕсли;
   КоличествоНайденныхЭлементов = СписокПолнотекстовогоПоиска.ПолноеКоличество();
   Указатель = СписокПолнотекстовогоПоиска.НачальнаяПозиция();
   СписокВсегоЧтоНашлось.Очистить();
   Для Каждого Ф Из СписокПолнотекстовогоПоиска Цикл
       СписокВсегоЧтоНашлось.Добавить(Ф.Значение);
   КонецЦикла;
   ВсеЧтоНашлось = СписокПолнотекстовогоПоиска.ПолучитьОтображение(ВидОтображенияПолнотекстовогоПоиска.HTMLТекст);
   Если (КоличествоНайденныхЭлементов-Указатель)>10 Тогда
       Элементы.Вперед.Доступность = Истина;
   Иначе
       Элементы.Вперед.Доступность = ЛОжь;
   КонецЕсли;
   Если Указатель>0 Тогда
       Элементы.Назад.Доступность = Истина;
   Иначе
       Элементы.Назад.Доступность = Ложь;
   КонецЕсли;
   ТекстВсегоРезультатов = "Показано "+СписокПолнотекстовогоПоиска.Количество()+" из "+КоличествоНайденныхЭлементов;
   ОбновитьТекстАктуальностиПоиска();
КонецПроцедуры
9 НЕА123
 
12.04.13
08:25
*233*
10 Romeooo
 
12.04.13
08:26
(9) так не ищет
11 Jonny_Khomich
 
12.04.13
08:27
Ребятки, вы зачем так делаете то??? ЧИТАЙТЕ СП!!! Не просто так она встроена в конфигуратор 1с!
Сред (Mid)
Синтаксис:

Сред(<Строка>, <НачальныйНомер>, <ЧислоСимволов>)
Параметры:

<Строка> (обязательный)

Тип: Строка.
Исходная строка.
<НачальныйНомер> (обязательный)

Тип: Число.
Начальный номер символа, с которого начинается выборка. Нумерация символов в строке начинается с 1. Если указано значение, меньшее или равное нулю, то параметр принимает значение 1.
<ЧислоСимволов> (необязательный)

Тип: Число.
Количество выбираемых символов. Если параметр не указан, то выбираются символы до конца строки.
Возвращаемое значение:

Тип: Строка.
Строка выбранных символов.
Описание:

Выбирает строку символов, начиная с символа <НачальныйНомер>, общим количеством <ЧислоСимволов>.
12 Romeooo
 
12.04.13
08:27
(6),(4) куда можно приткнуть СРЕД в (8)??
13 Живой Ископаемый
 
12.04.13
08:28
2(11) и как это помогает в решении проблемы (0)?
14 Godofsin
 
12.04.13
08:28
(11) Жгешь, товарищ!
15 Wobland
 
12.04.13
08:29
(12) забудь про сред
16 Romeooo
 
12.04.13
08:29
(12)он, наверное, шутит...ха-ха...
17 Romeooo
 
12.04.13
08:29
(16)to(13)
18 Jonny_Khomich
 
12.04.13
08:30
(14) (13) ребята, я реально лохонулся)))
19 Godofsin
 
12.04.13
08:31
Если СтрЧислоВхождений(СТрока,Подстрока)>0 тогда...
20 Wobland
 
12.04.13
08:31
(18) иди в пятницу и расскажи всем ;)
21 Godofsin
 
12.04.13
08:31
(20) )))))))))))
22 Romeooo
 
12.04.13
08:32
(19)опять же, причем это к полнотекстовому поиску?
23 Jonny_Khomich
 
12.04.13
08:32
(20) я уже на 73,4% в пятнице)
24 Godofsin
 
12.04.13
08:34
(22) так я просто не отстаю от всех хню всякую постить))) про полнотекстовый - это я упустил
25 Romeooo
 
12.04.13
08:34
(24):)
26 Romeooo
 
12.04.13
08:39
Могу скинуть саму обработку, но толку...
27 НЕА123
 
12.04.13
08:40
(0)
хз. но в БСП прекрано находит по 233*
28 НЕА123
 
12.04.13
08:40
*прекрасно
29 Romeooo
 
12.04.13
08:42
(28)и 233 в середине слова?
30 НЕА123
 
12.04.13
08:46
(29) да.
31 Romeooo
 
12.04.13
08:50
В БСП добавил в организацию телефон "06734567890".
Обновил индекс.
В поиске пишу 567*
Ничего не находит.
32 Xsander
 
12.04.13
08:50
Если пример(с телефонным номером) правильно привел, то в переборе можно так(как в запросе, уже написали выше),-

Найти(ТекстГдеИщем, ТекстКоторыйИщем)>0

Таким образом очень много буйдет найдено, если номеров много в базе забито и если у Вас к примеру мало символов для поиска

У меня стоит похожая задача, - ограничить часть справочника номенклатура, позициями, названия которых установленны нормативными документами, а другая часть произвольными наименованиями. И с другой стороны сделать поиск с пониманием ошибок клиента или менеджера, если наименования отдоленно с учетом ошибок напоминает наименования из нормативных документов., иными словами распознование текста.
33 Godofsin
 
12.04.13
08:51
(32) еще один )))
34 Romeooo
 
12.04.13
08:51
(32) Вы немного не по теме.
35 Romeooo
 
12.04.13
08:52
(30),(31) а когда ищу по 067*, то все наход, а потом и по 567* без проблем
36 НЕА123
 
12.04.13
08:55
(31)
поиск
лог*
нашел
ООО "Новые технологии"
а с числами почему-то не так...
37 НЕА123
 
12.04.13
08:56
(36)+
непонятно. вообще непонятно.
38 Romeooo
 
12.04.13
08:57
(37) попробывал по *ект, ЗАО "Перспектива" не находит)
39 Romeooo
 
12.04.13
08:58
+(38), как в (36) тоже не хочет находить
40 Romeooo
 
12.04.13
08:59
находит, только после того, если слово уже было найдено раньше поиском по другой подстроке
41 НЕА123
 
12.04.13
09:00
(38)
да. как же оно работает?
42 Romeooo
 
12.04.13
09:01
Похоже придется перебирать метаданные нужных справочников, да динамически формировать запрос с полями: ссылка, синоним реквизита, значение реквизита и выполнять поиск через подобно по значению реквизита...
43 Romeooo
 
12.04.13
09:01
(41)ректально...
44 Romeooo
 
12.04.13
09:01
)))
45 Romeooo
 
12.04.13
10:00
up
46 Romeooo
 
12.04.13
12:33
ну что? нет никаких вариантов?
47 hhhh
 
12.04.13
12:53
(46) а обновление индексов полнотекстового поиска делали?
48 Romeooo
 
12.04.13
16:42
(47)конечно. В (31) писал.