Поиск номенклатуры в табличной части документа по любым вхождениям

10.09.24

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

Устали от стокового поиска номенклатуры в табличной части документов? Постоянно вспоминаете, как же называется та или иная позиция? Хватит это терпеть! вводите то, что запомнили, и выбирайте из списка нужное.

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

Все через запрос, через "Подобно".

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

Основная особенность в том, что ищет по двум раздельным словам. К примеру, номенклатура: "Шоколад (Milka/С клубникой со сливками/300г.)" можно ввести "Milka 300" и запрос найдет максимально схожую номенклатуру, несмотря на лишние слова между искомыми словами в названии номенклатуры.

Код встраиваем в нужный нам документ:

&НаКлиенте
Процедура РасшПоиск_ТоварыНоменклатураАвтоПодборПосле(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка)
	Если СтрДлина(Текст) < 2 тогда
		Возврат;
	КонецЕсли;
	СтандартнаяОбработка = Ложь; 
	СписокН = Новый СписокЗначений;
	СписокН.ЗагрузитьЗначения(ПолучитьНоменклатуру(Текст));
	ДанныеВыбора = СписокН;      
КонецПроцедуры

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

 

Поиск номенклатуры в табличной части

См. также

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

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

10800 руб.

14.05.2012    159476    339    253    

573

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

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

5 стартмани

25.09.2024    2521    1    Артано    14    

19

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

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

18.08.2024    2120    1cnik2    23    

14

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

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

1 стартмани

14.06.2024    3613    8    RustIG    29    

22

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

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

1 стартмани

30.11.2023    4959    andreysidor4uk    18    

53

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

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

1 стартмани

05.06.2023    2410    26    PowerBoy    1    

16

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

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

1 стартмани

04.04.2023    3293    4    berserg    2    

13
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SirStefan 55 19.10.24 15:09 Сейчас в теме
|ГДЕ 
	|	Номенклатура.ЭтоГруппа = ЛОЖЬ
        |        " + СтрокаПоиска;

и тогда не нужно будет проверять "Если Индекс = 0 Тогда"
Оставьте свое сообщение