Событие при смене активного элемента формы

1. Evgeniy 106 17.01.25 18:48 Сейчас в теме
День добрый, коллеги.
Появилась необходимость помнить предыдущий активный элемент на форме (упр)
Есть ли какой-нибудь общий механизм формы (событие), который активируется при смене активного элемента формы чтобы из него получать текущий активный элемент формы?
Прописывать такое в каждом элементе формы очень не хочется, их очень много.
По теме из базы знаний
Найденные решения
16. miniogn 44 23.01.25 21:58 Сейчас в теме
(9) Вот что сейчас откопал.
Если разместить кнопки в командной панели в выпадающем подменю, то текущий элемент не пропадает. То есть работает так, как тебе надо. Просто команды расположенные в командной панели не проверял, но с меню точно работает.

&НаКлиенте
Процедура КомандаВставитьСимвол(Команда)
	Перем Текст;
	
	Если Команда = Команды.КомандаВставитьВопрос Тогда
		Текст = "?";
	ИначеЕсли Команда = Команды.КомандаВставитьВосклицательный Тогда
		Текст = "!";
	КонецЕсли;
	
	Элемент = ЭтаФорма.ТекущийЭлемент;
	Если Элемент = Элементы.Строка1 или Элемент = Элементы.Строка2 Тогда
		ВставитьТекст(Элемент, Текст);
	КонецЕсли;
	
КонецПроцедуры
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107191 17.01.25 20:56 Сейчас в теме
(1)
Прописывать такое в каждом элементе формы очень не хочется, их очень много.
Ты программист или где? Пропиши программно. Циклы в школе проходил?
3. miniogn 44 17.01.25 22:08 Сейчас в теме
Такого события нет. На для строк таблицы есть. Обычно этого за глаза хватает. Лучше напиши, задачу подробнее, возможно подскажут более подходящее решение.
user1863362; SlavaKron; +2 Ответить
4. Evgeniy 106 17.01.25 23:07 Сейчас в теме
(3) если коротко, то задача следующая:
предыдущий активный элемент формы запоминать и при определенных нажатиях на кнопки формы вносить изменения в этот предыдущий элемент формы, так как при нажатии на кнопку формы текущим элементом становится нажимаемая кнопка формы.
5. miniogn 44 18.01.25 00:03 Сейчас в теме
(4) Не стало понятнее. Как вариант для элементов, ставить рядом кнопки, которые только этот элемент и меняют.
9. Evgeniy 106 23.01.25 16:05 Сейчас в теме
(5) на форме есть несколько реквизитов текстовых и всего один ряд уникальных кнопок.
К каждой кнопке привязан один специфичный символ.
Нужно чтобы при нажатии на кнопку мышкой, символ назначенный этой кнопке, записывался в текстовый реквизит, который был активен до нажатия кнопки.
Так надеюсь понятнее написал.

Дублировать ряд кнопок под каждый текстовый реквизит не получиться.
Перевести все реквизиты в таблицу тоже не получится.
15. miniogn 44 23.01.25 21:40 Сейчас в теме
(9) На попробовать такой вариант. Если символы надо вставлять не прям очень часто и можно это делать двумя нажатиями.
То можно попробовать сделать рядом с реквизитами выпадающие списки для выбора нужного символа.
Или открывать форму с таблицей символов по нажатии кнопки Открыть в реквизитах.
20. Evgeniy 106 29.01.25 13:59 Сейчас в теме
(19)
(15) Кнопки часто используются. Пользователи не согласятся дважды кликать на них.
16. miniogn 44 23.01.25 21:58 Сейчас в теме
(9) Вот что сейчас откопал.
Если разместить кнопки в командной панели в выпадающем подменю, то текущий элемент не пропадает. То есть работает так, как тебе надо. Просто команды расположенные в командной панели не проверял, но с меню точно работает.

&НаКлиенте
Процедура КомандаВставитьСимвол(Команда)
	Перем Текст;
	
	Если Команда = Команды.КомандаВставитьВопрос Тогда
		Текст = "?";
	ИначеЕсли Команда = Команды.КомандаВставитьВосклицательный Тогда
		Текст = "!";
	КонецЕсли;
	
	Элемент = ЭтаФорма.ТекущийЭлемент;
	Если Элемент = Элементы.Строка1 или Элемент = Элементы.Строка2 Тогда
		ВставитьТекст(Элемент, Текст);
	КонецЕсли;
	
