Как перехватить клик по определенной колонке динамического списка и запретить открытие документа

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

При разработке интерфейсов на управляемых формах 1С 8.3 часто возникает задача изменить стандартное поведение программы. Типичный пример: в динамическом списке документов при двойном клике по строке (или нажатии Enter) система по умолчанию открывает форму этого документа. Однако иногда требуется, чтобы при клике на конкретную колонку (например, «Статус», «Ответственный» или специальную кнопку-иконку) выполнялось иное действие, а форма документа не открывалась. Рассмотрим подробнее, как это реализовать различными способами.

Способ 1. Использование события «Выбор» для перехвата двойного клика

Самый простой и надежный метод — использование стандартного события динамического списка Выбор. Это событие предназначено именно для того, чтобы программист мог переопределить основное действие. Разберем по шагам, как это настроить.

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

  1. Элемент — собственно сама таблица списка.
  2. ВыбраннаяСтрока — ссылка на объект (или идентификатор строки), по которой кликнули.
  3. Поле — объект типа ПолеФормы, указывающий на конкретную колонку, в которой произошел клик.
  4. СтандартнаяОбработка — булево значение, управляющее дальнейшим поведением платформы.

Для решения задачи нам критически важно использовать параметр СтандартнаяОбработка. Если установить его в значение Ложь, 1С не будет выполнять открытие формы документа. Посмотрим на пример кода:


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

Способ 2. Реализация действия по одинарному клику (Гиперссылка)

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

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


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

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

Работа с флажками (тип Булево)

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

Рекомендации по юзабилити

Рассмотрим ситуацию с точки зрения пользователя. Если обычный клик по списку открывает документ, а клик по одной конкретной колонке делает что-то другое, пользователя нужно об этом предупредить визуально. Проанализируем, как это сделать через Условное оформление:

  1. Для «особой» колонки можно установить отличный от других цвет текста (например, синий, как у классических гиперссылок).
  2. Можно изменить шрифт на подчеркнутый.
  3. Если в колонке выводится картинка, можно добавить текст-подсказку в свойство ТекстВсплывающейПодсказки.

Подводя итог, можно сказать, что механизм управляемых форм предоставляет гибкий инструментарий для управления событиями. Главное правило — всегда помнить о параметре СтандартнаяОбработка, так как именно он является «ключом» к отмене предопределенных действий системы 1С.

← На главную