Версия для печати темы (https://pro1c.org.ua/index.php?s=99852c4c26469bf846ade436285e9f2e&showtopic=24919)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Програмное изменение запроса СКД и установка параметров

Автор: DrLivsi 02.09.15, 13:17

Всем привет!

Нужно програмно менять запрос в отчете на скд, в зависимости от настроек пользователя.
Запрос поменял, но не могу установить параметр "ОсновнойМенеджер", в параметрах данных его нет. Подскажите как сделать.

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    Настройки = КомпоновщикНастроек.Настройки;
        
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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




Автор: VikingKosmo 02.09.15, 13:40

Нужно в настройки еще добавить соответствующий параметр. Посмотрите, что у Вас в Настройки.ПараметрыДанных.Элементы. Там точно нет параметра "ОсновнойМенеджер".

Автор: DrLivsi 02.09.15, 13:54

Цитата(VikingKosmo @ 02.09.15, 14:40) *
Нужно в настройки еще добавить соответствующий параметр. Посмотрите, что у Вас в Настройки.ПараметрыДанных.Элементы. Там точно нет параметра "ОсновнойМенеджер".


У" ПараметрыДанных" нет метода Добавить()

Пробовал следующий код, но ничего не поменялось

ПараметрДанных               = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрДанных.Имя           = "ОсновнойМенеджер";
ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
ПараметрДанных.Заголовок     = "Основной менеджер";
ПараметрДанных.Значение =    ОсновнойМенеджер;

Автор: logist 02.09.15, 14:00

Добавьте все необходимые параметры заранее, не зависимо от того, используются они в тексте запроса или нет.

Автор: VikingKosmo 02.09.15, 14:15

Цитата(DrLivsi @ 02.09.15, 14:54) *
У" ПараметрыДанных" нет метода Добавить()

Пробовал следующий код, но ничего не поменялось

ПараметрДанных               = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрДанных.Имя           = "ОсновнойМенеджер";
ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
ПараметрДанных.Заголовок     = "Основной менеджер";
ПараметрДанных.Значение =    ОсновнойМенеджер;


Если уж хотите программно добавить параметр, то его нужно не СхемеКомпоновки добавлять, а Настройкам.

Автор: DrLivsi 02.09.15, 15:11

Цитата(logist @ 02.09.15, 15:00) *
Добавьте все необходимые параметры заранее, не зависимо от того, используются они в тексте запроса или нет.


На вкладку Параметры добавил ОсновнойМенеджер, ошибки нет, но и отбора тоже нет

Автор: Petre 02.09.15, 15:30

Цитата(DrLivsi @ 02.09.15, 14:54) *
У" ПараметрыДанных" нет метода Добавить()

Конечно нет. Он есть у "ПараметрыДанных.Элементы".

Автор: DrLivsi 02.09.15, 16:13

Цитата(Petre @ 02.09.15, 16:30) *
Конечно нет. Он есть у "ПараметрыДанных.Элементы".


Получился у меня следующий код:
ПараметрКомпоновки  = Настройки.ПараметрыДанных.Элементы.Добавить();
ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("ОсновнойМенеджер");
ПараметрКомпоновки.Использование = Истина;
ПараметрКомпоновки.Значение = ПараметрыСеанса.ТекущийПользователь;


Теперь в первой строке вылетает ошибка:
Коллекция значений параметров не может изменять свой состав, так как она связана с доступными параметрами.

Автор: logist 02.09.15, 16:37

Потому что Найстроки.ПараметрыДанных содержат те параметры которые указаны на вкладке Параметры СКД.

Автор: VikingKosmo 02.09.15, 16:42

Цитата(DrLivsi @ 02.09.15, 17:13) *
Получился у меня следующий код:
ПараметрКомпоновки  = Настройки.ПараметрыДанных.Элементы.Добавить();
ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("ОсновнойМенеджер");
ПараметрКомпоновки.Использование = Истина;
ПараметрКомпоновки.Значение = ПараметрыСеанса.ТекущийПользователь;


Теперь в первой строке вылетает ошибка:
Коллекция значений параметров не может изменять свой состав, так как она связана с доступными параметрами.


Получите настройки из СхемыКомпоновки, добавьте в них параметр, а потом Настройки.ЗагрузитьПараметры(ВашиПараметры)

Автор: DrLivsi 03.09.15, 10:42

Цитата(VikingKosmo @ 02.09.15, 17:42) *
Получите настройки из СхемыКомпоновки, добавьте в них параметр, а потом Настройки.ЗагрузитьПараметры(ВашиПараметры)


            
    ПараметрКомпоновки  = Настройки.ПараметрыДанных.Элементы.Добавить();
    ПараметрКомпоновки.Параметр = Новый ПараметрКомпоновкиДанных("ОсновнойМенеджер");
    ПараметрКомпоновки.Использование = Истина;
    ПараметрКомпоновки.Значение = ПараметрыСеанса.ТекущийПользователь;
        
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);

Та же ошибка, в строке: ПараметрКомпоновки = Настройки.ПараметрыДанных.Элементы.Добавить();

Сделал как советовали выше, вручную добавил все необходимые параметры на вкладку "Параметры", а потом заполнил их
Настройки.ПараметрыДанных.УстановитьЗначениеПараметра("ОсновнойМенеджер", ПараметрыСеанса.ТекущийПользователь);



Автор: kosalex 03.09.15, 11:34

Делал отчет, в котором две схемы СКД, в зависимости от выбранного переключателя подставляется нужный макет СКД.

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

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

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua