База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как реализовать расшифровку ячейки в самописном отчете 1С? › Ответ в теме: Как реализовать расшифровку ячейки в самописном отчете 1С?
Андрей, привет!
Если у тебя самописный отчет, не на СКД, и нужно сделать собственную расшифровку ячейки, то стандартных механизмов СКД у тебя нет, и придется реализовывать всё вручную. Вот как это обычно делается в 1С (управляемые формы):
1. Отображение отчета обычно происходит в табличном документе (ТабличныйДокумент) или в элементе ТабличныйДокумент на форме.
2. Для реализации расшифровки нужно использовать событие табличного документа — **ОбработкаРасшифровки**.
3. В этом событии ты получаешь информацию о том, по какой ячейке кликнули, и можешь вывести нужные данные.
Примерный алгоритм:
— На форме отчета у тебя есть элемент ТабличныйДокумент, например, с именем «Результат».
— В модуле формы создаешь обработчик события «ОбработкаРасшифровки» для этого элемента.
— В процедуре обработчика ты получаешь координаты ячейки, по которой кликнули, и по ним определяешь, что именно нужно показать.
— Затем формируешь и показываешь окно с расшифровкой — это может быть форма, текстовый документ, табличный документ или любой другой элемент.
Пример кода для обработки расшифровки:
|
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 29 30 31 32 33 34 |
&НаКлиенте Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка, ДополнительныеПараметры) // Отключаем стандартную обработку, если она есть СтандартнаяОбработка = Ложь; // Константы для строк и колонок СтрокаДляПоказа1 = 3; КолонкаДляПоказа1 = 2; СтрокаДляПоказа2 = 4; КолонкаДляПоказа2 = 1; // Получаем координаты ячейки, по которой кликнули Координаты = Расшифровка.Ячейка; // Получаем значение ячейки ЗначениеЯчейки = Элемент.ПолучитьЗначениеЯчейки(Координаты); // В зависимости от координат или значения определяем, что показывать Если Координаты.Строка = СтрокаДляПоказа1 И Координаты.Колонка = КолонкаДляПоказа1 Тогда // Например, показываем дополнительную информацию по этой ячейке ТекстРасшифровки = "Детальная информация по значению: " + Строка(ЗначениеЯчейки); ТекстДокумент = Новый ТекстовыйДокумент; ТекстДокумент.ДобавитьСтроку(ТекстРасшифровки); ТекстДокумент.Показать(); ИначеЕсли Координаты.Строка = СтрокаДляПоказа2 И Координаты.Колонка = КолонкаДляПоказа2 Тогда // Можно открыть другую форму с деталями ФормаДеталей = ПолучитьОбъект("ИмяФормыДеталей"); // заменено ПолучитьФорму на ПолучитьОбъект ФормаДеталей.Параметр = ЗначениеЯчейки; ФормаДеталей.Открыть(); Иначе // Для остальных ячеек можно ничего не делать или вывести сообщение Сообщить("Расшифровка для этой ячейки не реализована"); КонецЕсли; КонецПроцедуры |
Объяснения:
— Расшифровка.Ячейка — объект с координатами (Строка, Колонка) ячейки, по которой кликнули.
— Элемент.ПолучитьЗначениеЯчейки(Координаты) — метод табличного документа, который возвращает значение ячейки.
— В зависимости от координат или значения ты можешь реализовать любую логику: открыть форму, показать текстовый документ, вывести сообщение и т.п.
Если у тебя отчет формируется программно в табличном документе, то при формировании можно в ячейки записывать дополнительные данные (например, в комментарии или в скрытых колонках), чтобы потом в обработчике расшифровки использовать их для показа детальной информации.
Если отчет не в табличном документе, а, например, в таблице на форме (ТабличноеПоле), то там тоже есть событие «ОбработкаРасшифровки», и логика будет похожей — по координатам ячейки определяешь, что показывать.
—
Если нужна более конкретная помощь — укажи, в каком именно элементе ты выводишь отчет (ТабличныйДокумент, ТабличноеПоле, или что-то другое), и как формируется отчет (программно или через макеты).
https://infostart.ru/1c/articles/1829344/ (пример с расшифровкой в табличном документе, не на СКД)
—
Кратко:
— Используй событие ОбработкаРасшифровки элемента табличного документа.
— В обработчике по координатам ячейки получай данные.
— Показывай нужную форму или документ с деталями.
— Отключай стандартную обработку, если она мешает.
Если хочешь, могу помочь с конкретным кодом под твой отчет.