|
Поиск и переход на строку поиска. | ☑ | ||
---|---|---|---|---|
0
fantomask
13.10.16
✎
06:25
|
есть в табличной части неуправляемых форм штатный механизм поиска при вводе. Что то подобное мне надо реализовать на тонком клиенте. Написал кое какой код, вот только беда, при вводе постоянно затираются буквы что ввели, из за чего результаты поиска постоянно скачут.
Написал следующий код: &НаКлиенте Процедура ТоварыНаименованиеТовараИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка) СтандартнаяОбработка=ложь; Если ПустаяСтрока(Текст) ТОгда ТекДанные = Элементы.Товары.ТекущиеДанные; ТекДанные.НаименованиеТовара = ПолучитьНаименованиеТОвара(ТекДанные.Номенклатура); товары.Сортировать("НаименованиеТовара"); Элементы.Товары.ТекущаяСтрока=товары[0]; Элементы.Товары.ОтборСтрок = Неопределено; Иначе найденнаяСтрока = СделатьОтбор(Текст); Стр = новый Структура; Стр.Вставить("НаименованиеТовара",найденнаяСтрока); Строки = товары.НайтиСтроки(Стр); Если Строки.Количество()>0 Тогда Элементы.Товары.ТекущаяСтрока = Строки[0].НомерСтроки; КонецЕсли; //Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура(Стр); КонецЕсли; КонецПроцедуры &НаСервере Функция СделатьОтбор(Текст) МассивТип = новый Массив; МассивТип.Добавить(Тип("Строка")); КвСтрока = новый КвалификаторыСтроки(100); Описание = новый ОписаниеТипов(МассивТип,,,,КвСтрока); ТЗ = новый ТаблицаЗначений; ТЗ.Колонки.Добавить("НаименованиеТовара",Описание); Для каждого эл из товары ЦИкл НС = ТЗ.Добавить(); ЗаполнитьЗначенияСвойств(НС,эл); КонецЦикла; Построитель = новый ПостроительЗапроса; Построитель.ИсточникДанных = новый ОписаниеИсточникаДанных(ТЗ); ТОтбор = Построитель.Отбор.Добавить("НаименованиеТовара"); Тотбор.ВидСравнения=ВидСравнения.Содержит; ТОтбор.Значение = текст; ТОтбор.Использование=Истина; Построитель.Выполнить(); Результат = Построитель.Результат.Выгрузить(); //Результат.Сортировать("НаименованиеТовара"); Если Результат.Количество()>0 Тогда Возврат Результат[0].НаименованиеТовара; КонецЕсли; КонецФункции |
|||
1
DrZombi
гуру
13.10.16
✎
07:19
|
(0) На тонком клиенте все работает через Менеджер того справочника, который ты редактируешь...
Метод "ОбработкаПолученияДанныхВыбора" СправочникМенеджер.<Имя справочника>.ОбработкаПолученияДанныхВыбора (CatalogManager.<Имя справочника>.ChoiceDataGetProcessing) СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>) ОбработкаПолученияДанныхВыбора (ChoiceDataGetProcessing) Синтаксис: ОбработкаПолученияДанныхВыбора(<ДанныеВыбора>, <Параметры>, <СтандартнаяОбработка>) Параметры: <ДанныеВыбора> Тип: СписокЗначений. В обработчике можно сформировать и передать в этом параметре данные для выбора. При этом параметр <СтандартнаяОбработка> должен быть установлен в Ложь. В элемент списка значений можно помещать не только конкретное значение, но и структуру. Анализ значения на предмет того, является ли она структурой или просто значением, используется полем ввода управляемой формы в случаях: Выбора из списков, возвращаемых событиями поля ввода; Выбора из списка в поле ввода, содержащегося в свойстве СписокВыбора. В случае, если в значение элемента списка значений используется Структура, она должна иметь следующий состав свойств: Значение (Value) – собственно значение (обязательный элемент структуры); ПометкаУдаления (DeletionMark) – (Булево) содержит признак пометки значения на удаление. Если Истина, то при выборе такого элемента из списка значений выдаст стандартное предупреждение; Предупреждение (Warning) – (Строка) содержит текст предупреждения, которое будет показано при выборе элемента из списка значений. <Параметры> Тип: Структура. Содержит параметры выбора. Их можно дополнительно настроить в обработчике события. Структура, в которой обязательно должны содержаться следующие ключи: СтрокаПоиска (SearchString) - строка, используемая при поиске данных, Неопределено - осуществляется быстрый выбор; Отбор (Filter) - отбор, используемый при поиске данных; ВыборГруппИЭлементов (ChoiceFoldersAndItems) - указывается использование групп и элементов (только для иерархических данных); тип ИспользованиеГруппИЭлементов; СпособПоискаСтроки (StringSearchMode) - указывается способ поиска при вводе по строке; тип СпособПоискаСтрокиПриВводеПоСтроке; параметр может отсутствовать; ПолнотекстовыйПоиск (FullTextSearch) - указывается необходимость использования полнотекстового поиска при вводе по строке; тип - ПолнотекстовыйПоискПриВводеПоСтроке; параметр может отсутствовать; РежимПолученияДанныхВыбора (ChoiceDataGettingMode) - указывает режим запуска поиска. Тип РежимПолученияДанныхВыбораПриВводеПоСтроке; параметр может отсутствовать. <СтандартнаяОбработка> Тип: Булево. В данный параметр передается признак выполнения стандартной (системной) обработки события. Если в теле процедуры-обработчика установить данному параметру значение Ложь, стандартная обработка события производиться не будет. Значение по умолчанию: Истина. Описание: Возникает на сервере перед стандартным формированием списка при вводе по строке, автоподборе текста и быстром выборе, а также при выполнении метода ПолучитьДанныеВыбора. -------------------------------------------------------------------------------- Методическая информация |
|||
2
DrZombi
гуру
13.10.16
✎
07:22
|
Параметры можно послать через Элемент на форме, "Параметры выбора ПараметрыВыбора, ChoiceParameters"
Оформляешь там свой параметр и в "ОбработкаПолученияДанныхВыбора" его обработываешь, как надо. Минус!... Если запрос должен быть быстрым. Больше 50-ти элементов все ровно не отобразится, так что не имеет смысла искать больше... |
|||
3
DrZombi
гуру
13.10.16
✎
07:23
|
+ Параметр можно задавать произвольный, это необходимо, что бы выборка работала в штатном режиме из других форм :)
|
|||
4
DrZombi
гуру
13.10.16
✎
07:25
|
+ Не обессудь, если не угадал с ответом, утро :)
|
|||
5
fantomask
13.10.16
✎
09:56
|
(4) ничего, сам писал пост утром, не уточнил некоторые моменты.
Есть на форме обработки таблица значений, в эту таблицу заполняются товары с ценами и остатками, Вот по колонке наименованиетовара я делаю поиск. |
|||
6
fantomask
13.10.16
✎
10:45
|
Есть мысли?
|
|||
7
FIXXXL
13.10.16
✎
10:47
|
(6) НайтиСтроки, ИдентификаторСтроки, ТекущаяСтрока = НайденныйИДСтроки
|
|||
8
FIXXXL
13.10.16
✎
10:48
|
примечание: НайтиСтроки() неявно вызывает Сервер
|
|||
9
fantomask
13.10.16
✎
11:21
|
Найти строки не будет отрабатывать при неявном поиске. Допустим товар линекс. При вводе лин он ничего не найдет...
|
|||
10
FIXXXL
13.10.16
✎
11:28
|
(9) будет, если напишешь :) тебе много колонок этим поиском надо обеспечить?
как вариант: НаСервере выгружаешь твою ТЗ с формы в ТЗ, ТЗ в запрос, запросом получаешь Номенклатуру по Название СОДЕРЖИТ и уже эту номенклатуру в НайтиСтроки короче, что бы найти строку - надо найти строку :) |
|||
11
FIXXXL
13.10.16
✎
11:40
|
(10) тут еще возникает момент "несколько одинаковых строк"
|
|||
12
fantomask
13.10.16
✎
14:29
|
(10) С содержит тоже не годится, потому что есть товар ЛеоВИТ и есть товар ВИТрум. в такое случае поиск тоже будет криво отрабатывать.
НайтиСтроку из ТЗ работает только в случае когда название полностью соответствует значению колонки. Эхх придется костылить и в процессе додумывать |
|||
13
FIXXXL
13.10.16
✎
15:05
|
(12) а как работает поиск в толстой форме? возвращает первую строку по вхождению, так и тут получится
тут надо эксперимент, что бы проверить, что порядок строк нигде не слетит и вернется точно первая по порядку в ТЗ строка |
|||
14
FIXXXL
13.10.16
✎
15:08
|
(13) сорри не то
тебе ж нужен поиск СНАЧАЛА строки, тогда ПОДОБНО СтрокаПоиска% % - только на хвосте параметра в запросе, попробуй, должно взлететь |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |