Имя: Пароль:
1C
 
Обновить поля для вывода после программного выбора макета СКД
0 kIR
 
21.06.18
15:46
Доброго дня!
СКД на обычных формах
В зависимости от выбранных галок на форме по нажатию кнопки "Сформировать" выбирается та или иная схема компоновки данных. Но, почему то, выводятся только те поля, которые есть в макете по умолчанию. Как можно обновить набор выводимых полей при выводе того или иного макета?
При этом на форме указываются параметры, которые формируют отборы в КомпоновщикНастроек.Настройки.Отбор, они тоже должны сохраняться

Спасибо
1 kIR
 
21.06.18
16:01
Пробовал использовать код

КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

Но при этом параметры, внесенные пользователем - затираются
2 aleks_default
 
21.06.18
16:10
ну правильно, это ж настройки по умолчанию
вот тут пользовательские КомпоновщикНастроек.ПолучитьНастройки()
3 kIR
 
21.06.18
16:29
(2) так там же и поля ненужные мне(
4 aleks_default
 
21.06.18
16:49
тогда я не понял ничего. Тебе нужно чтобы для одного отчета сохранялись пользовательские настройки двух разных схем?
5 kIR
 
21.06.18
17:14
(4) да. Там по сути галками выбираются увеличенные схемы, с большей информацией
6 kIR
 
21.06.18
17:44
Не знаю, может кривое решение, но тогда подскажите,как оптимизировать. Пока так сделал
7 kIR
 
21.06.18
17:44
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
    КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    Для Каждого Элемент из Настройки.ПараметрыДанных.Элементы Цикл
        Если Не Элемент.Использование Тогда Продолжить; КонецЕсли;
        КомпоновщикНастроек.Настройки.ПараметрыДанных.УстановитьЗначениеПараметра(Элемент.Параметр,Элемент.Значение);
    КонецЦикла;
    
    Для каждого Элемент из Настройки.Отбор.Элементы Цикл
        Если Не Элемент.Использование Тогда Продолжить; КонецЕсли;
        
        Для Каждого ЭлементОтбора из КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
            
            Если ЭлементОтбора.ЛевоеЗначение = Элемент.ЛевоеЗначение Тогда
                ЭлементОтбораДанных = Элемент.ЛевоеЗначение;
                
                ЭлементОтбора.ВидСравнения = Элемент.ВидСравнения;
                ЭлементОтбора.Использование = Истина;
                ЭлементОтбора.ПравоеЗначение = Элемент.ПравоеЗначение;
            КонецЕсли;
        КонецЦикла;
        
        Если ЭлементОтбораДанных = Неопределено Тогда
            ЭлементОтбораДанных = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
            ЭлементОтбораДанных.ЛевоеЗначение = Элемент.ЛевоеЗначение;
            ЭлементОтбораДанных.ВидСравнения = Элемент.ВидСравнения;
            ЭлементОтбораДанных.ПравоеЗначение = Элемент.ПравоеЗначение;
        КонецЕсли;
    КонецЦикла;
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший