Имя: Пароль:
1C
1С v8
Программное добавление/удаление параметров СКД
0 manti
 
30.10.14
15:09
Есть отчет на СКД. В зависимотси от выбранного там параметра другой должен удаляться из списка параметров а также инициализироваться вновь. Как это сделать?

Есть пример, но он для типа отбора:
Если ЭтаФорма.Элементы.КомпоновщикНастроекПользовательскиеНастройки.ТекущиеДанные.Настройка = "Партнер" Тогда
        
        ИДНастройкаТипаКвоты = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Партнер").ИдентификаторПользовательскойНастройки;
        НастройкаПартнер = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы.Найти(ИДНастройкаТипаКвоты);
        Если НастройкаПартнер <> Неопределено Тогда
            Если НастройкаПартнер.Значение = Истина И НастройкаПартнер.Использование = Истина Тогда                
                Для Каждого ЭлементОтбора Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
                    Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент") Тогда
                        Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы.Удалить(ЭлементОтбора);
                    КонецЕсли;
                КонецЦикла;                
            Иначе
                //проверим на присутствие отбора
                МожноДелатьОтбор = Истина;
                Для Каждого ЭлементОтбора Из Отчет.КомпоновщикНастроек.Настройки.Отбор.Элементы Цикл
                    Если ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент") Тогда
                        МожноДелатьОтбор = Ложь;
                    КонецЕсли;
                КонецЦикла;                
                
                Если МожноДелатьОтбор Тогда
                    ЭлементОтбора = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
                    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Контрагент");
                    //ЭлементОтбора.ВидСравнения = ВидСравнения.Равно;
                    //ЭлементОтбора.ПравоеЗначение = Значение;
                    ЭлементОтбора.Использование = Ложь;
                    ЭлементОтбора.ИдентификаторПользовательскойНастройки = Новый УникальныйИдентификатор;//"b8c89ee2-36e4-43b3-929f-ed8a7b740b4b";
                    ЭлементОтбора.ПредставлениеПользовательскойНастройки = "Контрагент";
                    ЭтаФорма.ОбновитьОтображениеДанных();
                КонецЕсли;
            КонецЕсли;
        КонецЕсли
        
    КонецЕсли;
1 DrZombi
 
гуру
30.10.14
15:17
(0)Очень просто... Но параметры обычно берутся из Запроса, так что тут обстоит дело в Динамическом запросе :)

А так, если запрос статичен, то заполняются параметры так:
http://1cskd.ru/2014/06/smena-tipa-nabora-dannyx-skd-s-soxraneniem-polej/

В "ПриКомпоновкеРезультата" добавляешь код, типо:

     НастройкиКомпоновщика = ЭтотОбъект.КомпоновщикНастроек.ПолучитьНастройки();
    
     ЭлемПользНастр = ЭтотОбъект.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
    
     Если НастройкиКомпоновщика.ПараметрыДанных.Элементы.Количество()>0 ТОгда
         Для каждого Элемент Из НастройкиКомпоновщика.ПараметрыДанных.Элементы Цикл
             Если Элемент.Использование=Истина тогда
                 Если Сокрлп(Элемент.Параметр)="СмещениеСервер" тогда
                    
                     Элемент.Использование = Истина;
                    
                     //Получать только на сервере :)
                     УнВремя=УниверсальноеВремя(ТекущаяДата());
                     СмещениеСервер = МестноеВремя(УнВремя) - УнВремя; //4 часа для Москвы
                    
                     Элемент.Значение = СмещениеСервер;
                    
                     //Отобразим для пользователя
                     НайденЭлемент = ЭлемПользНастр.Найти(Элемент.ИдентификаторПользовательскойНастройки);
                     Если НайденЭлемент <> Неопределено Тогда
                         НайденЭлемент.Значение = Элемент.Значение;
                     КонецЕсли;
                    
                 КонецЕсли;
             КонецЕсли;
         КонецЦикла;
     КонецЕсли;
    
//....

     //Макет компоновки
     КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
     МакетКомпоновки = КомпоновщикМакета.Выполнить(ЭтотОбъект.СхемаКомпоновкиДанных, НастройкиКомпоновщика, ДанныеРасшифровки);
2 DrZombi
 
гуру
30.10.14
15:18
+(0)Пример с динамическим запросом:
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=633633
3 manti
 
30.10.14
15:31
(1) это пример установки значения для параметра.
(2) что то там неясно что они делают)

Есть более конкретный пример?