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

29.01.14

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

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

Файлы

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

Наименование Скачано Купить файл
(только для физ. лиц)
Поиск номенклатуры.dt
.dt 2,04Mb
11 1 850 руб. Купить

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

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

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

Поиск любых справочников по частям слов наименования, при этом не важно, в каком порядке вводить части слов наименования.
Например при строке поиска "ламп 40 вт" результат будет тем же, что и при поиске по строке "вт ламп 40".
Поиск происходит очень быстро, при номенклатуре в 40 000 позиций, время работы около 1,5 - 2 сек.

Подключение к конфигурации производится путем объединения конфигураций.
В прилагаемом файле находится база данных с небольшим количеством номенклатуры для примера.
Конфигурация базы данных содержит только необходимые объекты метаданных:

1. Общий модуль с небходимыми процедурами
2. Подписка на событие "ПриЗаписи" объекта "СправочникОбъект.Номенклатура". Если необходимо выполнять поиск
    в другом справочнике, то его тип нужно добавить в список типов источника подписки.
3. Регистр сведений "_БазаСлов" хранит "огрызки" слов, составляющих наименования элементов справочника
4. Обработка "_ПереиндексацияБазыСлов" служит для первоначального заполнения регистра сведений "_БазаСлов", а 
    так же для его очистки в случае необходимости.
5. Обработка "_БыстрыйПоискЭлементовСправочника" служит для ввода поисковой строки и вызывается из формы списка
    справочника. Я в своем примере на форму списка номенклатуры добавил две кнопки "Поиск" и "ПоискОчистка", назначил
    им сочетания клавиш "F7" и "Ctrl+F7"

Не используются внешние компоненты.

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

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

См. также

Поиск данных Системный администратор Программист 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    161757    347    253    

579

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

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

10000 руб.

10.04.2025    548    1    1    

1

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

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

1999 руб.

15.10.2020    19694    25    63    

24

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

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

5 стартмани

25.09.2024    3300    3    Артано    14    

20

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

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

18.08.2024    2868    1cnik2    23    

18

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

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

1 стартмани

14.06.2024    4655    13    RustIG    33    

22

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

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

1 стартмани

30.11.2023    6071    andreysidor4uk    21    

56

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

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

2 стартмани

24.11.2023    1917    27    SerVer1C    10    

11
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 2 30.01.14 01:27 Сейчас в теме
3. Регистр сведений "_БазаСлов" хранит "огрызки" слов, составляющих наименования элементов справочника
4. Обработка "_ПереиндексацияБазыСлов" служит для первоначального заполнения регистра сведений "_БазаСлов", а
так же для его очистки в случае необходимости.

А зачем? когда данная задача решается просто разбиением строки и формированием запроса через ПОДОБНО? и по скорости уж точно не медленнее, чем
Поиск происходит очень быстро, при номенклатуре в 40 000 позиций, время работы около 1,5 - 2 сек.
2. Re:аниматор 337 30.01.14 09:26 Сейчас в теме
Подскажу вам хитрость как это легко доработать в процедуре поиске стандартных конфигураций.

На примере обработки "Подбор номенклатуры" УТ 10.3

Процедура ВыполнитьПоиск()
...

		// заменим спецсимволы
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "~", "~~");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "%", "~%");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "_", "~_");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "[", "~[");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "-", "~-");
		ШаблонПоиска = "%" + ШаблонПоиска + "%";

		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("ШаблонПоиска", ШаблонПоиска);

...

Показать


