База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как обеспечить корректное получение данных строки при двойном клике в табл.докум › Ответ в теме: Как обеспечить корректное получение данных строки при двойном клике в табл.докум
Проблема в том, что переменная РасшифровкаСоответствие создаётся один раз до цикла и в каждой итерации цикла вы в неё вставляете новые значения, тем самым перезаписывая предыдущие. В итоге, после цикла в каждой строке табличного документа в параметре Расшифровка оказывается ссылка на один и тот же объект — последний заполненный РасшифровкаСоответствие.
Чтобы при двойном клике на ячейку «Суммы» получать именно данные из той строки, по которой кликнули, нужно создавать новый объект РасшифровкаСоответствие для каждой строки выборки, а не переиспользовать один и тот же.
Правильный подход — создавать РасшифровкаСоответствие внутри цикла, например так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
ОбластьСтрока = Макет.ПолучитьОбласть("Строка"); Пока Выборка.Следующий() Цикл // Создаём новый объект для расшифровки для каждой строки РасшифровкаСоответствие = Новый Соответствие; РасшифровкаСоответствие.Вставить("ПоказыватьЗаголовок", ИСТИНА); РасшифровкаСоответствие.Вставить("ДатаНач", ДатаНач); РасшифровкаСоответствие.Вставить("ДатаКон", ДатаКон); РасшифровкаСоответствие.Вставить("ИмяОбъекта", "КарточкаСчетаОсновной"); ОбластьСтрока.Параметры.Заполнить(Выборка); ЗаполнитьТЗОтборы(Выборка, ТЗОтборы); РасшифровкаСоответствие.Вставить("Счет", Выборка.Счет); РасшифровкаСоответствие.Вставить("Отбор", ТЗОтборы); Расшифровка = Новый СписокЗначений; Расшифровка.Вставить(0, РасшифровкаСоответствие, "Карточка счета " + Выборка.Счет.Код); ОбластьСтрока.Область("Суммы").Расшифровка = Расшифровка; ТабДок.Вывести(ОбластьСтрока); КонецЦикла; ТабДок.Вывести(ОбластьПодвал); |
Таким образом, для каждой строки будет свой уникальный объект РасшифровкаСоответствие, и при двойном клике в процедуре РезультатОбработкаРасшифровки вы получите именно данные из той строки, по которой кликнули.
Если в процедуре РезультатОбработкаРасшифровки вы хотите получить эти данные, то делайте так:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) СтандартнаяОбработка = Ложь; Если Расшифровка = Неопределено Тогда Возврат; КонецЕсли; // Получаем список значений из расшифровки Если ТипЗнч(Расшифровка) = Тип("СписокЗначений") Тогда Если Расшифровка.Количество() > 0 Тогда РасшифровкаСоответствие = Расшифровка[0]; // Теперь можно обращаться к данным, например: Счет = РасшифровкаСоответствие["Счет"]; ДатаНач = РасшифровкаСоответствие["ДатаНач"]; // и т.д. // Ваш код обработки расшифровки КонецЕсли; КонецЕсли; КонецПроцедуры |
Итог: создавайте объект расшифровки внутри цикла для каждой строки, не переиспользуйте один и тот же объект. Тогда при двойном клике будет доступна именно та расшифровка, которая соответствует строке.