|
Обработчик "АвтоПодбор" поля ввода | ☑ | ||
---|---|---|---|---|
0
yc4
29.11.12
✎
12:39
|
Господа специалисты, помогите разобраться!
Описание ситуации: В управляемой форме есть реквизит "ПолеВводаПоиска" - Строка(0) и "СписокНайденных" - ТаблицаЗначений. Оба расположены на форме. Вид строкового реквизита на форме - поле ввода. Для него определен обработчик "АвтоПодбор": &НаКлиенте Процедура ПолеВводаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; СписокНайденных.Очистить(); КонецПроцедуры Суть проблемы: После ввода символов в "ПолеВводаПоиска" и срабатывания обработчика АвтоПодбор текст в поле очищается. Если закомментировать строку "СписокНайденных.Очистить();" текст не пропадает. Вопрос: Как сделать, чтобы текст не пропадал? |
|||
1
Goggy
29.11.12
✎
12:42
|
>>Если закомментировать строку "СписокНайденных.Очистить();" текст не пропадает.
>>Как сделать, чтобы текст не пропадал? Такие высказывания у меня вызывают когнитивный диссонанс... |
|||
2
yc4
29.11.12
✎
13:01
|
Кто-нибудь может что-то конструктивное ответить?
|
|||
3
yc4
29.11.12
✎
15:13
|
В каких ситуациях вы используете обработчик события "АвтоПодбор", помимо формирования собственного списка выбора?
|
|||
4
Buster007
29.11.12
✎
15:19
|
а теперь все сначала и на русском)
|
|||
5
yc4
29.11.12
✎
15:27
|
Хочу реализовать такой механизм: Пользователь вводит в поле текст. По мере ввода происходит поиск данных и они отображаются в таблице.
Для этого использую обработчик АвтоПодбор в котором происходит поиск и отображение найденных данных по введенному фрагменту текста. Все работает, но текст в поле ввода всегда очищается. В этом проблема. |
|||
6
5 Элемент
29.11.12
✎
15:36
|
Скорее всего вот из-за этого
В обработчике события АвтоПодбор нельзя использовать серверные методы формы с директивой компиляции НаСервере. |
|||
7
yc4
29.11.12
✎
15:41
|
(6) В моем примере в первом сообщении нет вызовов серверных процедур.
|
|||
8
yc4
29.11.12
✎
17:19
|
В ходе экспериментов обнаружил интересную вещь. Если сделать так, то будет постоянный вывод текущего времени (получится бесконечный цикл):
&НаКлиенте Процедура ПолеВводаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) Сообщить(Формат(ТекущаяДата(), "ДФ=мм:сс")); Элементы.ПолеВводаПоиска.ВыделенныйТекст = Текст; КонецПроцедуры |
|||
9
5 Элемент
29.11.12
✎
17:25
|
(7) Уверен? включи показатели производительности и посмотри есть ли вызовы сервера. Иногда что-то не очевидно :)
|
|||
10
regniws
29.11.12
✎
17:26
|
ОбработкаПолученияДанных выбора для ссылочных типов конечно же знаем?
|
|||
11
yc4
29.11.12
✎
17:27
|
(10) Ога. Только у меня строка - (0)
|
|||
12
yc4
29.11.12
✎
17:35
|
(9) В синтакс-помощнике черным по белому написано - "... нельзя использовать серверные методы формы с директивой компиляции НаСервере.", и не сказано про неявные вызовы сервера. Показатели производительности включены - нет вызова сервера.
|
|||
13
yc4
29.11.12
✎
17:48
|
Ну почему так все несправедливо!!!????
В обычном режиме все работает как надо. Поле ввода не очищается. |
|||
14
regniws
29.11.12
✎
17:57
|
Зачем вообще СписокНайденных очищается?
|
|||
15
yc4
29.11.12
✎
17:59
|
(14) Чтобы потом заполниться найденными значениями по введенной строке в поле ввода поиска
|
|||
16
regniws
29.11.12
✎
18:12
|
а ДанныеВыбора где заполняются?
|
|||
17
yc4
29.11.12
✎
19:44
|
ДанныеВыбора не заполняю. Мне не нужно заполнять стандартный список выбора. СписокНайденных - это таблица значений, которая заполняется при срабатывании обработчика АвтоПодбор.
|
|||
18
regniws
30.11.12
✎
09:13
|
(17) какой-то бред. АвтоПодбор это событие, с помощью которого можно заполнить ДанныеВыбора, из которых пользователь выберет то, что ему выпало в этом списке ДанныеВыбора.
|
|||
19
yc4
30.11.12
✎
09:16
|
(18) Спорить не буду. Все верно. Но это при стандартной обработке. Такое описано в букварях. Читать я умею и не стал бы обращаться за помощью в таком случае.
|
|||
20
regniws
30.11.12
✎
09:37
|
(19) ну если вы используете процедуры и функции не по назначению, скажем так, платформа не всегда может однозначно отработать.
|
|||
21
yc4
30.11.12
✎
09:53
|
Очень жаль, что у нас вами такая платформа, если она по разному отрабатывает события в управляемом и обычном режиме.
|
|||
22
regniws
30.11.12
✎
11:23
|
(21) у меня прекрасная платформа, которая прекрасно работает в сценариях, которые в ней предусмотрены. Обижаться на то, что моя машина не может вылезти из кучи снега, потому что рассчитана на быструю езду по автобанам - я бы не стал. Так же и тут. Есть сценарий - он реализован, отлажен и работает. Если используется какой-то хак - это уже не проблемы платформы.
У меня есть похожий сценарий и у меня все работает, только я руками не заполняю таблицы, а устанавливаю отборы на демонический список, никаких очисток не происходит, все гуд. |
|||
23
yc4
30.11.12
✎
11:57
|
(22) Платформа - 8.2.17.143. Накидал пример:
&НаКлиенте Процедура ПолеВводаПоискаАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) УсловиеОтбора = ДинСписок.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); УсловиеОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование"); УсловиеОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; УсловиеОтбора.ПравоеЗначение = Текст; КонецПроцедуры Отбор устанавливается. Текст в поле ввода очищается. |
|||
24
regniws
30.11.12
✎
12:08
|
(23) щас у себя проверю на 17ой
|
|||
25
regniws
30.11.12
✎
12:14
|
(23) в тонком и веб у меня все норм.
|
|||
26
regniws
30.11.12
✎
12:15
|
у меня так:
&НаКлиенте Процедура Наименование1ПриИзменении(Элемент) УстановитьОтбор("Наименование", Наименование); КонецПроцедуры &НаКлиенте Процедура УстановитьОтбор(ИмяЭлемента, Значение) ПолеСКД = Новый ПолеКомпоновкиДанных(ИмяЭлемента); ЭлементОтбора = Неопределено; Для Каждого Элемент Из Список.Отбор.Элементы Цикл Если ТипЗнч(Элемент) = Тип("ЭлементОтбораКомпоновкиДанных") Тогда Если Элемент.ЛевоеЗначение = ПолеСКД Тогда ЭлементОтбора = Элемент; Прервать; КонецЕсли; КонецЕсли; КонецЦикла; Если ЭлементОтбора = Неопределено Тогда ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбора.ЛевоеЗначение = ПолеСКД; КонецЕсли; ЭлементОтбора.Использование = НЕ ПустаяСтрока(СокрЛП(Значение)); Если НЕ ЭлементОтбора.Использование Тогда Возврат; КонецЕсли; ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит; ЭлементОтбора.ПравоеЗначение = СокрЛП(Значение); КонецПроцедуры |
|||
27
regniws
30.11.12
✎
12:22
|
В толстом тоже все норм
|
|||
28
yc4
30.11.12
✎
12:22
|
(25) Проверяли мой пример?
(26) В этом примере обработчик ПриИзменении, а меня все-таки интересует АвтоПодбор |
|||
29
regniws
30.11.12
✎
12:24
|
(28) да, виноват, соседнюю процедуру скопировал, но сути не меняет
&НаКлиенте Процедура Наименование1АвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) УстановитьОтбор("Наименование", Текст); КонецПроцедуры нет, конкретно твой не пробовал, но отличий на взгляд не вижу, надо искать другие отличия |
|||
30
regniws
30.11.12
✎
12:26
|
щас скриншоты настройки поля скину
|
|||
31
regniws
30.11.12
✎
12:29
|
||||
32
yc4
30.11.12
✎
12:39
|
(31) Отличий минимум: у меня нет обработчика ПриИзменении и положение заголовка Авто.
|
|||
33
yc4
30.11.12
✎
12:51
|
Ничего не понимаю... В другой базе запускаю похожую обработку и работает как надо.
|
|||
34
yc4
30.11.12
✎
13:07
|
(33) Правда база файловая
|
|||
35
regniws
30.11.12
✎
13:18
|
(34) я и в клиент-сервере и в файловой проверил, все ок, работает. Странно, действительно странно
|
|||
36
yc4
30.11.12
✎
13:37
|
(35) тоже проверил на другой базе клиент-серверной. Там все ок. Похоже дело в конкретной базе. Буду с ней экспериментировать.
|
|||
37
yc4
30.11.12
✎
14:47
|
(35) Режим совместимости случайно не включен? Когда в своей базе включаю режим совместимости 8.2.13, то все ок.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |