Имя: Пароль:
1C
1C 7.7
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) ну, ваще-т да, решение немного "от лукавого" :)
и вообще, решение предполагает, что на форме более нет других элементов, Если есть, то при смене фокуса процедура сработает тоже
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан