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