Поиск по началу слова в предложении

17.11.25

Разработка - Запросы

Когда необходимо найти элемент справочника по подстроке, а полнотекстовый не помогает, мы используем поиск по началу слова в предложении.

 

Друзья, в основном, представление ссылок справочников определяется реквизитом "Наименование", но при этом встроенный полнотекстовый поиск позволяет добавлять в себя какие-либо другие реквизиты. В определенный момент, пользователь вводит строку поиска, ожидая получить совпадение по полю "Наименование", а в выдачу полнотекстовый поиск поднимает вверх записи по другому реквизиту, например по "Полному наименованию". При программном использовании, все становится еще загадочнее, но если возможности управлять полями поиска нет, что еще можно сделать?

Конечно, поиск по ПОДОБНО, но данный оператор эффективен только при поиске по началу строки ("Слово%").

 

А что если:

1. Перед записью элемента, реквизит "Наименование" разбить на слова и записать в табличную часть "Хештеги" со смещением, удаляя первое слово.

 

ТОРГОВЫЙ ДОМ "МАШИНОСТРОЕНИЕ"

Хештег

ТОРГОВЫЙ ДОМ МАШИНОСТРОЕНИЕ

ДОМ МАШИНОСТРОЕНИЕ

МАШИНОСТРОЕНИЕ

 

ООО "МАШИНОСТРОЕНИЕ"

Хештег

МАШИНОСТРОЕНИЕ

 

ООО МАШИНОСТРОЕНИЕ И ЛОГИСТИКА

Хештег

МАШИНОСТРОЕНИЕ И ЛОГИСТИКА

И ЛОГИСТИКА

ЛОГИСТИКА

 

Теперь мы сможем, используя ПОДОБНО "Машиностроение%", найти все три записи, но они будут без сортировки.

 

2. Добавить в табличную часть "Хештеги" реквизит "КоррекцияПозиции", через который реализовать следующий порядок вывода:

а) Записи, которые состоят из одного слова

б) Записи, которые ближе к началу строки

в) Записи, которые ближе к концу строки

 

КоррекцияПозиции = СловПосле + (СловДо * 10)

 

ТОРГОВЫЙ ДОМ "МАШИНОСТРОЕНИЕ"

Хештег

Коррекция позиции

ТОРГОВЫЙ ДОМ МАШИНОСТРОЕНИЕ

2 = 2 + (0 * 10)

ДОМ МАШИНОСТРОЕНИЕ

11 = 1 + (1 * 10)

МАШИНОСТРОЕНИЕ

20 = 0 + (2 * 10)

 

ООО "МАШИНОСТРОЕНИЕ"

Хештег

Коррекция позиции

МАШИНОСТРОЕНИЕ

0 = 0 + (0 * 10)

 

ООО МАШИНОСТРОЕНИЕ И ЛОГИСТИКА

Хештег Коррекция позиции
МАШИНОСТРОЕНИЕ И ЛОГИСТИКА 2 = 2 + (0 * 10)
И ЛОГИСТИКА 11 = 1 + (1 * 10)
ЛОГИСТИКА 20 = 0 + (2 * 10)

 

Таким образом, выполнив запрос:

"ВЫБРАТЬ
|	Хештеги.Ссылка КАК Ссылка,
|	МИНИМУМ(Хештеги.КоррекцияПозиции) КАК КоррекцияПозиции
|ИЗ
|	Справочник.Контрагенты.Хештеги КАК Хештеги
|ГДЕ
|	Хештеги.Хештег ПОДОБНО ""Машиностроение%""
|
|СГРУППИРОВАТЬ ПО
|	Хештеги.Ссылка
|
|УПОРЯДОЧИТЬ ПО
|	КоррекцияПозиции";

Мы получим:

Ссылка

Коррекция позиции

ООО "МАШИНОСТРОЕНИЕ"

0

ООО МАШИНОСТРОЕНИЕ И ЛОГИСТИКА

2

ТОРГОВЫЙ ДОМ "МАШИНОСТРОЕНИЕ"

20

 

