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