Имя: Пароль:
1C
 
проблема с программным выводом СКД в ТЗ
0 Chern55
 
17.10.24
10:40
Есть обработка, СКД без программного вывода отрабатывает корректно, в программном выводе ТЗ выводится пустой.

процедура следующая:

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

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


при точке останова на строке     ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,,истина);
в МакетеКомпоновки данные параметров заполнены, все остальное вроде тоже нормально.

Не могу разобраться..
2 mikecool
 
17.10.24
11:15
а это зачем?

Для каждого Элемент из МакетКомпоновки.ЗначенияПараметров Цикл

        Если ТипЗнч(Элемент.Значение) = Тип("ВыражениеКомпоновкиДанных") Тогда
            Элемент.Значение = Вычислить(Элемент.Значение);
        КонецЕсли;  
        
    КонецЦикла;
3 mikecool
 
17.10.24
11:16
в общем - ставишь точку останова после формирования макета и смотришь, что конкретно в нем есть - какой текст запроса, параметры и т.п.
4 Chern55
 
17.10.24
11:56
(2) без этого кода в  полученном макете значение параметров отображается как выражение (как задано в СКД), то есть например Справочники.ЗначенияСвойствАналитикиСотрудника.НайтиПоКоду("000000134"), а с этим костылем уже полученное значение этого выражения. хотя что так, что так результат нулевой
5 Chern55
 
17.10.24
11:58
(3) да вроде все есть, параметры есть, набор данных с запросами