Как видите, все просто! А если поиск по началу слова в предложении ничего не нашел, тогда уже перенаправляем строку поиска в полнотекстовый для более глубокого анализа.

Вступайте в нашу телеграмм-группу Инфостарт

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    226159    1228    415    

1072

Инструментарий разработчика Запросы Программист 1С v8.3 Сложные периодические расчеты Запросы 1С:Зарплата и кадры государственного учреждения 3 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

QueryConsole1C — расширение, включающее консоль запросов с поддержкой исполняемых представлений — аналогов виртуальных таблиц, основанных на методах программного интерфейса ЗУП. Оно позволяет выполнять запросы с учётом встроенной бизнес-логики, отлаживать алгоритмы получения данных и автоматически генерировать код на встроенном языке 1С.

1 стартмани

16.05.2025    7142    98    zup_dev    22    

75

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

В данной публикации рассказывается о решении, которое позволяет находить сразу все ошибки в тексте запроса за раз, а не только самую первую.

2 стартмани

05.03.2025    4654    18    XilDen    12    

28

Обновление 1С Запросы Программист 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Данный инструмент помогает анализировать доработанную конфигурацию после обновления на новый релиз и находить «битые» тексты запросов, в которых участвуют несуществующие в новом релизе метаданные.

3 стартмани

06.02.2025    4253    28    XilDen    26    

39

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

03.12.2024    9734    artemusII    11    

25

Запросы Программист Бесплатно (free)

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    18935    sergey279    18    

72

Запросы Программист 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

11.10.2024    13616    XilDen    38    

108
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. paulwist 17.11.25 10:27 Сейчас в теме
Перед записью элемента, реквизит "Наименование" разбить на слова


С помощью "чего" или на основании какого критерия определяется отдельное "слово" ??
3. ivshumelev 44 17.11.25 12:44 Сейчас в теме
(1) Мы разбиваем по пробелу, но перед этим "нормализируем строку" - удаляем кавычки, запятые и прочие символы. Тоже самое проделываем с введенной строкой пользователем.
5. paulwist 17.11.25 13:24 Сейчас в теме
(3) А как осуществляется поиск, что передаётся в предикат??
6. ivshumelev 44 17.11.25 13:43 Сейчас в теме
(5) Я не совсем понимаю что значит предикат, но в запросе применяется отбор:
Хештеги.Хештег ПОДОБНО "Машиностроение%" - поиск по началу строки
7. paulwist 17.11.25 14:11 Сейчас в теме
(6)
запросе применяется отбор


Имелось в виду, например юзер ищет наименование " l'Etual ", что передаётся в качестве Хештега??
8. ivshumelev 44 17.11.25 15:13 Сейчас в теме
(7) Предположим есть контрагент с наименованием " l'Etual "

1. В модуле объекта перед записью, все реквизиты по которым формируем хештег, отправляем сначала в функцию нормализации:
а) СокрЛП
б) ВРег
в) Удаляем не нужные на наш взгляд символы !№;%:?*()_+/*-/,#@$%^&*()|:?><{}[]. '“”«»
г) Удаляем повторяющиеся пробелы

В итоге:
" l'Etual "
LETUAL

В Таблицу хештеги добавится 1 строка
Хештег: LETUAL
КоррекцияПозиции: 0 = 0 + (0 * 10)

2. Пользователь когда вводит строку поиска " l'Etual ", мы её тоже сначала нормализуем в той же функции, а затем уже по ней ищем:
LETUAL%

3. Если ничего не нашлось, отправляем в полнотекстовый.

Сейчас, вот так.
2. SerVer1C 993 17.11.25 10:29 Сейчас в теме
Велосипед какой-то.
Зачем удалять первое слово из предложения, если можно просто по словам разбить предложение.
4. ivshumelev 44 17.11.25 12:50 Сейчас в теме
(2) В пример попало удаление первого слова если это ООО, АО и прочее. Сделали из предположения, что "ООО Машиностроение" никто не ищет, но возможно, вы правы, стоило собрать статистику.
Для отправки сообщения требуется регистрация/авторизация