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