В процессе разработки интерфейсов на управляемых формах, особенно когда речь идет о рабочих местах кассиров, складских терминалах или киосках самообслуживания с тачскринами, перед программистом часто встает задача: обработать нажатие на картинку в строке таблицы с первого клика. Стандартное поведение табличной части в 1С зачастую предполагает двойной клик для выполнения действия (событие Выбор), что крайне неудобно для сенсорных экранов. Разберем подробно, как обойти это ограничение и заставить платформу реагировать на одиночное касание ячейки с картинкой.
Проанализируем наиболее технологичный способ, который предлагает сама платформа для имитации одиночного нажатия. Основная хитрость заключается в том, чтобы заставить ячейку таблицы вести себя как гиперссылка. Рассмотрим пошагово, как это настроить:
Истина.Важный нюанс, который часто упускают разработчики: свойство Гиперссылка ячейки превращает двойной клик в одиночный только в том случае, если в ячейке есть данные. Если колонка таблицы не связана с путем к данным или в этой ячейке находится Неопределено (пустота), клик не будет распознан как нажатие на гиперссылку.
Разберем пример кода для обработчика события Выбор:
&НаКлиенте
Процедура ТЗВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
// Проверяем, что нажатие произошло именно по нашей колонке с картинкой
Если Поле.Имя = "ТЗКартинкаСтатуса" Тогда
// Отменяем стандартное поведение (открытие карточки или переход в режим редактирования)
СтандартнаяОбработка = Ложь;
// Выполняем нашу полезную логику
ПоказатьОповещениеПользователя("Действие выполнено по одиночному клику!");
КонецЕсли;
КонецПроцедуры
Выясним, что делать, если первый способ по каким-то причинам не подходит (например, если ячейка должна оставаться пустой). В этом случае мы можем воспользоваться событием ПриАктивацииЯчейки. Рассмотрим этот механизм подробнее.
Это событие срабатывает каждый раз, когда пользователь нажимает на ячейку (переводит в нее фокус). Однако у этого метода есть существенный недостаток: если пользователь нажмет на ту же самую ячейку второй раз подряд, событие не сработает, так как активация уже произошла ранее.
Проанализируем пример кода с обходом этой проблемы:
&НаКлиенте
Процедура ТЗПриАктивацииЯчейки(Элемент)
ТекущиеДанные = Элемент.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
// Проверяем имя текущей колонки
Если Элемент.ТекущийЭлемент.Имя = "ТЗКартинкаДействия" Тогда
// Выполняем код обработки нажатия
ВыполнитьДействиеПоКнопке(ТекущиеДанные);
// Лайфхак: чтобы следующий клик по этой же ячейке снова сработал,
// можно программно перекинуть фокус на другую "служебную" колонку.
// Элементы.ТЗ.ТекущаяКолонка = Элементы.ТЗСлужебнаяКолонка;
КонецЕсли;
КонецПроцедуры
Использование этого метода требует осторожности, так как ПриАктивацииЯчейки срабатывает и при навигации по таблице с помощью клавиатуры (стрелками). Для тачскринов это обычно не критично, но в обычном настольном приложении может раздражать пользователя.
Часто нажатие на картинку должно менять ее состояние (например, кнопка-флажок). Посмотрим, как правильно организовать хранение и отображение таких картинок, чтобы они корректно взаимодействовали с гиперссылкой.
Для реализации динамической смены картинки (например, "Проведен" / "Не проведен") лучше всего использовать свойство колонки Картинка значений. В этом случае в колонке таблицы значений хранится целое число (0, 1, 2...), которое является индексом картинки в коллекции.
Рассмотрим алгоритм настройки:
Истина.Поскольку в ячейке теперь всегда есть значение (числовой индекс), гиперссылка будет работать стабильно, обеспечивая моментальный отклик на нажатие.
Проанализируем ситуацию с точки зрения юзабилити. Если вы разрабатываете интерфейс для работы пальцем, помните о следующих моментах:
РежимРедактирования в значение Неопределенно или Непосредственно, чтобы платформа не тратила время на активацию поля ввода при первом клике.В завершение отметим, что если стандартные возможности таблиц 1С кажутся вам слишком ограниченными или "неповоротливыми" для сложного тач-интерфейса, профессиональным решением будет использование Поля HTML-документа. Там вы сможете сформировать любую сетку кнопок на div и img с мгновенной обработкой события onclick через скрипты и передачей команды обратно в 1С. Однако для большинства типовых задач связки Гиперссылка ячейки + событие Выбор вполне достаточно.