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