Имя: Пароль:
1C
1С v8
Програмно менять СКД при смене значения переключателя
,
0 ac13
 
12.05.21
10:02
На форме отчета есть переключатель ВариантОтчета = 1 и 2

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");

    АдресСхемы1 = ПоместитьВоВременноеХранилище(ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных"), Новый УникальныйИдентификатор());
    АдресСхемы2 = ПоместитьВоВременноеХранилище(ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1"), Новый УникальныйИдентификатор());

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

Процедура ВариантОтчетаПриИзмененииНаСервере()
    
    ОтчетОбъект = РеквизитФормыВЗначение("Отчет");
      
    Если ВариантОтчета = 1 Тогда
        СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы1));
    ИначеЕсли ВариантОтчета = 2 Тогда
        СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1");
        ОтчетОбъект.СхемаКомпоновкиДанных = СхемаКомпоновкиДанных;
    КонецЕсли;
      
    Отчет.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    Отчет.КомпоновщикНастроек.Восстановить();
        
КонецПроцедуры

не работает, мне нужно менять схему компоновки данных при изменении значения переключателя
1 ac13
 
12.05.21
10:04
схема компоновки данных не устанавливается, ее можно установить только при компоновке результата?
дело в том, что мне сначала нужно выбрать вариант, настроить его, а потом сформировать отчет
2 Курцвейл
 
12.05.21
10:06
Правильнее отдельный отчет делать. Либо писать схему, которая имеет необходимые данные для обеих вариантов.
3 Курцвейл
 
12.05.21
10:09
Если все таки есть сильная необходимость, можно покопаться в БСП, универсальный отчет. Посмотреть как там настраивается макет СКД.
4 Pro-tone
 
12.05.21
10:10
Если ВариантОтчета = 1 Тогда
        СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        Отчет.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы1));
    ИначеЕсли ВариантОтчета = 2 Тогда
        СхемаКомпоновкиДанных = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных1");
        ОтчетОбъект.СхемаКомпоновкиДанных = СхемаКомпоновкиДанных;
    КонецЕсли;

строки 3 и 6 явно различаются...
2 + 2 = 3.9999999999999999999999999999999...