База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как обеспечить корректное получение данных строки при двойном клике в табл.докум
- В этой теме 1 ответ, 2 участника, последнее обновление 3 дня, 2 часа назад сделано
Odin — Одинэсник.
-
АвторСообщения
-
-
15 апреля 2026 в 9:48 #36413
Вопрос по расшифровке для табличного документа, в который выводятся данные из выборки.
Данные расшифровки формируются верно для текущей строки выборки.
Gри двойном клике на ячейку области «Суммы» срабатывает процедура РезультатОбработкаРасшифровки, но в расшифровке хранятся данные из последней строки выборки.
Как сделать так, чтобы при двойном клике на строки возвращались данные именно из этой строки?ОбластьСтрока = Макет.ПолучитьОбласть(«Строка»);
РасшифровкаСоответствие = Новый Соответствие;
РасшифровкаСоответствие.Вставить(«ПоказыватьЗаголовок», ИСТИНА);
РасшифровкаСоответствие.Вставить(«ДатаНач»,ДатаНач);
РасшифровкаСоответствие.Вставить(«ДатаКон»,ДатаКон);
РасшифровкаСоответствие.Вставить(«ИмяОбъекта»,»КарточкаСчетаОсновной»);Пока Выборка.Следующий() Цикл
ОбластьСтрока.Параметры.Заполнить(Выборка);
ЗаполнитьТЗОтборы(Выборка,ТЗОтборы);
РасшифровкаСоответствие.Вставить(«Счет»,Выборка.Счет);
РасшифровкаСоответствие.Вставить(«Отбор»,ТЗОтборы);Расшифровка = Новый СписокЗначений;
Расшифровка.Вставить(0,РасшифровкаСоответствие,»Карточка счета » + Выборка.Счет.Код);
//здесь данные расшифровки формируются верно для текущей строки выборкиОбластьСтрока.Область(«Суммы»).Расшифровка = Расшифровка;
ТабДок.Вывести(ОбластьСтрока);КонецЦикла;
ТабДок.Вывести(ОбластьПодвал);
Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)
//при двойном клике на ячейку области «Суммы» срабатывает эта процедура, но в расшифровке хранятся данные из последней строки выборки
…КонецПроцедуры
-
15 апреля 2026 в 9:48 #36414
Проблема в том, что переменная
РасшифровкаСоответствиесоздаётся один раз до цикла и в каждой итерации цикла вы в неё вставляете новые значения, тем самым перезаписывая предыдущие. В итоге, после цикла в каждой строке табличного документа в параметреРасшифровкаоказывается ссылка на один и тот же объект — последний заполненныйРасшифровкаСоответствие.Чтобы при двойном клике на ячейку «Суммы» получать именно данные из той строки, по которой кликнули, нужно создавать новый объект
РасшифровкаСоответствиедля каждой строки выборки, а не переиспользовать один и тот же.Правильный подход — создавать
РасшифровкаСоответствиевнутри цикла, например так:1С (Код)12345678910111213141516171819202122232425262728ОбластьСтрока = Макет.ПолучитьОбласть("Строка");Пока Выборка.Следующий() Цикл// Создаём новый объект для расшифровки для каждой строкиРасшифровкаСоответствие = Новый Соответствие;РасшифровкаСоответствие.Вставить("ПоказыватьЗаголовок", ИСТИНА);РасшифровкаСоответствие.Вставить("ДатаНач", ДатаНач);РасшифровкаСоответствие.Вставить("ДатаКон", ДатаКон);РасшифровкаСоответствие.Вставить("ИмяОбъекта", "КарточкаСчетаОсновной");ОбластьСтрока.Параметры.Заполнить(Выборка);ЗаполнитьТЗОтборы(Выборка, ТЗОтборы);РасшифровкаСоответствие.Вставить("Счет", Выборка.Счет);РасшифровкаСоответствие.Вставить("Отбор", ТЗОтборы);Расшифровка = Новый СписокЗначений;Расшифровка.Вставить(0, РасшифровкаСоответствие, "Карточка счета " + Выборка.Счет.Код);ОбластьСтрока.Область("Суммы").Расшифровка = Расшифровка;ТабДок.Вывести(ОбластьСтрока);КонецЦикла;ТабДок.Вывести(ОбластьПодвал);Таким образом, для каждой строки будет свой уникальный объект
РасшифровкаСоответствие, и при двойном клике в процедуреРезультатОбработкаРасшифровкивы получите именно данные из той строки, по которой кликнули.Если в процедуре
РезультатОбработкаРасшифровкивы хотите получить эти данные, то делайте так:1С (Код)12345678910111213141516171819Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры)СтандартнаяОбработка = Ложь;Если Расшифровка = Неопределено ТогдаВозврат;КонецЕсли;// Получаем список значений из расшифровкиЕсли ТипЗнч(Расшифровка) = Тип("СписокЗначений") ТогдаЕсли Расшифровка.Количество() > 0 ТогдаРасшифровкаСоответствие = Расшифровка[0];// Теперь можно обращаться к данным, например:Счет = РасшифровкаСоответствие["Счет"];ДатаНач = РасшифровкаСоответствие["ДатаНач"];// и т.д.// Ваш код обработки расшифровкиКонецЕсли;КонецЕсли;КонецПроцедурыИтог: создавайте объект расшифровки внутри цикла для каждой строки, не переиспользуйте один и тот же объект. Тогда при двойном клике будет доступна именно та расшифровка, которая соответствует строке.
-
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.