Поиск по произвольным частям текста
Задачи пользователя - Поиск данных
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Демо-база работает на платформе 1с.8.3.12 и выше.
Часто мы точно не знаем точное и полное название элемента справочника. Но знаем примерно его части. Например, хотим найти валюту "Доллар США", но помним только что название точно содержит два слова "олл" и "ША".
Паттерн получения запроса:
Функция ПолучитьЗапросНаПоискПоЛексемамВСправочнике(Текст,Справочник="Валюты",Тип="Справочник",Поле="Наименование") Экспорт
// может будет медленно, когда ссылок будет много.
// разделим строку поиска на лексемы через пробел
МассивЛексем = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(Текст," ");
Для Счетчик = 0 По МассивЛексем.Количество()-1 Цикл
МассивЛексем[Счетчик] = "%"+МассивЛексем[Счетчик]+"%";
КонецЦикла;
//Если СтрокаМассива.Количество()>5 Тогда
// Сообщить("Поиск будет произведен только по первым пяти частям строки.",СтатусСообщения.Внимание);
//КонецЕсли;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Лексема0",МассивЛексем[0]);
Запрос.УстановитьПараметр("Лексема0Р",ВосстановитьРаскладку(МассивЛексем[0]));
Запрос.Текст =
"ВЫБРАТЬ различные
| Справочник.Ссылка,Справочник.ПометкаУдаления
|ИЗ
| Справочник.Валюты КАК Справочник
|ГДЕ
| (Справочник.Наименование ПОДОБНО &Лексема0
| ИЛИ Справочник.Наименование ПОДОБНО &Лексема0Р)"
;
Для Счетчик = 1 По МассивЛексем.Количество()-1 Цикл
Запрос.УстановитьПараметр("Лексема"+Счетчик+"",МассивЛексем[Счетчик]);
Запрос.УстановитьПараметр("Лексема"+Счетчик+"Р",ОбщегоНазначения.ВосстановитьРаскладку(МассивЛексем[Счетчик]));
Запрос.Текст = Запрос.Текст+"
|И (Справочник.Наименование ПОДОБНО &Лексема"+Счетчик+"
| ИЛИ Справочник.Наименование ПОДОБНО &Лексема"+Счетчик+"Р)";
КонецЦикла;
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Валюты",Справочник);
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Справочник",Тип);
Запрос.Текст = СтрЗаменить(Запрос.Текст,"Наименование",Поле);
Возврат Запрос;
КонецФункции
Использование запроса в управляемых формах - подключение к полю выбора:
Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Запрос = ОбщегоНазначения.ПолучитьЗапросНаПоискПоЛексемамВСправочнике(Параметры.СтрокаПоиска,"Валюты");
//Запрос.Текст = Запрос.Текст+" И НЕ Справочник.НеИспользоватьВВыборе";
Результат = Запрос.Выполнить();
ДанныеВыбора = Новый СписокЗначений;
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура("Значение,ПометкаУдаления",ВыборкаДетальныеЗаписи.Ссылка,ВыборкаДетальныеЗаписи.ПометкаУдаления);
Элемент = ДанныеВыбора.Добавить();
Элемент.Значение = Структура;
КонецЦикла;
КонецПроцедуры
Вступайте в нашу телеграмм-группу Инфостарт