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

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

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

Почему свойства команды не привязываются к клику в ячейке

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

Основное решение: использование события таблицы «Выбор»

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

  1. Выделим элемент формы — таблицу (динамический список).
  2. В палитре свойств найдем событие Выбор и нажмем на кнопку создания обработчика на клиенте.
  3. В созданном обработчике проверим, по какой именно колонке был произведен клик, через параметр Поле.
  4. Обязательно установим параметр СтандартнаяОбработка = Ложь;, чтобы отменить открытие стандартной формы документа или строки.
  5. Считаем данные текущей строки и откроем требуемую форму.

Посмотрим на пример клиентского кода обработчика события:


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

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

Альтернативные способы реализации действий для ячейки

В зависимости от сценария работы пользователя можно использовать и другие интерфейсные решения:

  1. Одиночный клик через гиперссылку: если действие должно вызываться в один клик, изменим вид элемента колонки на Поле надписи или установим свойство Гиперссылка = Истина у поля ввода. Для элемента определим обработчик события Нажатие, где также сбросим СтандартнаяОбработка = Ложь; и выполним нужный алгоритм.
  2. Кнопка открытия или выбора внутри ячейки: в свойствах поля ввода включим флаг КнопкаОткрытия = Истина или КнопкаВыбора = Истина. При нажатии на кнопку в ячейке сработает событие Открытие или НачалоВыбора, поведение которого переопределяется программно.
  3. Команда в контекстном меню строки: созданную команду формы перетащим в ветку Контекстное меню таблицы. В обработчике команды обратимся к выбранным данным через свойство Элементы.Список.ТекущиеДанные.
← На главную