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