Имя: Пароль:
1C
 
данные Расшифровки Компоновки Данных
0 Vvvvv
 
04.03.15
15:02
Создавал до этого тему, но не корректно выразился чего хотел.
Во внешним отчете использую СКД.
Сначала заполняю табличную часть, а потом ее вывожу в СКД. Сам отчет выводится нормально, но расшифровки нету. Я имею ввиду, когда на отчете щелкаю по номенклатуре или контрагенту, что бы из отчета открыть ссылку на объект.
не работает стандартная расшифровка.

Полазил в конфигураторе, в процедуре:

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

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

этот код заполняет СКД из Таблицы значений.
Я посмотрел, мне нужна "ДанныеРасшифровки" с типом "данныерасшифровкикомпоновкиданных" для дальнейшего использования.  
"ДанныеРасшифровки" изначально пустая, как ее заполнить?
1 ShoGUN
 
04.03.15
15:05
(0) Юзай СкомпоноватьРезультат(это метод у ОтчетОбъект).
2 ShoGUN
 
04.03.15
15:06
Это вместо ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент юзай, в смысле.
3 Vvvvv
 
04.03.15
15:17
(1) честно не понятно,
СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);
ТЫ про это говоришь, можешь подсказать как это использовать?
4 ShoGUN
 
04.03.15
15:22
(3) Данные расшифровки у формы отчета есть - это свойство у расширения формы отчёта. После того, как СкомпоноватьРезультат(ДокументРезультат, ДанныеРасшифровки);  отработает, в ДокументРезультат будет помещён табличный документ с результатом, а в ДанныеРасшифровки - расшифровка для него.
5 ShoGUN
 
04.03.15
15:24
У меня так написано(это правда, обычные формы, в управляемых чуть сложней)
    ФормаОтчета = ОтчетРасшифровка.ПолучитьФорму();
    ФормаОтчета.ЭлементыФормы.Результат.Очистить();
    ОтчетРасшифровка.СкомпоноватьРезультат(ФормаОтчета.ЭлементыФормы.Результат, ФормаОтчета.ДанныеРасшифровки);
    ФормаОтчета.Открыть();
6 Vvvvv
 
04.03.15
15:40
(5) ОтчетРасшифровки мне нигде не доступно.
Нашел другое
ОтчетОбъект.ПолучитьФорму().ДанныеРасшифровки.Элементы

Но он тоже пустой.
7 ShoGUN
 
04.03.15
15:49
(6) ОтчетРасшифровки - это моя переменная, до этого создается. Это кусок из рабочего модуля.
ОтчетОбъект.ПолучитьФорму().ДанныеРасшифровки - вот это и есть то, что нужно передавать в СкомпоноватьРезультат вторым параметром(без Элементы).
8 Vvvvv
 
04.03.15
16:30
(7) можешь код целиком скинуть хочу посмотреть, а то что ты говоришь не работает.

ОтчетРасшифровка =  ОтчетОбъект.ПолучитьФорму().ДанныеРасшифровки;
ФормаОтчета = ОтчетРасшифровка.ПолучитьФорму();
ФормаОтчета.ЭлементыФормы.Результат.Очистить();
ОтчетРасшифровка.СкомпоноватьРезультат(ФормаОтчета.ЭлементыФормы.Результат, ФормаОтчета.ДанныеРасшифровки);
ФормаОтчета.Открыть();
9 ShoGUN
 
04.03.15
16:59
(8) Да пожалста :) Заодно посмотришь рекурсивную функцию для получения всех значений группировок. Этот кусок вызывает другой отчёт для расшифровки текущего. (ПолучитьВсехРодителейРасшифровки)

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

КонецПроцедуры

Функция ПолучитьВсехРодителейРасшифровки(ИД, СтруктураРасшифровки = Неопределено)
    Если СтруктураРасшифровки = Неопределено Тогда
        СтруктураРасшифровки = Новый Структура;
    КонецЕсли;
    ПолеРасшифровки = ДанныеРасшифровки.Элементы[ИД];
    Если ТипЗнч(ПолеРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
        ЗначенияПолей = ПолеРасшифровки.ПолучитьПоля();
        Для Каждого ЗначениеПоля Из ЗначенияПолей Цикл
            СтруктураРасшифровки.Вставить(ЗначениеПоля.Поле, ЗначениеПоля.Значение);
        КонецЦикла;
        РодителиГруппировка = ПолеРасшифровки.ПолучитьРодителей();
        Для Каждого Родитель Из РодителиГруппировка Цикл
            ПолучитьВсехРодителейРасшифровки(Родитель.Идентификатор, СтруктураРасшифровки);
        КонецЦикла;
    ИначеЕсли ТипЗнч(ПолеРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхГруппировка") Тогда
        РодителиГруппировка = ПолеРасшифровки.ПолучитьРодителей();
        Для Каждого Родитель Из РодителиГруппировка Цикл
            ПолучитьВсехРодителейРасшифровки(Родитель.Идентификатор, СтруктураРасшифровки);
        КонецЦикла;
    КонецЕсли;    
    Возврат СтруктураРасшифровки;
КонецФункции
10 ShoGUN
 
04.03.15
17:01
Тьфу ты, я имел в виду, что тут обработка расшифровки вызывает другой отчёт, а ПолучитьВсехРодителейРасшифровки получает все значения группировок.