Какое событие вызывается при клике на реквизит табличной части в 1С

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

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

Основные события при взаимодействии с ячейкой

Для начала рассмотрим ситуацию, когда пользователь взаимодействует с табличной частью. Важно понимать, что система разделяет понятия «фокусировки» на ячейке, «выбора» значения и «начала редактирования». Рассмотрим основные события, которые могут быть задействованы:

  1. ПриАктивизацииЯчейки (OnActivateCell): Это событие возникает в тот момент, когда пользователь просто кликает по ячейке один раз или перемещается по таблице с помощью стрелок клавиатуры. Оно сигнализирует о том, что фокус переместился на конкретный реквизит.
  2. Выбор (Selection): Данное событие инициируется при двойном щелчке мыши или нажатии клавиши Enter. Это основной «крючок» для реализации логики быстрого перехода или открытия связанных объектов.
  3. ПриНачалеРедактирования (OnStartEdit): Это событие возникает, когда ячейка переходит в режим ввода данных. Важно помнить, что редактирование может начаться не только по двойному клику, но и при нажатии кнопки «Изменить» или просто при начале набора текста, если это разрешено настройками колонки.

Последовательность возникновения событий при двойном клике

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

Шаг 1: Активизация. Сначала срабатывает ПриАктивизацииЯчейки. Система фиксирует, что текущим активным элементом стала ячейка в колонке «Цена».

Шаг 2: Выбор. Поскольку произошел двойной клик, система вызывает событие Выбор. Здесь разработчик может прервать дальнейшие действия. Если в этом обработчике установить параметр СтандартнаяОбработка = Ложь, то переход к редактированию может не состояться, если вы решите, например, вместо изменения цены открыть отчет по истории цен.

Шаг 3: Подготовка к изменению. Если стандартная обработка не отменена, вызывается событие всей таблицы ПередНачаломИзменения. Оно сообщает системе, что строка таблицы сейчас перейдет в состояние редактирования.

Шаг 4: Редактирование. Наконец, вызывается ПриНачалеРедактирования. В этот момент в ячейке появляется курсор, и пользователь может вводить новое значение.

Различие между «Выбором» и «Началом редактирования»

Часто возникает путаница: какой обработчик использовать? Разберем разницу на практических примерах. Событие Выбор предназначено для действий, которые должны произойти вместо или в дополнение к стандартному поведению при двойном клике. Например, если у вас таблица со списком файлов, по двойному клику логично открыть сам файл, а не редактировать его название.

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

Рассмотрим пример кода для обработки события Выбор в управляемой форме:


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

Влияние настроек платформы и свойств элементов

Проанализируем, как свойства таблицы могут менять поведение событий. Важнейшим свойством является РежимРедактирования у элемента формы «Таблица»:

Также стоит обратить внимание на свойство ТолькоПросмотр. Если оно установлено в значение Истина для всей таблицы или конкретной колонки, событие ПриНачалеРедактирования не вызовется никогда. Однако событие Выбор продолжит работать! Это отличный способ запретить пользователям менять данные, но оставить возможность по двойному клику переходить в карточку товара или открывать связанные документы. Для централизованного управления этим режимом в разрезе пользователей подойдёт расширение для настройки доступности и режима «только просмотр» элементов формы.

Событие «ПриНачалеВыбора» — распространенная ошибка

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

Особенности обычных и управляемых форм

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

Посмотрим на пример использования ПриНачалеРедактирования для инициализации данных в новой строке:


&НаКлиенте
Процедура СоставПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
    Если НоваяСтрока Тогда
        // Заполним значение по умолчанию только для новых строк
        ТекущиеДанные = Элемент.ТекущиеДанные;
        ТекущиеДанные.Количество = 1;
        ТекущиеДанные.СтавкаНДС = ПредопределенноеЗначение("Перечисление.СтавкиНДС.НДС20");
    КонецЕсли;
КонецПроцедуры

Итоги и рекомендации

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

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

← На главную