Расшифровка отчета

1. Anterian 20.03.25 23:16 Сейчас в теме
Здравствуйте, есть вот такой отчёт (скриншот 1). Нужно при двойном клике по ячейке "количество" сделать расшифровку другим отчётом, в котором будут колонки: "Номенклатура", "Количество" и т.д.

Меня больше всего интересует то, как можно в обработчике события "ОбработкаРасшифровки" при клике на ячейку количество, получить значения текущей строки отчёта? Ну то есть получить значение не только ячейки по которой кликнул пользователь, но ещё и значение "номенклатура", "количество" в текущей строке отчёта.
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. lone_mayson 60 21.03.25 08:46 Сейчас в теме
Меня больше всего интересует то, как можно в обработчике события "ОбработкаРасшифровки" при клике на ячейку количество, получить значения текущей строки отчёта?

Я делал так:
На закладке Макеты добавляем макет поля, по которому будет производиться расшифровка (их может быть несколько).
Допустим, поле называется Сумма.
Свойства ячейки: Заполнение = Параметр, Параметр = Сумма, ПараметрРасшифровки = Расшифровка
Параметры макета (2 строки):
Сумма: Сумма
Расшифровка: тут перечисляешь поля, которые необходимо получать при расшифровке: они будут доступны наравне со значением ячейки, по которому производится расшифровка.

Недавно делал отчет с расшифровкой через другой. Пришлось скопировать в него типовую форму отчета, чтобы доработать.
Вот некоторая модифицированная выжимка. Там, понятное дело, кода побольше.

&НаКлиенте
Процедура ОтчетТабличныйДокументОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
	
	СтруктураРасшифровки = ПолучитьРасшифровкуНаСервере(Расшифровка);
	Если СтруктураРасшифровки.Свойство("ИмяПоля") Тогда
		СписокЗначений = Новый СписокЗначений();
		СписокЗначений.Добавить("Регистратор");
		НашаОбработкаРасшифровки = Новый ОбработкаРасшифровкиКомпоновкиДанных(ЭтотОбъект.ОтчетДанныеРасшифровки, Новый ИсточникДоступныхНастроекКомпоновкиДанных(ЭтотОбъект.НастройкиОтчета.АдресСхемы));
		НашаОбработкаРасшифровки.ПоказатьВыборДействия(Новый ОписаниеОповещения("ОбработатьРасшифровку", ЭтотОбъект, СтруктураРасшифровки), Расшифровка, , СписокЗначений);
		СтандартнаяОбработка = Ложь;
		Возврат;
	КонецЕсли;

	//Какой-то типовой код
	
КонецПроцедуры

&НаСервере
Функция ПолучитьРасшифровкуНаСервере(Расшифровка)
	
	СтруктураРасшифровки = Новый Структура();
	
	ДанныеРасшифровкиКомпоновкиДанных = ПолучитьИзВременногоХранилища(ЭтотОбъект.ОтчетДанныеРасшифровки);
	ЭлементыРасшифровкиКомпоновкиДанных = ДанныеРасшифровкиКомпоновкиДанных.Элементы;
	Элемент = ЭлементыРасшифровкиКомпоновкиДанных.Получить(Расшифровка);
	
	Если ТипЗнч(Элемент) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		ЗначенияПолейРасшифровкиКомпоновкиДанных = Элемент.ПолучитьПоля();
		Для Каждого Элем Из ЗначенияПолейРасшифровкиКомпоновкиДанных Цикл
			СтруктураРасшифровки.Вставить(Элем.Поле, Элем.Значение);
		КонецЦикла;
	КонецЕсли;
	
	Возврат СтруктураРасшифровки;
	
КонецФункции

&НаКлиенте
Процедура ОбработатьРасшифровку(ВыбранноеДействие, ПараметрВыбранногоДействия, ДополнительныеПараметры) Экспорт
	
	Если ВыбранноеДействие = "Регистратор" Тогда
		ОткрытьФормуРасшифровки(ДополнительныеПараметры);
	ИначеЕсли ВыбранноеДействие = ДействиеОбработкиРасшифровкиКомпоновкиДанных.ОткрытьЗначение Тогда
		ПоказатьЗначение(, ПараметрВыбранногоДействия);
	КонецЕсли;

КонецПроцедуры
Показать
3. Anterian 21.03.25 09:52 Сейчас в теме
(2) Спасибо за подсказки, но пока ничего не понятно) Добавил в макет поле (скриншот1), правильно или нет? Формирую отчёт, вылезает ошибка (скриншот2), но в скд в группировку склад номенклатура не добавлена, странно.
Прикрепленные файлы:
4. lone_mayson 60 21.03.25 10:35 Сейчас в теме
Значит, у тебя группировка такая, что в ней нет поля Номенклатура
Тут ещё от структуры зависит.
Можешь вообще не юзать макеты поля (но с ними удобней), вот дописал по-быстрому вышеупомянутую процедуру получения значений полей. Тема так-то эта широко провентилирована на ресурсе.
Тут главное матан понять, отладить вызов функции в стеке на какой-нибудь многоуровневой структуре отчета.

&НаСервере
Функция ПолучитьРасшифровкуНаСервере(Расшифровка)
	
	СтруктРасшифровки = Новый Структура();
	
	ДанныеРасшифровкиКомпоновкиДанных = ПолучитьИзВременногоХранилища(ЭтотОбъект.ДанныеРасшифровки);
	ЭлементыРасшифровкиКомпоновкиДанных = ДанныеРасшифровкиКомпоновкиДанных.Элементы;
	Элемент = ЭлементыРасшифровкиКомпоновкиДанных.Получить(Расшифровка);
	
	Если ТипЗнч(Элемент) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
		ЗначенияПолейРасшифровкиКомпоновкиДанных = Элемент.ПолучитьПоля();
		Для Каждого Элем Из ЗначенияПолейРасшифровкиКомпоновкиДанных Цикл
			СтруктРасшифровки.Вставить(Элем.Поле, Элем.Значение);
		КонецЦикла;                       
		Массив = Элемент.ПолучитьРодителей();
		Если Массив <> Неопределено Тогда
			Для Каждого ЭлементРасшифровкиКомпоновкиДанныхПоля Из Элемент.ПолучитьРодителей() Цикл
				ТекСтруктура = ПолучитьРасшифровкуНаСервере(ЭлементРасшифровкиКомпоновкиДанныхПоля.Идентификатор);
				Для Каждого КиЗ Из ТекСтруктура Цикл
					Если Не СтруктРасшифровки.Свойство(КиЗ.Ключ) Тогда
						СтруктРасшифровки.Вставить(КиЗ.Ключ, КиЗ.Значение);
					КонецЕсли;
				КонецЦикла;
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
	
	Возврат СтруктРасшифровки;
	
КонецФункции
Показать


P.S. Если вернуться к макету поля, зачем у тебя написано КоличествоРасшифровка в табличном документе. Пусть называется так же.
5. Anterian 21.03.25 10:52 Сейчас в теме
(4) Извиняюсь за глупые вопросы, я новичок. А где прописывать этот код начинать? В модуле формы отчета в обработчике события ОбработкаРасшифровки, да?
6. lone_mayson 60 21.03.25 10:54 Сейчас в теме
(5) Да
Прикрепленные файлы:
7. Anterian 21.03.25 10:55 Сейчас в теме
(6) Спасибо большое) Сейчас буду пробовать, разбираться)
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот