Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Програмное изменение запроса СКД и установка параметров
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование управляемых форм 1С 8.2
DrLivsi
Всем привет!

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

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

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



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


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

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

ПараметрДанных               = СхемаКомпоновкиДанных.Параметры.Добавить();
ПараметрДанных.Имя           = "ОсновнойМенеджер";
ПараметрДанных.Использование = ИспользованиеПараметраКомпоновкиДанных.Всегда;
ПараметрДанных.Заголовок     = "Основной менеджер";
ПараметрДанных.Значение =    ОсновнойМенеджер;
logist
Добавьте все необходимые параметры заранее, не зависимо от того, используются они в тексте запроса или нет.
VikingKosmo
Цитата(DrLivsi @ 02.09.15, 14:54) необходимо зарегистрироваться для просмотра ссылки
У" ПараметрыДанных" нет метода Добавить()

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

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


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


На вкладку Параметры добавил ОсновнойМенеджер, ошибки нет, но и отбора тоже нет
Petre
Цитата(DrLivsi @ 02.09.15, 14:54) необходимо зарегистрироваться для просмотра ссылки
У" ПараметрыДанных" нет метода Добавить()

Конечно нет. Он есть у "ПараметрыДанных.Элементы".
DrLivsi
Цитата(Petre @ 02.09.15, 16:30) необходимо зарегистрироваться для просмотра ссылки
Конечно нет. Он есть у "ПараметрыДанных.Элементы".


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


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


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


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


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

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

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


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

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