|   |   | 
| 
 | Обработчик "АвтоПодбор" поля ввода | ☑ | ||
|---|---|---|---|---|
| 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, то все ок.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |