Имя: Пароль:
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) что то там неясно что они делают)

Есть более конкретный пример?
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн