Поиск данных справочников по вхождению всех слов

04.11.14

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

Очень многие сотрудники, пришедшие на работу в новую компанию, сталкиваются с проблемой незнания товарного ассортимента. При этом проблема возникает именно в том, что нет четкого алгоритма заведения, по которому потом возможен стандартный поиск. Ниже описано, как это можно решить простым способом.

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Поиск
.epf 7,39Kb ver:1.0
25 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Каким образом это можно реализовать? Да очень просто. Давайте по порядку.

1) Разбиваем нужную нам строку на массив слов, используя как разделитель символ пробела

2) Первым делом выбираем все элементы справочника без каких либо условий

3) Проходимся циклом по Массиву слов и делаем запрос к справочнику, но уже с условиемм ПОДОБНО "%НАШЕСЛОВО%"

4) Результат запроса выгружаем в массив значение и этот массив подставляем параметром в следующий шаг цикла

 

Т.е. по сути мы постоянно получаем результат, и из этого результата дальше ищем по второму и третьему и т.д слову.

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

 

Всем спасибо за внимание.

универсальный поиск

См. также

Поиск данных Системный администратор Программист 1С v8.3 Управляемые формы 1C:Бухгалтерия 1С:Бухгалтерия 3.0 1С:Зарплата и Управление Персоналом 3.x 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 1С:Управление торговлей 11 1С:Розница 2 1С:Розница 3.0 Платные (руб)

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

12000 руб.

14.05.2012    161546    346    253    

578

Поиск данных ЭДО и ОФД Подбор и обработка объектов 1С v8.3 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Поиск номенклатуры при сопоставлении в ЭДО не интуитивный, не настраиваемый и просто неудобный. Данное решение - это альтернативный вариант расширенного поиска и сопоставления номенклатуры для 1С, который подключается в качестве расширения и решает эту проблему.

10000 руб.

10.04.2025    496    1    1    

1

Розничная торговля WEB-интеграция Поиск данных Пользователь 1С v8.3 Оперативный учет 1С:Розница 2 1С:Управление торговлей 11 Управленческий учет Платные (руб)

Альтернатива сервису 1С Номенклатура, не требует подписки ИТС, ищет данные в открытых источниках. Для поиска товара по штрихкоду в сети интернет, полезно для первоначального заполнения базы.

1999 руб.

15.10.2020    19647    25    63    

24

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

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

5 стартмани

25.09.2024    3237    3    Артано    14    

20

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

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

18.08.2024    2829    1cnik2    23    

17

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

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

1 стартмани

14.06.2024    4479    13    RustIG    33    

22

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

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

1 стартмани

30.11.2023    6003    andreysidor4uk    21    

56

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

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

2 стартмани

24.11.2023    1878    26    SerVer1C    10    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BigB 193 04.11.14 19:04 Сейчас в теме
Полнотекстовый поиск Вам в помощь!
KasperRWF; HiKS; ojiojiowka; +3 Ответить
2. Justindj 25 04.11.14 20:17 Сейчас в теме
(1) BigB, Разницу понимаешь между использованием полнотекстового поиска и моей идеей? Включение в режиме конфигуратора использование индексов и увеличение размера базы из за этого, постоянно обновлять индекс. Мою идею можно развить и искать по любому реквизиту в любом справочнике или документе и обрабатывать результат в удобной для пользователя форме. Сам смысл быстро подобрать товар или контрагента по набору слов и дальше его использовать для подстановки в документы или еще кудато...
3. DO_WHILE_LOOP 360 06.11.14 16:14 Сейчас в теме
Соглашусь с Justindj полнотекстовый поиск не всегда подходит, но предложенный алгоритм не оптимальный, я бы его оптимизировал например так:
Функция ПолучитьСписокВыбора(Текст, ВидСправочника)
	
	// Создаем список, который каждый раз будет заменятся новыми значениями
	СписокВыбора = Новый СписокЗначений;
	
	Если ЗначениеЗаполнено(Текст) Тогда 
		
		// Создадим текст условия поиска
		УсловиеПоиска = "";
		ТекстТемп = СтрЗаменить(Текст, " ", Символы.ПС);
		Для Счетчик = 1 По СтрЧислоСтрок(ТекстТемп) Цикл 
			УсловиеПоиска = УсловиеПоиска + "И Справочник.Наименование ПОДОБНО ""%" + СтрПолучитьСтроку(ТекстТемп, Счетчик) + "%""" + Символы.ПС;
		КонецЦикла;
		
		
		// А вот и сам алгоритм
		Запрос = Новый Запрос;
		Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 25
		|	Справочник.Ссылка КАК Значение
		|ИЗ
		|	Справочник." + ВидСправочника + " КАК Справочник
		|ГДЕ
		|	Справочник.ЭтоГруппа = ЛОЖЬ
		|	" + УсловиеПоиска + "
		|
		|УПОРЯДОЧИТЬ ПО
		|	Справочник.Наименование";
		
		СписокВыбора.ЗагрузитьЗначения(Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Значение"));
		
	КонецЕсли;
	
	Возврат СписокВыбора;
	
КонецФункции

Показать
4. pereligins 21 24.03.15 18:21 Сейчас в теме
Исходный пример и пример в комментарии работают очень медленно, особенно на больших справочниках.
Рекомендую делать одним запросом, работает даже быстрее, причем еще и сортирует результат по наименованию:

Функция  ПолучитьСписокВыбора(Текст,ВидСправочника)
	
	// Разложили на массив нашу строку
	СписокСлов = РазложитьСтрокуВМассивПодстрок(Текст," ");
	
	Запрос = Новый Запрос;
	Запрос.Текст = "ВЫБРАТЬ  " + ?(СписокСлов.Количество() = 1,"ПЕРВЫЕ 50","") +"
	               |	Справочник.Ссылка КАК Значение
	               |" + ?(СписокСлов.Количество() > 1,"ПОМЕСТИТЬ вт1","") +"
	               |ИЗ
	               |	Справочник.Номенклатура КАК Справочник
	               |ГДЕ
	               |	Справочник.Наименование ПОДОБНО &Текст
	               |	И Справочник.ЭтоГруппа = ЛОЖЬ
				   |" + ?(СписокСлов.Количество() = 1,"УПОРЯДОЧИТЬ ПО Справочник.Наименование","") +"
	               |;
	               |";
				   
	Запрос.УстановитьПараметр("Текст", "%"+СписокСлов[0]+"%");
	СписокСлов.Удалить(0);
				   
	сч = 1;
	Для Каждого Слово Из СписокСлов Цикл
		
		Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ " + ?(сч = СписокСлов.Количество(),"ПЕРВЫЕ 50", "") +"
	               |	вт" + сч + ".Значение КАК Значение
	               |" + ?(сч < СписокСлов.Количество(),"ПОМЕСТИТЬ вт" + (сч+1), "") +"
	               |ИЗ
	               |	вт" + сч + " КАК вт" + сч + "
				   |ГДЕ
				   |	вт" + сч + ".Значение.Наименование ПОДОБНО &Текст" + сч + "
				   | " + ?(сч = СписокСлов.Количество(),"УПОРЯДОЧИТЬ ПО вт" + сч + ".Значение.Наименование", "") +";
				   |";
				   
		Запрос.УстановитьПараметр("Текст" + сч, "%"+Слово+"%");
		
		сч = сч + 1;
	КонецЦикла;
	
	РезультатЗапроса = Запрос.Выполнить();
	
	СписокВыбора = Новый СписокЗначений;
	СписокВыбора.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Значение"));
	
	Возврат СписокВыбора;
	
КонецФункции
Показать
Оставьте свое сообщение