Значение текущей ячейки таблице управляемой формы #703446


#0 by onx1
Есть какой-нибудь код который позволяет получить значение текущей ячейки при её изменении, в произвольном случае когда имя колонки таблицы отличается от имени пути к данным? Например, таблица СписокОпераций и колонка СписокОперацийПредметСделки ссылающаяся на поле табличной части ПредметСделки: Элементы.СписокОпераций.ТекущиеДанные[Элементы.СписокОпераций.ТекущийЭлемент.Имя] - не сработает, т.к. Элементы.СписокОпераций.ТекущийЭлемент.Имя = "СписокОперацийПредметСделки", а коллекции  Элементы.СписокОпераций.ТекущиеДанные надо "ПредметСделки" в качестве поля
#1 by onx1
И все-таки
#2 by onx1
неужели нельзя, в общем случае, значение изменяемой ячейки в просто обработчике при изменении получить ?
#3 by
22-02-2019

&НаКлиенте Процедура НоменклатураПриАктивизацииЯчейки(Элемент) //Элемент - это ТаблицаФормы Если Элемент.ТекущиеДанные= Неопределено Тогда Возврат; КонецЕсли; ИмяКолонки = ИмяКолонки(Элемент.ТекущийЭлемент.Имя); Сообщить(Элемент.ТекущиеДанные[ИмяКолонки]); КонецПроцедуры

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

#4 by
22-02-2019

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

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

В этой группе 1С