Имя: Пароль:
1C
1С v8
Программно установить текущий элемент формы. Платформа 8.3.5
,
0 kdenis
 
18.11.14
10:19
Прошу помощи в решении следующей задачи.
Конфигурация самописная. На управляемой форме есть элемент, привязанный к строковому реквизиту формы. Пользователь вводит в этот элемент данные, нажимает Enter, в обработчике ПриИзменении выполняется некий код. Необходимо сделать так, чтобы после выполнения кода данные в элементе удалялись и фокус оставался на нем же.

Теперь сама проблема:
На платформе 8.3.4 задача была решена следующим кодом:

...
ЭтаФорма.РеквизитФормы = ""; // удалил данные
ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.РеквизитФормы; // установил фокус

В некоторый момент времени Бухгалтерия потребовала платформу 8.3.5. Чтобы не плодить серверов, свою конфигурацию тоже запустил на 8.3.5. После этого приведенный выше код работать перестал.

Тех кто сталкивался с подобной проблемой и нашел пути решения, прошу отписаться. Тем, кто может воспроизвести у себя такой код и отпишется о результатах, тоже буду благодарен.
1 DS
 
18.11.14
10:48
В каком обработчике данный код?
2 Обработка
 
18.11.14
10:57
Я сделал обработку Релиз 1с8.3.5.1186

Все нормально сработало.
3 Обработка
 
18.11.14
10:58
+ (2)
&НаКлиенте
Процедура Реквизит1ПриИзменении(Элемент)
    ЭтаФорма.Реквизит1 = ""; // удалил данные

    ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.Реквизит1; // установил фокус

КонецПроцедуры
4 kdenis
 
18.11.14
11:07
(3) Спасибо. Релиз тот же, но этот код не работает. Грешил на платформу, теперь сектор поиска расширился.
5 kdenis
 
18.11.14
11:07
(1) МойРеквизитПриИзменении
6 kdenis
 
18.11.14
11:33
(3) Обработка, скажи пожалуйста в твоей обработке помимо этого элемента есть на форме еще какие-нибудь? И не располагается ли он крайним?

Создал чистую базу, приведенный код не работает все равно. Такое ощущение, что платформенный обходчик элементов имеет приоритет по отношению к
ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.Реквизит1;

Как ни пытался, фокус передается к следующему элементу.
7 DS
 
18.11.14
11:45
Не пойму, как это должно работать. В "ПриИзменении" текущим элементом и так является редактируемый. А перемещение на другой элемент по идее должно осуществляться после завершения процедуры.
8 kdenis
 
18.11.14
11:51
Видимо не правильно выразил мысль.
Не работает именно строка кода:

ЭтаФорма.ТекущийЭлемент = ЭтаФорма.Элементы.Реквизит1;

которая должна после выхода из процедуры оставлять курсор на редактируемом элементе, а не переходить к следующему.

Еще одна поправочка: попробовал на платформе 1119, работает так, как задумано. Значит проблема появилась при переходе с 1119 на 1186, а не с 8.3.4 на 8.3.5, как писал ранее.
9 DS
 
18.11.14
11:53
Отладчик что показывает? До этой строчки и после нее? Откуда сведения что "не работает"?
10 Обработка
 
18.11.14
11:55
(6) Я на всякий случай добавил еще реквизит

сработало.
11 Обработка
 
18.11.14
11:55
(0) У тебя реквизит формы имеет путь к данным?
12 kdenis
 
18.11.14
14:00
(9) Отладчик и до строчки и после строчки показывает, что в ЭтаФорма.ТекущийЭлемент содержится нужное поле формы.

Сведения что "не работает" от пользователей.
13 kdenis
 
18.11.14
14:04
(11) Реквизит формы не может иметь пути к данным - это и есть данные.
То что мне нужно - именно реквизит формы (не объекта), связанный с полем формы.

Просьба, можешь воспроизвести следующее:
1. разместить на форме поле, связанное с реквизитом формы.
2. сразу после этого поля разместить элемент, связанный с табличной частью объекта.

Сработает ли обработчик в такой связке.
14 Обработка
 
18.11.14
16:47
(13) Вот все работает

https://yadi.sk/d/nNm3CPT1cnT6r
15 Управление торговлей
 
18.11.14
17:04
у меня вылез такой же глюк на последней платформе
сделал позиционирование в обработке ожидания
16 DS
 
19.11.14
11:00
(8) Не должна она срабатывать после завершения процедуры. С чего бы это? Код срабатывает только в момент выполнения этого кода.
Если описываемое вами поведение было в 1119, то это просто ошибка и в последующих релизах ее исправили.
17 kdenis
 
19.11.14
15:43
(16) Мы скорей всего не понимаем друг друга. Я хочу сделать так, чтобы после редактирования элемента формы (ввода данных и нажатия Ентер) фокус ввода оставался на этом элементе, а не переходил на следующий. Мой код реализовывал это. После обновления платформы код работать перестал.

Если это ошибка, которую исправили это, то для какой тогда цели у управляемой формы есть доступное для записи свойство "ТекущийЭлемент"?
18 kdenis
 
19.11.14
16:27
(15) Напиши версию платформы, на которой у тебя вылез глюк.
19 Управление торговлей
 
19.11.14
19:03
(18) 8.3.5.1248
Ошибка? Это не ошибка, это системная функция.