Как обработать двойной клик мыши по ячейке или строке таблицы в 1С?

Программист 1С v8.3 (Обычные формы) IT и автоматизация бизнеса
← На главную

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

Разберем, какими способами можно реализовать такое поведение на платформе 1С:Предприятие, какие подводные камни есть у разных подходов и какой вариант считается каноническим.

Способ 1. Канонический вариант — использование штатного события «Выбор»

В платформе 1С для табличных элементов управления (как для ТабличноеПоле в обычных формах, так и для элемента Таблица в управляемых формах) предусмотрено специализированное событие «Выбор». Это рекомендованный разработчиками платформы механизм для отработки двойного клика мыши или нажатия клавиши Enter.

Рассмотрим по шагам реализацию данного механизма:

  1. В палитре свойств таблицы формы находим событие Выбор и создаем процедуру-обработчик на клиенте.
  2. Обработчик принимает параметры: Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка.
  3. Для подавления стандартных действий платформы (попытки открыть форму связанного объекта или начать редактирование) первым делом устанавливаем параметр СтандартнаяОбработка = Ложь;.
  4. Проверяем, по какой именно колонке кликнул пользователь, через свойство Поле.Имя. Это гарантирует, что действие выполнится только при нажатии на имя файла, а не при клике на дату или размер.
  5. Получаем данные выбранной строки и выполняем прикладной алгоритм.

Посмотрим на пример реализации для управляемой формы:


&НаКлиенте
Процедура СписокФайловВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    // Отменяем стандартное поведение платформы
    СтандартнаяОбработка = Ложь;
    
    // Проверяем, что клик совершен именно по колонке с именем файла
    Если Поле.Имя = "СписокФайловИмя" Тогда
        
        ТекущаяСтрока = Элемент.ТекущиеДанные;
        Если ТекущаяСтрока <> Неопределено Тогда
            ОткрытьФайл(ТекущаяСтрока.Имя, ТекущаяСтрока.Путь);
        КонецЕсли;
        
    КонецЕсли;

КонецПроцедуры

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

Способ 2. Перехват событий редактирования строки с флагом Отказ

На форумах часто встречается обходной прием: разработчики назначают обработчик на событие «ПередНачаломИзменения» или «НачалоРедактирования» таблицы, выполняют целевое действие и устанавливают параметр Отказ = Истина;. Это запрещает платформе входить в режим правки текста ячейки.

Разберем пример такого кода:


Процедура ТабличноеПолеСписокФайловПередНачаломИзменения(Элемент, Отказ)
    
    // Блокируем переход в режим редактирования ячейки
    Отказ = Истина;
    
    // Выполняем требуемое действие
    ТекущаяСтрока = Элемент.ТекущаяСтрока;
    Если ТекущаяСтрока <> Неопределено Тогда
        ЗапуститьОбработкуФайла(ТекущаяСтрока.Имя);
    КонецЕсли;

КонецПроцедуры

Проанализируем ограничения этого подхода:

  1. Не работает при полном запрете редактирования: если у таблицы формы или у отдельных колонок установить флаг ТолькоПросмотр = Истина (что является стандартной практикой для списков файлов), события изменения и редактирования перестают вызываться вовсе. В результате код просто перестанет отрабатывать.
  2. Сложность позиционирования: в событиях начала редактирования не всегда удобно отслеживать, по какой конкретно колонке был совершен клик, в то время как событие Выбор сразу передает ссылку на Поле.

Таким образом, перехват редактирования через Отказ = Истина работоспособен, но уступает событию Выбор в надежности и чистоте архитектуры.

Способ 3. Использование колонки-гиперссылки

Если интерфейс задумывается похожим на браузер или веб-страницу, хорошим решением будет открытие файла в один клик. Для этого колонку с именем файла можно перевести в режим гиперссылки:

  1. В свойствах элемента формы (колонки) устанавливаем флаг Гиперссылка = Истина.
  2. Назначаем обработчик на событие поля Нажатие.
  3. В обработчике получаем данные текущей строки и вызываем процедуру открытия файла.

Этот вариант делает интерфейс интуитивно понятным для пользователей, привыкших к поведению ссылок в браузерах.

Особенности обработки выбора с клавиатуры и множественного выделения

При использовании штатного события Выбор важно учитывать поведение встроенных механизмов 1С:

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

2. Множественный выбор: если для таблицы включено свойство МножественныйВыбор = Истина, параметр ВыбраннаяСтрока вернет только ту строку, по которой был произведен клик. Если требуется обработать сразу все выделенные пользователем файлы, список строк необходимо получать через свойство Элемент.ВыделенныеСтроки.

← На главную