Поиск по вхождению (ввод в табличную часть, поля ввода в документах и т.п.) в типовых решениях (УТ, КА, ERP)

02.06.25

Разработка - Механизмы типовых конфигураций

В типовых решениях типа УТ, КА, ERP при вводе строк в поля ввода осуществляется поиск по первым символам. С помощью небольшой доработки (делается через расширение) можно организовать поиск по вхождению.

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

В менеджере объекта (на примере справочника Контрагенты) такая процедура присутствует, и из нее в свою очередь вызывается еще одна
ПартнерыИКонтрагентыВызовСервера.КонтрагентыДанныеВыбора(Параметры)

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

В коде этой процедуры (и похожих, например, для справочника Номенклатура) есть такая строка:

Запрос.УстановитьПараметр("СтрокаВвода", ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска) + "%");

что подразумевает явный поиск по первым символам. Чтобы не ломать бизнес-логику и не прибегать к инъекциям типа &ИзменениеИКонтроль пришлось сделать таким образом. Заимствуем процедуру модуля менеджера:

&Перед("ОбработкаПолученияДанныхВыбора")
Процедура Расш1_ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)

	// поиск по вхождению (не по первым символам)
	Если ЗначениеЗаполнено(Параметры.СтрокаПоиска) Тогда
		Параметры.СтрокаПоиска = "%" + Параметры.СтрокаПоиска;
	КонецЕсли;

КонецПроцедуры

и аккуратно модифицируем вышеназванную процедуру

ОбщегоНазначения.СформироватьСтрокуДляПоискаВЗапросе(СтрокаПоиска) так:

&Вместо("СформироватьСтрокуДляПоискаВЗапросе")
Функция Расш1_СформироватьСтрокуДляПоискаВЗапросе(Знач СтрокаПоиска)
	
	// чтобы искать по вхождению (строка переопределеяется в расширении соотвествтующего модуля менеджера) 
	// если в начале строки есть символ "%", значит, мы ее уже модифицировали
	// (можно вписывать в модуле менеджера в начало строки вместо "%" 
	// любой редкий символ или их последовательность)
	Если Лев(СтрокаПоиска, 1) = "%" Тогда
		
		Результат = Сред(СтрокаПоиска, 2);
		Результат = СтрЗаменить(Результат, "~", "~~");
		Результат = СтрЗаменить(Результат, "%", "~%");
		Результат = СтрЗаменить(Результат, "_", "~_");
		Результат = СтрЗаменить(Результат, "[", "~[");
		Результат = СтрЗаменить(Результат, "]", "~]");
		Результат = СтрЗаменить(Результат, "^", "~^");
		Результат = "%" + Результат;
		
	Иначе
		// не изменяли строку в модуле менеджера - выполняется стандартный код типового решения
		Результат = ПродолжитьВызов(СтрокаПоиска);
	КонецЕсли;
	
	Возврат Результат;
КонецФункции

И это все.

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

поиск по подстроке

См. также

Механизмы типовых конфигураций Программист 1С v8.3 Бесплатно (free)

Каждый, кто работал с кадровыми отчетами в ЗУП, ERP или УХ, сталкивался с механизмом представлений – странным кодом запроса, где поля отображаются пустыми ссылками, а в названии временной таблицы есть слово «Представление». В статье разберем, что такое представления и как ими пользоваться. Больше не нужно ломать голову над тем, откуда и как правильно получать данные. Механизм представлений сделает это за вас.

08.07.2025    1930    user2012581    42    

40

Работа с интерфейсом БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Программист 1С v8.3 1C:ERP Бесплатно (free)

В этой статье я расскажу, как в конфигурации 1С:ERP 2.5 при начале работы системы настроить открытие своих нетиповых форм (в том числе и из внешних обработок). Данную методику можно использовать как на тонком клиенте, так и на мобильном или веб-клиенте, а также в мобильном приложении.

12.05.2025    2333    PROSTO-1C    1    

16

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

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

27.02.2025    996    PROSTO-1C    1    

6

Механизмы типовых конфигураций HighLoad оптимизация Программист 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Бесплатно (free)

Пример популярной пользовательской настройки плана счетов. К чему это может привести, почему «всё тормозит» и как это поправить.

18.02.2025    3655    pbelousov    10    

6
Оставьте свое сообщение