КонецПроцедуры
Показать
17. Evgeniy 106 27.01.25 16:59 Сейчас в теме
(16) Супер, отличный вариант, спасибо. Жаль что у меня не таблица а разрозненные реквизиты формы.
Но попробую может удастся использовать кнопки Командной панели или что-то похожее что не перехватывает активность формы на себя.
18. antz 27.01.25 17:25 Сейчас в теме
(17) Чем не устраивает вариант с автоподбором?
21. Evgeniy 106 29.01.25 14:01 Сейчас в теме
(18) что за вариант с автоподбором?
22. antz 29.01.25 14:36 Сейчас в теме
19. miniogn 44 27.01.25 17:32 Сейчас в теме
(17) Пример в (16) для без таблицы
23. Evgeniy 106 29.01.25 18:37 Сейчас в теме
(19)
(16) Еще раз спасибо.
Использовал эту возможность что кнопки командной панели не перехватывают на себя активный элемент формы.
Правда пришлось логику переписать создания этих кнопок.
Но в целом вроде работает.
За помощь могу предложить скачать с этого сайта что-нибудь полезное.
6. user2107191 18.01.25 00:05 Сейчас в теме
(4) Обработчик ожидания, записывающий в переменную текущий элемент формы
10. Evgeniy 106 23.01.25 16:07 Сейчас в теме
(6) Обработчик ожидания держу в уме, но у него есть минусы.
он имеет таймаут минимум секунда. И есть вероятность что пользователь совершит действия меньше чем за секунду.
+ нагрузка на форму
14. user2107191 23.01.25 17:22 Сейчас в теме
(10) Кто тебе назвиздел про 1 секунду?
7. user1863362 18.01.25 09:48 Сейчас в теме
(4) Это отвратительная логика.

Предыдущим элементом перед нажатием кнопки может быть что угодно, а не только твой целевой элемент. В этом случае кнопка будет нерабочей, а пользователь будет поминать программиста разными словами.

Думай ещё.
8. SlavaKron 18.01.25 10:26 Сейчас в теме
(4) Какого типа элементы формы, которые нужно запоминать? Возможно, это проще реализовать через таблицу формы.
11. Evgeniy 106 23.01.25 16:09 Сейчас в теме
(8) нет, через таблицу реализовать не получиться, текстовые реквизиты разбросаны по форме и их не собрать в одной таблице.
12. hesseL 23.01.25 16:47 Сейчас в теме
Попробуй воспользоваться событием элемента формы - АвтоПодбор. Даже при простой активизации поля событие выполняется. Запиши оттуда имя элемента формы в реквизит формы, а затем при нажатии кнопки с символом получи реквизит объекта по имени из сохраненного значения реквизита и допиши в него символы.

Придётся для всех элементов, в которые ты записываешь, сделать такое событие.

Объект[ИмяПоляФормыИзРеквизита] = Объект[ИмяПоляФормыИзРеквизита] + СимволСКнопки;
13. hesseL 23.01.25 17:03 Сейчас в теме
(12) Кстати, если у тебя много элементов формы, то ты можешь их затолкать в массив, затем обойти его и каждому элементу из коллекции установить действие - Элементы[ИмяЭлемента].УстановитьДействие("АвтоПодбор", "ОбщаяПроцедураАвтоПодбор");

У тебя получится, что для всех твоих элементов одно событие, которое будет отрабатывать на все эти элементы, куда нужно значение писать, и оно будет тебе последний активированный элемент в переменную записывать, а дальше уже как выше написал
antz; VyacheslavShilov; +2 Ответить
24. Evgeniy 106 29.01.25 19:53 Сейчас в теме
(13) Чтобы корректно отработало нужно всем элементам формы присвоить данное действие.
Иначе не всегда информация по текущему элементу будет актуальная.
Не уверен что в дальнейшем по какому-нибудь элементу не потребуется данное действие для другой цели.
Пока решил свою задачу путем создания кнопок в командной панели.
Но всё равно спасибо за помощь.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот