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

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

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

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

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

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

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

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

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

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

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


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

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