|   |   | 
| 
 | v7: Обработка поля ввода и кнопки | ☑ | ||
|---|---|---|---|---|
| 0
    
        ВопросБот 22.07.15✎ 12:44 | 
        Не воткну как стандартно обработать следующий момент: у меня есть поле ввода, скажем, для поиска документа и рядом кнопка для поиска. Нужно иметь возможность искать как при нажатии на Enter в поле ввода, так и кнопкой. Проблема в том, что когда вешаю процедуру на оба этих элемента управления, то, при желании выполнить поиск кнопкой, процедура выполняется дважды: сначала при сходе с элемента управления поле ввода ("реквизит диалога"), затем при нажатии кнопки. Как этот момент правильно реализовать в 7-ке?     | |||
| 1
    
        Builder 22.07.15✎ 13:06 | 
        ВыполнятьФормулуТолькоПриИзменении(<?>);
 Синтаксис: ВыполнятьФормулуТолькоПриИзменении(<Режим>) Назначение: Установка режима выполнения формулы выбранного поля табличной части документа. Параметры: <Режим> - число: 1 - формула вызывается только при изменении значения поля, 0 - вызывается и при переходе между полями. Замечание: Доступ к методу возможен только в контексте Модуля формы через атрибут Форма. Подробнее см. в документации, глава 'Атрибуты и методы контекста Модуля формы' | |||
| 2
    
        ВопросБот 22.07.15✎ 13:17 | 
        (1) не понял, как это применить к (0)
 насколько я понял эта процедура только к табличной части относится | |||
| 3
    
        Builder 22.07.15✎ 13:21 | 
        (2) Ну значит не применяй :)     | |||
| 4
    
        ВопросБот 22.07.15✎ 13:26 | 
        (3) вроде бы задача-то стандартная должна быть. Может есть возможность отключить выполнение формулы при сходе с элемента управления? Только Enter чтобы работал?     | |||
| 5
    
        HawkEye 22.07.15✎ 13:28 | 
        (0) как программа должна понять что нажав Enter - ты не хочешь выполнять поиск?     | |||
| 6
    
        ВопросБот 22.07.15✎ 13:31 | 
        (5) на поле ввода повесил формулу. Хочу чтобы выполнялась только по Enter, а при сходе с элемента управления - не выполнялась.     | |||
| 7
    
        palpetrovich 22.07.15✎ 13:32 | 
        а так:
 Процедура ПриИзм(кн="") если кн="Кнопкой" тогда кн=""; возврат; конецесли //... КонецПроцедуры | |||
| 8
    
        ВопросБот 22.07.15✎ 13:32 | 
        +(6) хотя, можно оставить и выполнение при сходе с элемента управления, но тогда мне как-то нужно контролировать изменение значения, т.е. переменную модуля заводить чтоли?     | |||
| 9
    
        palpetrovich 22.07.15✎ 13:36 | 
        +(7) проверил, работает
 //******************************************* Процедура ИзмПоле(кн="") Если кн = "Тыцнуть" Тогда кн = ""; Возврат; КонецЕсли; Сообщить("ИзмПоле"); КонецПроцедуры | |||
| 10
    
        HawkEye 22.07.15✎ 13:39 | 
        (8) заведи переменную модуля     | |||
| 11
    
        ВопросБот 22.07.15✎ 13:41 | 
        (7)(9) это не поможет. Попробуй введи значение в поле и следом нажми кнопку - процедура выполнится дважды.     | |||
| 12
    
        ВопросБот 22.07.15✎ 13:41 | 
        (10) не хочется     | |||
| 13
    
        palpetrovich 22.07.15✎ 13:42 | 
        (11) мля, я в (9) проверил уже. естественно на поле ввода ИзмПоле(), на кнопку ИзмПоле("Тыцнуть")     | |||
| 14
    
        HawkEye 22.07.15✎ 13:51 | 
        (12) не заводи ))     | |||
| 15
    
        ВопросБот 22.07.15✎ 14:04 | 
        (13) разобрался, спасибо. Видимо, это то, что нужно.     | |||
| 16
    
        ВопросБот 22.07.15✎ 14:10 | 
        (15)+(13) нет, подожди, что-то тут не так. Чем твой код отличается от того, как если бы я просто не повесил никакого кода на кнопку?     | |||
| 17
    
        ВопросБот 22.07.15✎ 14:17 | 
        Вобщем просто убрал код с кнопки. В предыдущей реализации этот вариант не подходил, а теперь, пожалуй, оставлю так.     | |||
| 18
    
        palpetrovich 22.07.15✎ 14:21 | 
        (17) ну, ваще-т да, решение немного "от лукавого" :)
 и вообще, решение предполагает, что на форме более нет других элементов, Если есть, то при смене фокуса процедура сработает тоже | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |