При разработке интерфейсов на управляемых формах программисты часто сталкиваются с ситуацией, когда стандартные события вроде Нажатие или ОбработкаНавигационнойСсылки не реагируют на действия пользователя. Особенно остро эта проблема проявляется при работе с тачскринами или при необходимости создать интерактивные элементы из обычных текстовых полей. В этой статье мы подробно разберем, почему так происходит, и какие существуют обходные пути для реализации требуемого функционала, включая программное изменение форм.
Рассмотрим стандартную ситуацию: на форме есть реквизит типа Строка, отображаемый как Поле надписи. Мы ожидаем, что при клике по нему сработает событие Нажатие, но ничего не происходит. Проанализируем причину. По умолчанию ПолеНадписи не является интерактивным элементом в полном смысле этого слова. Оно предназначено для вывода текста, а не для взаимодействия.
Чтобы сделать его кликабельным, необходимо выполнить следующие действия:
Нажатие обязательно пропишите СтандартнаяОбработка = Ложь;, если вы хотите перехватить действие и выполнить свой программный код вместо стандартного перехода по ссылке.Однако здесь кроется важный нюанс, который часто упускают: событие срабатывает только при нажатии на само содержимое (текст) поля. Если пользователь нажимает на область заголовок этого поля, событие вызвано не будет. В 1С:Предприятие заголовки элементов являются частью системной отрисовки рамки и не имеют собственных обработчиков событий.
Если нам нужно, чтобы нажатие отрабатывало по всей области элемента, а не только по буквам текста, проанализируем альтернативный вариант — использование элемента Декорация (вид — Надпись). Разберем преимущества этого подхода:
Нажатие срабатывает при клике в любую точку области элемента.Ситуация усложняется, когда речь идет о полях ввода на устройствах с сенсорным экраном. Рассмотрим задачу: при нажатии на ПолеВвода (например, "Фамилия") нужно вызвать самописную экранную клавиатуру. Простое событие Нажатие здесь не поможет, так как для поля ввода оно имеет свою специфику.
Выясним, какие инструменты помогут решить эту задачу:
КнопкаВыбора в значение "Да". Используйте событие НачалоВыбора. Это самый стабильный способ вызвать свою форму (клавиатуру) при клике на элемент (например, через универсальную форму выбора типа).Посмотрим на пример, когда в ПолеНадписи выводится ФорматированнаяСтрока. В этом случае событие ОбработкаНавигационнойСсылки будет срабатывать исключительно тогда, когда пользователь нажимает на фрагмент текста, который программно задан как навигационная ссылка. Рассмотрим пример кода для создания такой строки:
ТекстСсылки = Новый ФорматированнаяСтрока("Нажмите здесь для перехода", , , , "e1cib/app/Справочник.Контрагенты");
Элементы.ПолеНадписи.Заголовок = ТекстСсылки;
В обработчике ОбработкаНавигационнойСсылки вы сможете проанализировать адрес ссылки и выполнить нужные действия, установив СтандартнаяОбработка = Ложь.
Разберем ситуацию с Деревом значений или Таблицей. Часто требуется открыть объект при одиночном клике на ячейку. Использование события ПриАктивизацииСтроки неудобно, так как оно срабатывает при любом программном обновлении данных, даже если пользователь ничего не нажимал.
Как решить эту проблему правильно:
ГиперссылкаЯчейки. Теперь текст в этой колонке будет вести себя как ссылка. При клике на него сработает событие Выбор, даже если в настройках таблицы стоит "Двойной клик".ПриАктивизацииСтроки можно добавить проверку: Если ЭтаФорма.ТекущийЭлемент <> Элементы.МояТаблица Тогда Возврат; КонецЕсли;. Это позволит отсечь события, вызванные программным заполнением формы, когда фокус еще не передан в таблицу.Проанализировав различные ситуации, можно сделать вывод: в 1С:Предприятие нет универсального события "Click" для любого пикселя формы, но есть специализированные инструменты для каждой задачи. Рассмотрим краткий чек-лист:
ПолеНадписи + Гиперссылка.Декорацию.НачалоВыбора.ГиперссылкаЯчейки.Помните, что для мобильных решений и тачскринов в платформе 8.3 предусмотрен специальный тактильный интерфейс, который автоматически увеличивает элементы управления. Проверьте настройки интерфейса в конфигураторе, чтобы кнопки выбора и выпадающие списки были удобны для нажатия пальцем.