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