|
1С:Предприятие
:: 1С:Предприятие 8 общая
|
|
| ||
fisher 18.01.21 - 18:11 | При вводе по строке в поле ввода справочника выдает 10 строк подходящих результатов.
Как можно увеличить количество строк? Желательно для конкретного поля ввода. | ||
Ёпрст 1 - 18.01.21 - 18:41 | а не 50 разве ?.. | ||
acht 2 - 18.01.21 - 18:42 | (0) Обработать событие АвтоПодбор поля ввода самостоятельно? | ||
Ёпрст 3 - 18.01.21 - 18:42 | Ну.. разве что переопределять поведение и подсовывать сколько надо через ОбработкаПолученияДанныхВыбора какого нить, на нимфостарте были статьи на сей счет | ||
acht 4 - 18.01.21 - 18:46 | (3) ОбработкаПолученияДанныхВыбора сразу для всего справочника/ПВХ/итп. Для отдельного поля ввода надо перекрывать события отдельного поля ввода. И возможно там ОкончаниеВводаТекста какое-нибудь еще. | ||
fisher 5 - 18.01.21 - 18:59 | (2) О! Т.е. если вернуть больше данных выбора, то их попытается все показать, с полосой прокрутки и т.п? Спасибо. Меня что-то клемануло, что это ограничение платформы или типа того. | ||
fisher 6 - 19.01.21 - 13:06 | (3) Переопределил ОбработкаПолученияДанныхВыбора(), сделал список на 20 элементов.
С какого-то перепугу платформа к ним добавляет еще несколько (закономерности в количестве не установил) со стандартной подсветкой поиска. Когда она это делает? Как этого избежать? Ничего не понимаю. | ||
Ёпрст 7 - 19.01.21 - 13:25 | (6) а СтандартнаяОбработка = Ложь; ? | ||
fisher 8 - 19.01.21 - 13:25 | Что любопытно - если тупо пустой список выбора формировать, то пустой и остается. Если хоть один элемент в него поместить - отсебятины накидывает. | ||
fisher 9 - 19.01.21 - 13:26 | (7) Да. | ||
Ёпрст 10 - 19.01.21 - 13:31 | (8) а ты в ДанныеВыбора пихаешь список со значениями или со структурой ? | ||
Ёпрст 11 - 19.01.21 - 13:32 | А в отладке, эта отсебятина в ДанныеВыбора видна ?... | ||
Ёпрст 12 - 19.01.21 - 13:33 | Там же это г.. еще и на полнотекстовый поиск завязано (если штатно, в свойствах выставить, начало, в любом месте и т.п) или это указать, если структуру в список толкаешь | ||
fisher 13 - 19.01.21 - 13:39 | |||
fisher 14 - 19.01.21 - 13:46 | Вообще, меня почти устраивает штатный поиск в режиме "Любая часть". Только два момента не устраивает:
1) только 10 элементов 2) хитрый алгоритм формирования. Первые пять элементов отображает из тех, которые нашел по первым символам, а остальные пять - из тех где нашел где угодно. Может, оно на небольших справочниках и разнородном ассортименте и норм, а у нас как-то не очень. При этом режим поиска "Любая часть" работает даже при отключенном полнотекстовом поиске один в один как полнотекстовый поиск - по нескольким словам, в произвольном порядке, с подсветкой слов поиска в результате. Как это можно повторить при переопределении поиска - ума не приложу. Если пытаться использовать полнотекстовый поиск программно, то ессно выдает что он отключен. Да и не хочу я базовую функциональность завязывать на полнотекстовый поиск с его периодическими приколами. | ||
fisher 15 - 19.01.21 - 13:48 | Главное, что не непонятно - как подсветку слов поиска в результате получить при переопределении? Да и с приколом этим разобраться бы... Релиз, правда, старый. Может полечили уже этот прикол... | ||
fisher 16 - 19.01.21 - 13:48 | "Главное, что непонятно" | ||
Ёпрст 17 - 19.01.21 - 13:50 | (13) там поиск еще зависит, включен ли полнотекстовый или нет, попробуй включить его и посмотреть, как оно штатно | ||
Ёпрст 18 - 19.01.21 - 13:50 | а вот количество элементов..хз, видать штатно зашит где-то или еще где, смотреть надо | ||
fisher 19 - 19.01.21 - 13:54 | (17) Сейчас попробую.
(18) Да в том-то и дело, что количество элементов не фиксировано. Сколько отдаешь в список выбора - все и показывает (больше 20 правда не пробовал). Просто еще в конец добавляет псевдослучайное количество дополнительных элементов (у меня от 1 до 7). Причем мои без подсветки поиска, а эти гады с подсветкой. | ||
Ёпрст 20 - 19.01.21 - 14:05 | И это.. История "выбора при вводе" в Авто стоит или выключена ? | ||
fisher 21 - 19.01.21 - 14:07 | (20) В Авто. Сначала открывается история. Начинаешь набирать - открывается список выбора. | ||
fisher 22 - 19.01.21 - 14:14 | (20) По-ходу, ты гений-телепат!
Эта фигня однозначно связана с историей ввода. Только как-то хитро. Очень похоже на то, что добавляются результаты поиска по истории ввода (только бывает находит больше, чем в отображаемой истории) | ||
fisher 23 - 19.01.21 - 14:17 | Ну, так и есть. Отключил историю - добавлять перестал. Ну, это нестрашно. Главное, что объяснение есть. Еще бы с подсветкой разобраться...
Но уже спасибо огромное! | ||
fisher 24 - 19.01.21 - 14:19 | (20) Кстати, а какой смысл отключать историю? Там же все равно открывается это долбанное окошко с "Показать все"? Или его можно таки как-то пристрелить малой кровью? | ||
Вафель 25 - 19.01.21 - 15:23 | попробуй в список выбора для предоставления указывать форматированную строку | ||
fisher 26 - 19.01.21 - 15:35 | (25) Хорошая идея. Реально хорошая. Но нет. | ||
fisher 27 - 19.01.21 - 15:38 | (25) Хотя стоп! Почему нет? Я ж ее сам могу раскрасить! Я, честно говоря, и не знал что в представление списка значений можно форматированную строку пихать. Никогда внимания не обращал.
Спасибо! | ||
fisher 28 - 19.01.21 - 15:41 | Да, красится без проблем! | ||
fisher 29 - 19.01.21 - 15:54 | Теперь, по-идее, я смогу полностью повторить системный поиск по строке с учетом моих хотелок.
Ура, товарищи! Честно говоря, не верилось. Спасибо! | ||
Ёпрст 30 - 19.01.21 - 20:37 | (29) Проверил, на 8.3.18.1208 такое же поведение - и "мусор" с авто подкидывает в список, и штатно, или 10 или 12 всего результатов выводит (закономерность не уловил) Рекламное место пустует | ||
fisher 31 - 20.01.21 - 11:57 | Навскидку вот чего получилось (аналог полнотекстового поиска с произвольным количеством строк выбора, приоритетом результатов совпадающих с началом строки и стандартной подсветкой слов поиска в результате).
Так как в продакшене еще не откатывал, буду рад любым замечаниям. Функция ПодсветитьСлова(ИсходнаяСтрока, МассивСловПодсветки, Знач ШрифтПодсветки = Неопределено, Знач ЦветПодсветки = Неопределено) МассивРезультирующихСтрок = Новый Массив; Если ШрифтПодсветки = Неопределено Тогда ШрифтПодсветки = Новый Шрифт(,, Истина);// жирный КонецЕсли; Если ЦветПодсветки = Неопределено Тогда ЦветПодсветки = Новый Цвет(0, 153, 0);// светло-зеленый из стандартной подсветки ввода по строке КонецЕсли; ИсходнаяСтрокаНормализованная = НРег(ИсходнаяСтрока);// нормализация  // получим список диапазонов символов для подсветки СписокДиапазонов = Новый СписокЗначений; Для НомерСлова = 1 По МассивСловПодсветки.Количество() Цикл СловоПодсветки = НРег(МассивСловПодсветки[НомерСлова - 1]);// нормализация ПозицияНачалаСлова = Найти(ИсходнаяСтрокаНормализованная, СловоПодсветки); Если ПозицияНачалаСлова > 0 Тогда МассивДиапазона = Новый Массив; МассивДиапазона.Добавить(ПозицияНачалаСлова); МассивДиапазона.Добавить(ПозицияНачалаСлова + СтрДлина(СловоПодсветки) - 1); СписокДиапазонов.Добавить(МассивДиапазона, Формат(ПозицияНачалаСлова, "ЧЦ=3; ЧВН=")); КонецЕсли; КонецЦикла;  // отсортируем список диапазонов по возрастанию началов диапазонов СписокДиапазонов.СортироватьПоПредставлению();  // сформируем массив результирующих строк с разным оформлением (подсветкой) СтартоваяПозиция = 1; Для Каждого ЭлементДиапазона Из СписокДиапазонов Цикл НачалоДиапазона = ЭлементДиапазона.Значение[0]; КонецДиапазона = ЭлементДиапазона.Значение[1]; Если НачалоДиапазона > СтартоваяПозиция Тогда// часть строки без подсветки ЧастьБезВыделения = Сред(ИсходнаяСтрока, СтартоваяПозиция, НачалоДиапазона - СтартоваяПозиция); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(ЧастьБезВыделения)); СтартоваяПозиция = НачалоДиапазона; КонецЕсли; Если КонецДиапазона >= СтартоваяПозиция Тогда// часть строки с подсветкой ЧастьВыделяемая = Сред(ИсходнаяСтрока, СтартоваяПозиция, КонецДиапазона - СтартоваяПозиция + 1); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(ЧастьВыделяемая, ШрифтПодсветки, ЦветПодсветки)); СтартоваяПозиция = КонецДиапазона + 1; КонецЕсли; КонецЦикла; ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрока); Если СтартоваяПозиция <= ДлинаИсходнойСтроки Тогда// "хвост" без выделения Хвост = Сред(ИсходнаяСтрока, СтартоваяПозиция, ДлинаИсходнойСтроки - СтартоваяПозиция + 1); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(Хвост)); КонецЕсли; Возврат Новый ФорматированнаяСтрока(МассивРезультирующихСтрок); КонецФункции Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) СтрокаПоиска = СтрЗаменить(Параметры.СтрокаПоиска, """", "");// нормализация Если СтрокаПоиска <> "" И Параметры.Свойство("ВводПоСтрокеРасширенный") Тогда МаксимумСтрокРезультата = 30; МассивСловПоиска = СтрРазделить(СтрокаПоиска, " ", Ложь); КоличествоСловПоиска = МассивСловПоиска.Количество(); Если КоличествоСловПоиска > 0 Тогда СтандартнаяОбработка = Ложь; СписокВыбора = Новый СписокЗначений; Запрос = Новый Запрос; УсловияПоиска = ""; ПриоритетСортировки = ""; Для НомерСловаПоиска = 1 По КоличествоСловПоиска Цикл СловоПоиска = МассивСловПоиска[НомерСловаПоиска - 1]; ДлинаСловаПоиска = СтрДлина(СловоПоиска); Запрос.УстановитьПараметр("СловоПоиска" + НомерСловаПоиска, "%" + СловоПоиска + "%"); УсловияПоиска = УсловияПоиска + " | И Номенклатура.Наименование ПОДОБНО &СловоПоиска" + НомерСловаПоиска; ПриоритетСортировки = ПриоритетСортировки + СтрШаблон(" | КОГДА ПОДСТРОКА(Номенклатура.Наименование, 1, %1) = ""%2"" | ТОГДА %3", Формат(ДлинаСловаПоиска, "ЧГ="), СловоПоиска, НомерСловаПоиска); КонецЦикла; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ " + МаксимумСтрокРезультата + " | Номенклатура.Ссылка КАК Ссылка, | Номенклатура.Наименование КАК Наименование, | Номенклатура.ПометкаУдаления КАК ПометкаУдаления, | ВЫБОР" + ПриоритетСортировки + " | ИНАЧЕ 9 | КОНЕЦ КАК ПриоритетСортировки |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | ИСТИНА" + УсловияПоиска + " |УПОРЯДОЧИТЬ ПО | ПриоритетСортировки, Наименование"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СписокВыбора.Добавить(Новый Структура("Значение, ПометкаУдаления", Выборка.Ссылка, Выборка.ПометкаУдаления), ПодсветитьСлова(Выборка.Наименование, МассивСловПоиска)); КонецЦикла; ДанныеВыбора = СписокВыбора; КонецЕсли; КонецЕсли; КонецПроцедуры | ||
fisher 32 - 20.01.21 - 11:58 | Да, это на примере справочника "Номенклатура". | ||
Ёпрст 33 - 27.01.21 - 21:10 | (31) еще не смотрел.
А вот форматированную строку, с помощью этого метода не пробовал ? СтрНайтиИВыделитьОформлением | ||
fisher 34 - 28.01.21 - 11:08 | (33) Не пробовал, потому что в моем старом релизе ее еще нет :) Метод в 15 релизе добавили.
А так - да. Получается, что велосипед изобрел. Хотя, как посмотреть. СтрНайтиИВыделитьОформлением() не позволяет управлять оформлением ("искомые строки подсвечены стандартным образом"). Ну и в этой старой версии моей функции подсвечивается только первое вхождение. Вот доработанная версия: Функция ПодсветитьСлова(ИсходнаяСтрока, МассивСловПодсветки, Знач ШрифтПодсветки = Неопределено, Знач ЦветПодсветки = Неопределено) МассивРезультирующихСтрок = Новый Массив; Если ШрифтПодсветки = Неопределено Тогда ШрифтПодсветки = Новый Шрифт(,, Истина);// жирный КонецЕсли; Если ЦветПодсветки = Неопределено Тогда ЦветПодсветки = Новый Цвет(0, 153, 0);// светло-зеленый из стандартной подсветки ввода по строке КонецЕсли; ИсходнаяСтрокаНормализованная = НРег(ИсходнаяСтрока);// нормализация ДлинаИсходнойСтроки = СтрДлина(ИсходнаяСтрокаНормализованная);  // получим список диапазонов символов для подсветки СписокДиапазонов = Новый СписокЗначений; Для НомерСлова = 1 По МассивСловПодсветки.Количество() Цикл СловоПодсветки = НРег(МассивСловПодсветки[НомерСлова - 1]);// нормализация ПозицияНачалаСлова = 1; ДлинаСлова = СтрДлина(СловоПодсветки); Пока ПозицияНачалаСлова <> 0 И ПозицияНачалаСлова <= ДлинаИсходнойСтроки Цикл ПозицияНачалаСлова = СтрНайти(ИсходнаяСтрокаНормализованная, СловоПодсветки, , ПозицияНачалаСлова); Если ПозицияНачалаСлова > 0 Тогда МассивДиапазона = Новый Массив; МассивДиапазона.Добавить(ПозицияНачалаСлова); МассивДиапазона.Добавить(ПозицияНачалаСлова + ДлинаСлова - 1); СписокДиапазонов.Добавить(МассивДиапазона, Формат(ПозицияНачалаСлова, "ЧЦ=3; ЧВН=")); ПозицияНачалаСлова = ПозицияНачалаСлова + ДлинаСлова; КонецЕсли; КонецЦикла; КонецЦикла;  // отсортируем список диапазонов по возрастанию начал диапазонов СписокДиапазонов.СортироватьПоПредставлению();  // сформируем массив результирующих строк с разным оформлением (подсветкой) СтартоваяПозиция = 1; Для Каждого ЭлементДиапазона Из СписокДиапазонов Цикл НачалоДиапазона = ЭлементДиапазона.Значение[0]; КонецДиапазона = ЭлементДиапазона.Значение[1]; Если НачалоДиапазона > СтартоваяПозиция Тогда// часть строки без подсветки ЧастьБезВыделения = Сред(ИсходнаяСтрока, СтартоваяПозиция, НачалоДиапазона - СтартоваяПозиция); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(ЧастьБезВыделения)); СтартоваяПозиция = НачалоДиапазона; КонецЕсли; Если КонецДиапазона >= СтартоваяПозиция Тогда// часть строки с подсветкой ЧастьВыделяемая = Сред(ИсходнаяСтрока, СтартоваяПозиция, КонецДиапазона - СтартоваяПозиция + 1); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(ЧастьВыделяемая, ШрифтПодсветки, ЦветПодсветки)); СтартоваяПозиция = КонецДиапазона + 1; КонецЕсли; КонецЦикла; Если СтартоваяПозиция <= ДлинаИсходнойСтроки Тогда// "хвост" без выделения Хвост = Сред(ИсходнаяСтрока, СтартоваяПозиция, ДлинаИсходнойСтроки - СтартоваяПозиция + 1); МассивРезультирующихСтрок.Добавить(Новый ФорматированнаяСтрока(Хвост)); КонецЕсли; Возврат Новый ФорматированнаяСтрока(МассивРезультирующихСтрок); КонецФункции | ||
fisher 35 - 28.01.21 - 11:10 | Вообще, это очень странно. Добавить в платформу функцию СтрНайтиИВыделитьОформлением(), но при этом не дать возможности этим самым оформлением управлять. | ||
Ёпрст 36 - 28.01.21 - 13:30 | (35) ну да, могли бы добавить параметр оформления - цвет/шрифт/размер.. чего там еще штатненько можно в форматированную строку воткнуть..
Ну, хоть так |
|
Список тем форума |