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