Имя: Пароль:
1C
1С v8
Динамический поиск элемента справочника по нескольким полям
0 kenshin
 
11.11.11
11:12
Здравствуйте уважаемые Мистяне.
Один директор (в прошлом заядлый айтишник) захотел сделать обработку, в котором будет организован динамический поиск по справочнику (как, например, в гугле). Есть ли у кого-либо подобные наработки или алгоритмы?
1 kenshin
 
11.11.11
11:23
up
2 Ненавижу 1С
 
гуру
11.11.11
11:24
я не против
3 kenshin
 
11.11.11
11:57
(2) не против чего?
4 Ненавижу 1С
 
гуру
11.11.11
12:02
(3) такой обработки
5 kenshin
 
11.11.11
12:07
(4) А идеи? :)
Алгоритм, который у меня возник в голове довольно простой:
1) Разбиваем строку на слова
2) Ищем каждое слово в каждом из полей поиска
3) Результаты выводим
Все это выполнять при изменении строки.
НО
Постоянно формировать запрос к базе... думаю, очень медленно и не рационально будет работать...
6 kenshin
 
11.11.11
12:08
+(5) Мне бы хотелось просто получить подсказку алгоритма, кто занимался такими вещами...
7 Axel2009
 
11.11.11
12:11
полнотекстовый поиск не предлагать?
8 Maxus43
 
11.11.11
12:12
давно придуманы такие велокаты, причем самой 1с
9 kenshin
 
11.11.11
12:12
(7) всмысле? поясните, пожалуйста....
10 Maxus43
 
11.11.11
12:13
(9) 1с даже синонимы умеет искать
11 kenshin
 
11.11.11
12:13
(8) подскажите, пожалуйста, где в 1с реализован такой механизм?
12 Maxus43
 
11.11.11
12:13
(11) > (7)
13 kenshin
 
11.11.11
12:14
(12) ну так что такое "полнотекстовый поиск"? Видимо туплю...
14 Maxus43
 
11.11.11
12:17
будем постить СП, чтоб пнуть в нужном напрвавлении:

МенеджерПолнотекстовогоПоиска.СоздатьСписок (FullTextSearchManager.CreateList)
МенеджерПолнотекстовогоПоиска (FullTextSearchManager)
СоздатьСписок (CreateList)
Синтаксис:

СоздатьСписок(<СтрокаПоиска>, <РазмерПорции>)
Параметры:

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

Тип: Строка.
Строка для поиска в реквизитах данных (содержит как слова, которые нужно найти, так и поисковые операторы - И, ИЛИ, НЕ, РЯДОМ, скобки, кавычки).
Поиск может осуществляться по нескольким словам, с использованием поисковых операторов и поиском по точной фразе.
В строке ввода допускается использование следующих поисковых операторов:
И (AND или #) - поиск данных, содержащих все слова; пример: "запись И документ" - в реквизитах должны быть и "проведение" и "документ" (с учетом морфологии);
ИЛИ (OR или | или ,) - поиск хотя бы одного слова из перечисленных; пример: "запись ИЛИ документ" - в реквизитах должно быть хотя бы одно из слов "запись" или "документ";
НЕ (NOT или ~) - поиск данных, в реквизитах которых есть первое слово, но нет второго; пример: "закрытие НЕ месяц" - будут найдены все, содержащие "закрытие", но не содержащие слова "месяц". Использование "~" в начале строки не допускается;
РЯДОМ/n (NEAR/[+/-]n) - поиск данных, содержащих в одном реквизите указанные слова с учетом морфологии на расстоянии n слов между словами.
Знак указывает, в каком направлении от первого слова будет искаться второе слово ("+" – после первого; "-" – до первого слова).
Если знак не указан, то будет найдены данные, содержащие указанные слова на дистанции n слов друг о друга. Порядок слов не имеет значения.
"фен РЯДОМ/3 воздух" - будут найдены данные, в которых "воздух" находится не более 3-х слов до или после "фен";
фен РЯДОМ/+3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов после "фен";
фен РЯДОМ/-3 воздух - будут найдены данные, в которых "воздух" находится не более 3-х слов перед "фен".
РЯДОМ(NEAR) - упрощенный оператор дистанции: оба слова расположены не далее, чем в 8-ми словах друг от друга; пример: "проведение РЯДОМ документ";
"" (текст в кавычках) - поиск точной с учетом морфологии фразы , пример: "проведение документа" - эквивалентно: проведение /1 документа;
() - группировка слов (сколько угодно уровней вложенности); пример: "(проведение | выписка) # (счета, документа)";
* - поиск с использованием группового символа (замена окончания слова). Должно быть введено более 1 значащего символа; пример: "доку*" - найдет "документ", "документировать", "документальный" и др.;
# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";
! - поиск с учетом синонимов русского, английского и украинского языков. "!" ставится перед соответствующим словом; пример: поиск "!красный кафель", найдет еще и "алый кафель" и "коралловый кафель".
Если не указано никаких операторов (слова набраны через пробел), то программа осуществляет поиск всех слов из запроса с использованием оператора И.
Замечание 1. Написание операторов И (AND), ИЛИ (OR), НЕ (NOT), РЯДОМ (NEAR) допускается только в верхнем регистре.
Замечание 2. Операторы не используются как унарные (в начале строки поиска). Например, нельзя сделать выбор всех глав, в которых отсутствует указанный текст.
Ограничение. При использовании нечеткого и группового поиска (операторы "*" и "#") может быть найдено несколько слов. Общее число найденных слов не может превышать 300.
<РазмерПорции> (необязательный)

Тип: Число.
Количество результатов в одной порции. Например, 30.
Значение по умолчанию: 20
Возвращаемое значение:

Тип: СписокПолнотекстовогоПоиска.

Описание:

Создает объект СписокПолнотекстовогоПоиска. После создания необходимо вызвать метод ПерваяЧасть - чтобы получить результаты поиска.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Если режим полнотекстового поиска запрещен, то использование метода вызывает исключение
15 kenshin
 
11.11.11
12:19
(14) большое спасибо.
Просто не слышал про такой механизм. Буду знать.
Еще раз спасибо.
16 Maxus43
 
11.11.11
12:20
(15) книжку по нему почитай, там чтоб его запустить надо много чего сделать, индексы сформировать например, что долго. рег задания всякие и т.д. читаем короче
17 kenshin
 
11.11.11
12:21
(16)
По крайней мере я понял, куда рыть. Спасибо, буду учиться