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