Заменяем на

		// заменим спецсимволы
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "~", "~~");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "%", "~%");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "_", "~_");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "[", "~[");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "-", "~-");
		
		ШаблонПоиска = СокрЛП(ШаблонПоиска);

		ТекстИ = "
		|	И ";
		ТекстУсловияОтбораПоШаблону = "";
		СписокПодШаблонов = Новый СписокЗначений;
		ЕстьПробелы = Найти(ШаблонПоиска, " ") > 0;
		н = 0;
		Пока ЕстьПробелы Цикл
			ПозицияПробела = Найти(ШаблонПоиска, " ");
			ПодШаблон = Лев(ШаблонПоиска, ПозицияПробела - 1);
			ПодШаблон = "%" + ПодШаблон + "%";
			СписокПодШаблонов.Добавить(ПодШаблон);
			ШаблонПоиска = СокрЛП(Прав(ШаблонПоиска, СтрДлина(ШаблонПоиска) - ПозицияПробела));
			ЕстьПробелы = Найти(ШаблонПоиска, " ") > 0;
			ТекстУсловияОтбораПоШаблону = ТекстУсловияОтбораПоШаблону +
			?(ТекстУсловияОтбораПоШаблону = "", "", ТекстИ) + "	Номенклатура." + ЭлементыФормы.СписокВидовПоиска.Значение + " ПОДОБНО &ШаблонПоиска" + н + " СПЕЦСИМВОЛ ""~""";
			н = н + 1;
		КонецЦикла;
		
		ШаблонПоиска = "%" + ШаблонПоиска + "%";

		СписокПодШаблонов.Добавить(ШаблонПоиска);
		ТекстУсловияОтбораПоШаблону = ТекстУсловияОтбораПоШаблону +
		?(ТекстУсловияОтбораПоШаблону = "", "", ТекстИ) + "	Номенклатура." + ЭлементыФормы.СписокВидовПоиска.Значение + " ПОДОБНО &ШаблонПоиска" + н + " СПЕЦСИМВОЛ ""~""";
		
		Запрос = Новый Запрос;
		Запрос.УстановитьПараметр("ШаблонПоиска", ШаблонПоиска);

Показать


P.S. не нужно хранить "огрызки" слов. Время работы около 0,5 - 1 сек.
4. kida1 151 25.09.19 15:02 Сейчас в теме
(2) идея хорошая, вероятно вы выложили не весь текст который нужно заменить, и не совсем универсальный механизм.
Предлагаю в обработке Подбор номенклатуры в процедуре ВыполнитьПоиск() следующее:
	
	
		// заменим спецсимволы
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "~", "~~");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "%", "~%");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "_", "~_");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "[", "~[");
		ШаблонПоиска = СтрЗаменить(ШаблонПоиска, "-", "~-");
		
		Запрос = Новый Запрос;
		
		ШаблонПоиска = СокрЛП(ШаблонПоиска);

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

		// Инициализируем структуру выбранной строки (реквизиты обработки).
		Если ПодборПоСправочнику Тогда

			Запрос.Текст = "
			|ВЫБРАТЬ ПЕРВЫЕ 51
			|	Номенклатура.Код КАК Код,
			|	Номенклатура.Артикул КАК Артикул,
			|	Номенклатура.Ссылка КАК Номенклатура,
			|	Номенклатура.НаименованиеПолное КАК НаименованиеПолное,
			|	Номенклатура.Родитель КАК Родитель
			|ИЗ
			|	Справочник.Номенклатура КАК Номенклатура
			|
			|ГДЕ
			|   "+ТекстУсловияОтбораПоШаблону+"
			//|	Номенклатура." + ЭлементыФормы.СписокВидовПоиска.Значение + " ПОДОБНО &ШаблонПоиска СПЕЦСИМВОЛ ""~""
			|	И Номенклатура.ЭтоГруппа = Ложь
			|	" + ?(ЕстьНоменклатурнаяГруппа, "И Номенклатура.НоменклатурнаяГруппа В (&НоменклатурнаяГруппа)", "") + "
			|";

		Иначе
Показать
3. orfos 218 17.07.15 12:56 Сейчас в теме
Спасибо. Очень помогло.
5. user1583870 15.04.21 12:11 Сейчас в теме
Подскажите, а при поиске "ламп 40 вт" будет найдена запись, в которой "40 вт", "ламп 40", "ламп 40 вт желтый свет"? то есть записи, в которых совпал контекст совпал максимально?
Оставьте свое сообщение