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

04.11.14

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

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

Скачать исходный код

Наименование Файл Версия Размер
Поиск
.epf 7,39Kb
24
.epf 1.0 7,39Kb 24 Скачать

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

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

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

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

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

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

 

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

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

 

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

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

См. также

Быстрый поиск дублей с четким/нечетким поиском по любому сочетанию реквизитов/реквизитов таб. частей с отбором и быстрой заменой значений в ЛЮБЫХ базах 8.1-8.3 (УТ 10.3, БП 2, ЗУП 2.5, КА 1.1, УТ 11, БП 3, УНФ 1.6/3.0, КА 2, ЗУП 3 и т.д.)

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

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

10800 руб.

14.05.2012    155591    327    252    

559

Журнал изменений с восстановлением состояния ссылочных объектов и архивацией по HTTP / COM (расширение + конфигурация, 8.3.14+, ЛЮБАЯ конфигурация)

Архивирование (backup) Журнал регистрации Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Управление торговлей 11 Платные (руб)

База данных «сама» меняет данные в документах/справочниках? Тогда данный журнал изменений для Вас! Практически не влияет на скорость записи объектов за счет быстрого алгоритма! Скорость работы почти в 2 раза выше типового механизма "История изменений"! Позволяет следить за изменениями и удалением в любых ссылочных объектах конфигурации, с возможностью архивации по HTTP(!) или COM, и сверткой данных. А так же, может восстановить состояние реквизитов (значения) до момента изменения или удаления объекта из базы. Есть ДЕМО-база где можно самостоятельно протестировать часть функционала! Работает на любых платформах выше 8.3.14+ и любых конфигурациях! Версия 3.1 от 24.08.2023!

21600 руб.

15.05.2017    42637    10    24    

38

Кто такая Мантикора?

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

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

1 стартмани

30.11.2023    3236    andreysidor4uk    16    

46

PowerOffice

Поиск данных Корректировка данных Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

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

1 стартмани

05.06.2023    1971    23    PowerBoy    1    

15

Получение ссылки по бинарной строке PostgreSQL или MSSQL

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

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

1 стартмани

04.04.2023    2635    2    berserg    2    

12

Поиск документов с ошибками проведения, универсальный

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

Обработка позволяет найти проведенные документы без движений и, наоборот, НЕ проведенные документы с движениями. Подходит для любой конфигурации.

1 стартмани

18.08.2022    3025    23    KVIKS    3    

10

Поиск и замена значений + Поиск дублирующихся элементов справочников с подключением к внешней базе

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

Обработка предназначена для гибкого поиска и дальнейшей замены дублей справочников, документов, а также планов видов расчетов и планов видов характеристик. В обработку включена возможность проверки наличия ссылки во внешней базе (по УИДу), поиска дублей с предварительным отбором, а также произвольной обработки реквизитов перед поиском (например, возможно удалить определенные символы из наименования).

3600 руб.

30.03.2022    8614    3    0    

5
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. BigB 191 04.11.14 19:04 Сейчас в теме
Полнотекстовый поиск Вам в помощь!
KasperRWF; HiKS; ojiojiowka; +3
2. Justindj 24 04.11.14 20:17 Сейчас в теме
(1) BigB, Разницу понимаешь между использованием полнотекстового поиска и моей идеей? Включение в режиме конфигуратора использование индексов и увеличение размера базы из за этого, постоянно обновлять индекс. Мою идею можно развить и искать по любому реквизиту в любом справочнике или документе и обрабатывать результат в удобной для пользователя форме. Сам смысл быстро подобрать товар или контрагента по набору слов и дальше его использовать для подстановки в документы или еще кудато...
+
3. DO_WHILE_LOOP 358 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;
	КонецЦикла;
	
	РезультатЗапроса = Запрос.Выполнить();
	
	СписокВыбора = Новый СписокЗначений;
	СписокВыбора.ЗагрузитьЗначения(РезультатЗапроса.Выгрузить().ВыгрузитьКолонку("Значение"));
	
	Возврат СписокВыбора;
	
КонецФункции
Показать
+
Оставьте свое сообщение