| 0
    
        АнализДанных   14.01.20✎ 12:15 | 
        Есть таблица динамического списка, при двойном клике любой ячейки у меня открывается ее значение (Событие «Выбор»):
 &НаКлиенте
 Процедура МояТаблицаВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
 
 ТекДанные = Элементы.МояТаблица.ТекущиеДанные;
 ИмяКолонки = СтрЗаменить(Поле.Имя, Элемент.Имя, "");
 ПоказатьЗначение(,ТекДанные[ИмяКолонки]);
 
 КонецПроцедуры
 
 Все работает, но! Если пользователь, через «Изменить форму» добавляет подчиненный реквизит, то становится непонятно, как открыть это значение.
 
 Пример:
 Есть колонка дин.списка «Номенклатура». Пользователь добавляет подчиненный реквизит «Поставщик», а потом для поставщика еще один подчиненный реквизит «Головной контрагент».
 При двойном клике по полю «Головной контрагент» у него имя содержит «МояТаблицаНоменклатура_Поставщик_[Головной контрагент]»
 Переменная ТекДанные содержит ТекДанные.Номенклатура.Поставщик.[Головной контрагент].
 
 Как получить значение ячейки на которую кликнул пользователь, если это добавленный пользователем подчиненный реквизит?
 |  | 
    
        | 2
    
        АнализДанных   14.01.20✎ 12:33 | 
        (1) Я не знаю на какую колонку кликнул пользователь, и если это подчиненный реквизит, то как мне понять, как он называется в метаданных?.
Теоретически можно заменить все символы "_" в имени поля на точку "." и тогда все отработает, но! в системе могут быть реквизиты с подчеркиваниями, тогда это не сработает. Еще "ТекДанные" могут содержать имя реквизита в квадратных скобках, если синоним с пробелом (т.е. там именно синоним, а не имя реквизита метаданных).
 |  | 
    
        | 3
    
        АнализДанных   14.01.20✎ 13:57 | 
        Красивого решения не нашел, т.к. есть ограничения платформы, которые не позволяют получить путь к данным пользовательских реквизитов (или я чего-то не знаю). Следующий код отрабатывает, кроме случаев, когда в имени элемента есть символ "_", тогда значение просто не откроется.
 ИмяКолонки = СтрЗаменить(Поле.Имя, Элемент.Имя, "");
 
 Если ТекДанные.Свойство(ИмяКолонки) Тогда
 ПоказатьЗначение(,ТекДанные[ИмяКолонки]);
 Иначе
 Если ТекДанные.Свойство(СтрЗаменить(ИмяКолонки, "_", ".")) Тогда
 ПоказатьЗначение(,ТекДанные[СтрЗаменить(ИмяКолонки, "_", ".")]);
 КонецЕсли;
 КонецЕсли;
 |  |