Поиск в справочниках по "неточному" наименованию

19.12.12

Задачи пользователя - Поиск данных

Часто возникает задача найти элемент справочника по его "неточному" наименованию.
Это может быть:
- при загрузке данных из другой базы или внешнего файла
- при проверке на возможность "двойников" в справочнике
- ....

Обработка пытется решить эту проблему с использованием нескольких способов поиска с постепенным увеличением их сложности

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
неточныйПоиск.epf
.epf 262,46Kb
97
97 Скачать (1 SM) Купить за 1 850 руб.

Данная обработка производит поиск в несколько этапов по уровню возрастания сложности:
1 На первом этапе просто ищется  элемент справочника  по наименованию 

2 Если элемент  не найден, строка наименования разбивается на слова и ищется запросом по конструкции  "где наименование подобно "слово1%слово2%слово3%..." . Таким образом решается проблема "лишних пробелов" между словами 

3 Если элемент  не найден, составляется массив всех возможных перестановок слов и процедура п.2 повторяется для каждой из возможных перестановок

4. Если   элемент  не найден, используется поиск по неточному наименованию с использованием внешней компоненты StrMatch.dll. Компонента "зашита" в макет и не  требует копирования и регистрации себя на компьютере пользователя ПРИ УСЛОВИИ НАЛИЧИЯ У ПОЛЬЗОВАТЕЛЯ ПРАВ ЛОКАЛЬНОГО АДМИНИСТРАТОРА. Если у пользователя таких прав нет, тогда необходимо выгрузить  компоненту в файл с помощью кнопки "выгрузить ДЛЛ" и попросить вашего системного администратора поместить ее в папку исполняемых файлов 1С и зарегистрировать командой RegSvr32. 

См. также

Поиск данных Системный администратор Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Платные (руб)

Обработки помогут Вам легко и, главное, быстро (в 5 раз и быстрее штатной обработки 1С), выполнить поиск дублирующих данных в Ваших базах 1С на платформах 8.1-8.3. Это позволит уменьшить объем лишней информации в справочниках и документах, планах видов характеристик и др., упростит работу с данными пользователям. А так же можно, одним нажатием, узнать в каких ссылочных объектах есть вообще дубли! Понятное расположение команд и настроек, в сочетании с описанием и справкой, еще упростят процесс. А так же обновления Вы получаете бесплатно в течение года с момента приобретения данных обработок! (Обновление от 27.11.2023, версия 6.12)

10800 руб.

14.05.2012    160360    341    253    

574

Математика и алгоритмы Инструментарий разработчика Универсальные функции Поиск данных Программист Платформа 1С v8.3 1C:Бухгалтерия 1С:ERP Управление предприятием 2 Абонемент ($m)

Несколько упакованных в один класс интерфейсов для обработки популярных универсальных коллекций. Для тех, кого раздражает отсутствие действительно единого интерфейса для универсальных коллекций.

5 стартмани

25.09.2024    2818    1    Артано    14    

19

Поиск данных Программист Платформа 1С v8.3 Россия Бесплатно (free)

В этой статье я хочу рассмотреть еще один кейс применения Clickhouse в связке с 1С - оптимизацию поиска в справочнике по ключевым словам. Здесь не будет готового решения, но будут описаны важные моменты, которые позволят легко применить данный кейс в реальности.

18.08.2024    2442    1cnik2    23    

17

Поиск данных Программист Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Отображение и просмотр реквизитов справочника или документа - с бесконечным открытием подуровней.

1 стартмани

14.06.2024    3984    13    RustIG    33    

22

Поиск данных Системный администратор Программист Платформа 1С v8.3 Россия Абонемент ($m)

Статья об опыте развертывания и интеграции с базой данных Manticore Search для быстрого полнотекстового поиска.

1 стартмани

30.11.2023    5446    andreysidor4uk    18    

56

Поиск данных Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Стандартная обработка с доработанным выводом ссылок в виде дерева с учётом фильтра и с удобным подбором исходного объекта

2 стартмани

24.11.2023    1498    21    SerVer1C    10    

10

Поиск данных Корректировка данных Пользователь Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Абонемент ($m)

PowerOffice - обработка для поиска, просмотра и обработки данных для пользователей. Доступ к объектам на просмотр и редактирование данных определяется правами пользователя.

1 стартмани

05.06.2023    2530    27    PowerBoy    1    

16

Поиск данных Программист Платформа 1С v8.3 Управляемые формы 1C:Бухгалтерия Абонемент ($m)

Получение ссылки в 1С по бинарной строке из PostgreSQL в виде строки формата bytea или из MSSQL в виде шестнадцатиричной строки. Кроме ссылочных объектов ссылки могут быть получены и для перечислений. Это может быть полезно при анализе логов журнала регистрации или СУБД.

1 стартмани

04.04.2023    3499    5    berserg    2    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. aet 55 19.12.12 16:39 Сейчас в теме
А почему у Вас 4 пункт через dll, а не средствами полнотекстового поиска 1с?
2. Torin99 285 19.12.12 16:58 Сейчас в теме
Видимо, потому что не очень понимаю как сделать такую работу "средствами полнотекстового поиска". Насколько я понимаю, средства полнотекстового поиска предлагают функционал, схожий с поиском по шаблонам -- это меня не устраивает. ДЛЛ-ка ищет не по шаблону, она предлагает некую метрику подобия двух тестовых строк -- в частности эта ДЛЛ-ка предлагает n-граммную метрику -- это значительно лучше чем любые шаблоны. Сейчас я пишу ДЛЛ-ку на основе т.н. "расстояния Левенштейна" -- она будет работать несколько лучше...
3. Torin99 285 19.12.12 17:13 Сейчас в теме
Вот смотрите, цитата
"# - нечеткий поиск слов с заданным количеством отличий от указанного (если не указано, то = 1); пример: запрос "#Система" найдет "систама", "сивтема"; запрос "Система#2" найдет "ситтама", "сеттема";"

