Имя: Пароль:
1C
1С v8
Смена Схемы СКД обновление полей настроек. Глюк или отсутствие метода?
,
0 ejiki
 
04.10.16
10:57
При смене схемы СКД пишу

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



В случае если копирую и заполняю пользовательские настройки то на форме отчета после выбора схемы не обновляются поля параметров и отборов. Если закомментировать копирование настроек, а именно процедуру "ЗапихнутьВПользовательскиеНастройки" то поля обновляются на форме.

Зато если щелкнуть по флажку активности отбора или параметра то поля автоматически обновляются.

ЧЯДНТ?!
1 ejiki
 
04.10.16
12:51
Апну ка я тему
2 Cyberhawk
 
04.10.16
12:53
ЗапихнутьВПользовательскиеНастройки где лежит?
3 ejiki
 
04.10.16
12:56
&НаСервере
Процедура ЗапихнутьВПользовательскиеНастройки(Отчет,ТекущиеНастройки,ПрошлыеНастройки,ПоследниеНастройкиВарианта)
    
    Если  ПрошлыеНастройки=неопределено тогда
        Возврат;
    КонецЕсли;    
    
    Для каждого ЭлементНастройки из ПрошлыеНастройки.Элементы цикл
        
        Если ТипЗнч(ЭлементНастройки)=Тип("ЗначениеПараметраНастроекКомпоновкиДанных") тогда
            Для каждого ЭлементТекущейНастройки из ТекущиеНастройки.Элементы цикл
                Если ТипЗнч(ЭлементТекущейНастройки)=Тип("ЗначениеПараметраНастроекКомпоновкиДанных") тогда
                    
                    Если СокрЛП(ЭлементНастройки.Параметр)=СокрЛП(ЭлементТекущейНастройки.Параметр) тогда
                        ЭлементТекущейНастройки.Использование = ЭлементНастройки.Использование;
                        ЭлементТекущейНастройки.Значение      = ЭлементНастройки.Значение;
                    КонецЕсли;
                    
                КонецЕсли;
            КонецЦикла;    
        КонецЕсли;    
        
        Если  ПоследниеНастройкиВарианта=неопределено тогда
            Возврат;
        КонецЕсли;    
        
        Если ТипЗнч(ЭлементНастройки)=Тип("ЭлементОтбораКомпоновкиДанных") тогда
            
             ИмяПараметра  = НайтиИмяПараметраОтбора(ПоследниеНастройкиВарианта,ЭлементНастройки.ИдентификаторПользовательскойНастройки);
             ПользовательскийОтбор = ПолучитьПользовательскуюНастройкуОтбора(Отчет,ИмяПараметра);
            
             Если ПользовательскийОтбор=неопределено тогда
                 продолжить;
             КонецЕсли;    
            
            ПользовательскийОтбор.Использование  = ЭлементНастройки.Использование;
            ПользовательскийОтбор.ВидСравнения   = ЭлементНастройки.ВидСравнения;
            ПользовательскийОтбор.ПравоеЗначение = ЭлементНастройки.ПравоеЗначение;
            
        КонецЕсли;    
        
    КонецЦикла;    
    
КонецПроцедуры
4 ejiki
 
04.10.16
12:57
(2) вот примерно так выполняю. Это все на форме отчета.
5 Cyberhawk
 
04.10.16
14:00
Передавай в эту процедуру Отчет через Знач
6 aleks_default
 
04.10.16
14:03
Есть же вроде метод ЗагрузитьПользовательскиеНастройки()
7 ejiki
 
05.10.16
04:01
(6) Это только в том случае пройдет если состав настройки соответствует. А у меня схемы различаются на один параметр и ЗагрузитьПользовательскиеНастройки() выдает ошибку.

(5) Сейчас попробую, спасибо!
8 ejiki
 
05.10.16
04:39
(5) нет) увы не получилось) пробовал всё: Знач в процедуре, само копирование засунуть в эту процедуру.

Как итог все так же, на форме чтобы увидеть обновленный список настроек нужно нажать "галочку" любого из параметров/отборов.
9 ejiki
 
05.10.16
08:02
КАК же обновить измененные параметры и отборы в окне пользовательских настроек?)