Имя: Пароль:
1C
 
как установить признак изменения поля ввода?
, ,
0 DES
 
14.07.15
20:28
Такая проблема, есть поле ввода, на нем висит процедура ПриИзменении.
Если заполнить поле программно, то процедура не срабатывает при переходе по Ентер.
Как сымулировать интерактивный ввод в это поле ?
1 Мимохожий Однако
 
14.07.15
20:38
Вызови команду, которая лежит в процедуре ПриИзменении
2 DES
 
14.07.15
21:02
как я ее вызову при Нажатии Ентер в этом поле ?
3 DTXqueque
 
14.07.15
21:07
Ничего непонятно.

При нажатии энтер происходит вход в режим редактирования?
В какой момент пытаешь программно что-то изменить?
4 DES
 
14.07.15
21:13
есть поле:
1 вариант (рабочий) - в поле вводится текст, нажимается Ентер, выполняется функция ПриИзменении()
2 вариант, поле заполнено программно, нажимаем Ентер, ничего не происходит, така не срабатывает функция ПриИзменени() (а нужно чтоб сработала как в 1 варианте.)
5 Marine Band
 
14.07.15
21:15
ты вызываешь форму выбора и там нажимаешь энтер. Смотри обработка выбора
6 DES
 
14.07.15
21:17
не вызываю я форму выбора, данные УЖЕ ВНЕСЕНЫ !!
7 DTXqueque
 
14.07.15
21:17
Каша..

Так вызови ПриИзменении этого поля в тот момент, когда данные программно заполняешь..
8 DES
 
14.07.15
21:20
низя, пользователь регулирует момент Принятия данных, может быть он захочет их изменить?
9 DES
 
14.07.15
21:21
По идее мне нужно событие ВыходИзПоляВыбора()
10 DES
 
14.07.15
21:22
или поставить признак ЭтоПолеИзменено = Истина
11 DTXqueque
 
14.07.15
21:23
ПриОкончанииРедактирования?
12 DES
 
14.07.15
21:25
нет факта  РЕДАКТИРОВАНИЯ !
13 DTXqueque
 
14.07.15
21:25
(12) Так вход в режим редактирования должен быть.
14 Marine Band
 
14.07.15
21:26
не понятно что за энтер ))) в общем действительно каша
15 DES
 
14.07.15
21:29
(13) но он мне не нужен
16 Мимохожий Однако
 
14.07.15
22:51
Покажи код заполнения программно.
17 DES
 
14.07.15
23:14
(16) ПолеВвода1 = "0459632";
18 Бурулька
 
15.07.15
01:24
вызови при изменении поля
19 Сергиус
 
15.07.15
02:35
(0)Как вариант - при заполнении поля программно, делай изменение не самого значения, а свойства Выделенный текст.
ЭлементыФормы.ПолеВвода1.ВыделенныйТекст = "1" к примеру.
После этого в обработчике ПриИзменении смотри, если Выделенный текст не пустая и не равна ПолеВвода1.Значение, то присваивай ПолеВвода1.Значение = ЭлементыФормы.ПолеВвода1.ВыделенныйТекст.
20 mszsuz
 
15.07.15
02:37
Тоже столкнулся с этим неудобством. В 7.7 формула в реквизите на форме срабатывает всегда, независимо от изменения. В 8 не нашел аналога.
21 DES
 
15.07.15
08:12
(19) а разве сработает ПриИзменении ?
22 Остап Сулейманович
 
15.07.15
08:15
(20) Аналог в 8-е :
Синтаксис:

ОбновлениеОтображения()
Описание:

Возникает при обновлении формы или при изменении данных формы.
23 DES
 
15.07.15
08:18
(22) ну вот как это  заюзать ?
24 Остап Сулейманович
 
15.07.15
08:24
(23) Тебе это вообще не нужно. (В контексте твоего вопроса).
Тебе уже несколько раз сказали что нужно делать.

Как есть сейчас :

Процедура ПолеИмяРек1ПриИзменении(Элемент)
    ДействияПриИзмененииПоляИмяРек1;
КонецПроцедуры

Вызывается один раз при интерактивном изменении поля. При программном изменении соответственно ничего не происходит.

Нужно так :

Процедура ПриИзмененииЗначенияПоляИмяРек1()
    ...
КонецПроцедуры

Процедура ПолеИмяРек1ПриИзменении(Элемент)
    ПриИзмененииЗначенияПоляИмяРек1();
КонецПроцедуры

В любом другом месте кода :
ИмяРек1 = НовоеЗначение;
ПриИзмененииЗначенияПоляИмяРек1();
25 Остап Сулейманович
 
15.07.15
08:27
+ (24) А заюзать ОбновлениеОтображения проще простого - вынести туда весь код для формирования внешнего вида формы. И все. Но заюзать там (внутри) изменение данных - это вызвать каскад ОбновлениеОтображения, который может завалить всю систему. А тем более вызов каких либо интерактивных вопросов, предупреждений... Только формирование внешнего вида.
26 DES
 
15.07.15
09:25
(24) Нельзя делать
ИмяРек1 = НовоеЗначение;
ПриИзмененииЗначенияПоляИмяРек1();
так как это уже будет выполнение действий не санкционированных пользователем. (В этом то вся и загвоздка, если кто не понял.)
27 Сергиус
 
15.07.15
12:43
(21) Сработает, попробуй сам.
28 Сергиус
 
15.07.15
12:46
+(27)Т.е. в коде пишешь ЭлементыФормы.ПолеВвода1.ВыделенныйТекст = "1", текст в поле ввода меняется(значение остается тоже), а когда в поле ввода пользователь нажмет Enter, то тут же сработает ПолеВвода1ПриИзменении.
29 DTXqueque
 
15.07.15
13:03
Почему когда пользователь что-то вводит в поле, заполнение срабатывает, а когда ты программно его меняешь, ты ждём ентера от пользователя, хотя изменение уже было?
30 Сергиус
 
15.07.15
13:07
(29)Потому что ПриИзменении это интерактивное событие.
31 DTXqueque
 
15.07.15
13:08
(30) Авто хочет такого поведения. Это глупо.
32 Сергиус
 
15.07.15
13:12
(31)Почему глупо - не всегда желания разработчика совпадают на 100% с возможностями системы. Поэтому надо искать обходные пути)
33 DTXqueque
 
15.07.15
13:12
(32) Система позволяет вызвать ПриИзменении() после программного изменения поля.
34 Сергиус
 
15.07.15
13:14
(33)Именно самое событие? Понятно, что всегда можно вызвать процедуру отдельно.
35 Сергиус
 
15.07.15
13:17
+(34)Тут просто сложность в том, что это событие должен инициировать пользователь.
36 DTXqueque
 
15.07.15
13:24
(35) Дуб, орех или мочало - начинаем все сначала!
Отсюда и (29)
37 Сергиус
 
15.07.15
13:36
(36)Пользователь должен подтвердить изменение(или ввести другое значение)
38 HawkEye
 
15.07.15
13:38
(26) как пользователь санкционирует это:
ИмяРек1 = НовоеЗначение;
?
39 DTXqueque
 
15.07.15
13:39
Мсье знает толк в извращениях..
Интересно, в какой момент происходит программная установка значения.
Для таких дел целесообразно использовать кнопки
40 HawkEye
 
15.07.15
13:40
(23) на форму положить текст и в него прописать функцию, но есть нюансы, поэтому ответь сначала на (38)