А вот найдет ли запрос "Система#2 слово "ситемас" и какое с точки зрения механизма полнотекстового поиска здесь количество отличий? По Левенштейну - ровно 2.
4. aet 55 19.12.12 17:41 Сейчас в теме
(3) в нулевом сообщении вопрос, не критика. Думаю, вдруг фишка есть, а неудобства dll известны. Если б я сам хорошо знал механизм полнотекстового поиска, как-то ниразу на 8ке не понадобился. Почему-то думаю там тот же Левенштейн, не встречал что внутри.
Как-то просто написал на 1С его алгоритм для себя, могу найти/кинуть если интересно :)
5. Torin99 285 19.12.12 17:51 Сейчас в теме
(4) aet, Вы написали функцию вычисления "расстояния Левенштейна" для двух произвольных строк на 1с-ке? Конечно, нужно. Можно мне на мою почту -- torin11@gmail.com? Если воспользуюсь в следующей обработке, обязательно укажу Вас как соавтора.
А там, к сожалению, не Левенштейн. Во всяком случае "Система#2 слово "ситемас" НЕ НАХОДИТ - а по Левенштейну должно находить...
Кстати, а Вы знаете что Владимир Иосифович Левенштейн до сих пор жив, относительно здоров и спокойно работает в Келдышевском институте?
6. Yashazz 4835 19.12.12 18:06 Сейчас в теме
(5) Ну, я писал расстояние Левенштейна на 1С. И полнотекстовый поиск по таблице значений делал. Ещё на 8.1 был грех. Если надо, могу покопаться и прислать.
7. aet 55 19.12.12 18:34 Сейчас в теме
(5) Отправил почтой, там функция небольшая, можно тут сообщением выложить.
О личности В.И. Левенштейна к сожалению ничего не знал, спасибо.
8. Torin99 285 19.12.12 19:55 Сейчас в теме
Получил, смотрю...
Большое спасибо!!!
9. petrov_al 10 20.12.12 14:42 Сейчас в теме
В синтаксе посмотрите МенеджерПолнотекстовогоПоиска и его возможности, скорее все большая часть того что вы придумываете там уже заложена. Ниже отрывок из справки.

МенеджерПолнотекстовогоПоиска.СоздатьСписок (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
Возвращаемое значение:

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

Описание:

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

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

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

Если режим полнотекстового поиска запрещен, то использование метода вызывает исключение.

Показать
10. Torin99 285 20.12.12 15:02 Сейчас в теме
(9) petrov_al, я не хочу с Вами спорить, просто МенеджерПолнотекстовогоПоиска оперирует в терминах Левенштейна только одной операцией "замена" - т.е. (дальше цитата из справки) -- "запрос "Система#2" найдет "ситтама", "сеттема";" -- иными словами все те слова, которые получаются из слова "система" двумя ЗАМЕНАМИ одного символа на другой. Но вот "ситемас" он не найдет - хотя по Левенштейну здесь расстояние равно как раз 2 - только не 2 ЗАМЕНЫ, а 1 ВСТАВКА + 1 УДАЛЕНИЕ = 2.
Поймите, с точки зрения ЧЕЛОВЕЧЕСКИХ ошибок растояние по Левенштейну намного более ПРАВИЛЬНО, чем логика работы Менеджера Полнотекстового Поиска. На самом деле еще точнее работают т.н "фонетические алгоритмы", которые использует, например, Гугл, но как использовать их внутри 1С-ки я пока не понимаю...
Логика "замены" работает только для исправления т.н "ошибок двоечников" - т.е когда человек пишит "Ы" вмести "И", "А" вместо "О". Но в реальности очень большАя часть ошибок -- это "ошибки невнимательности", когда просто пропушена буква или добавлена лишняя из-за ошибок работы с клавиатурой.
11. A1WEB 59 13.04.19 00:31 Сейчас в теме
Интересует компонента StrMatch.dll.
Вы как-то дорабатывали её под v8 или на толстом клиенте удалось запустить исходную (которая разрабатывалась по v7.7)? На управляемых формах работать будет? Исходные коды доступны?
12. Torin99 285 15.04.19 16:42 Сейчас в теме
Нет, не переделывал, спокойно запускается под толстым клиентом. Будет работать под любым клиентом, но на управляемых формах главное правильно передать условия и получить ответ
13. heroinepta 2 11.11.19 09:45 Сейчас в теме
При поиске по номенклатуре зависает навечно...
Ищу " Метчик ручн.компл. М 4 х0.7 9ХС ТМ*"
В номенклатуре "Метчик ручной 4 х 0,7 2шт.комп."
Но даже если пытаюсь помочь и ищу "Метчик 4 х 0.7" нужный результат в вариантах не высвечивается. К тому же появляются пустые строки. Допиливать и допиливать еще обработку)
14. user1340552 14.01.20 13:44 Сейчас в теме
Заинтересованы в реализации чего-то подобного в существующей конфигурации. Свяжитесь со мной, пожалуйста 9923669@bk.ru
15. maxxivan 06.12.20 11:32 Сейчас в теме
Для управляемых форм нет реализации ?
Оставьте свое сообщение