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

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

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

Использование события Выбор

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


&НаКлиенте
Процедура ТЧВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    // Ваш код здесь
КонецПроцедуры

Параметр Поле является ключевым в нашей задаче. Он содержит объект типа ПолеФормы, который соответствует той колонке, на которую был совершен клик. Именно через этот объект мы можем добраться до имени колонки.

Способ 1: Получение значения через текущие данные (упрощенный подход)

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

Разберем этот метод по шагам:

  1. Получаем имя текущего элемента: ИмяКолонки = Элемент.ТекущийЭлемент.Имя;.
  2. Корректируем имя, удаляя префикс имени таблицы: ИмяКолонки = СтрЗаменить(ИмяКолонки, Элемент.Имя, "");.
  3. Получаем значение из ТекущиеДанные: Значение = Элементы.ВашаТаблица.ТекущиеДанные[ИмяКолонки];.

&НаКлиенте
Процедура ТЧДанныеКластераВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ИмяКолонки = Элемент.ТекущийЭлемент.Имя;
    ИмяКолонки = СтрЗаменить(ИмяКолонки, Элемент.Имя, "");
    ЗначениеАктивнойЯчейки = Элементы.ТЧДанныеКластера.ТекущиеДанные[ИмяКолонки];
КонецПроцедуры

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

Способ 2: Надежный метод через ПутьКДанным

Для более профессиональной и надежной разработки рекомендуется использовать свойство ПутьКДанным. Оно позволяет однозначно определить, с каким именно реквизитом связан элемент управления, независимо от его имени на форме.

Алгоритм действий:

  1. Используем параметр Поле, который пришел в обработчик события Выбор.
  2. Обращаемся к свойству Поле.ПутьКДанным, которое вернет строку вида Объект.ИмяТЧ.ИмяКолонки.
  3. Разрезаем полученную строку по символу «.» и берем последнее значение — это и будет имя реквизита в табличной части.
  4. Получаем значение из текущей строки таблицы.

&НаКлиенте
Процедура ТаблицаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    ПутьКДанным = Поле.ПутьКДанным;
    МассивПути = СтрРазделить(ПутьКДанным, ".");
    ИмяРеквизита = МассивПути[МассивПути.Количество() - 1];
    
    Значение = Элемент.ТекущиеДанные[ИмяРеквизита];
КонецПроцедуры

Данный подход является наиболее предпочтительным в современных конфигурациях на 1С v8.3, так как он не зависит от имен элементов формы и устойчив к изменениям в дизайне интерфейса.

Важные рекомендации

При работе с событиями выбора помните о следующих нюансах:

Используя предложенные методы, вы сможете легко реализовать любую бизнес-логику при взаимодействии пользователя с табличными частями, будь то открытие расшифровки, запуск подбора или изменение состояния ячейки.

← На главную