Имя: Пароль:
1C
1С v8
Перенос параметров между вариантами отчета скд (управляемые формы)
,
0 Anabella
 
10.03.15
16:40
Открывается отчет с параметрами дата1 и дата2 в пользовательских настройках. Задачу поставили такую: при нажатии на кнопку чтобы из этого отчета вызывался второй вариант этого отчета, причем с теми же значениями дата1 и дата2. вот код кнопки "сформировать":

ОтчетОбъект = РеквизитФормыВЗначение("Отчет");

Схема = ОтчетОбъект.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

Варианты = Схема.ВариантыНастроек;
Настройки1 = Схема.ВариантыНастроек[3].Настройки;

Дата1 = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0];
Дата2 = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1];

КомпоновщикНастроекДанных = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроекДанных.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(Схема));
КомпоновщикНастроекДанных.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
КомпоновщикНастроекДанных.ЗагрузитьНастройки(Настройки1);
  
КомпоновщикНастроекДанных.ПользовательскиеНастройки.Элементы[0].Значение = Дата1.Значение;
КомпоновщикНастроекДанных.ПользовательскиеНастройки.Элементы[1].Значение = Дата2.Значение;
КомпоновщикНастроекДанных.Настройки.ПараметрыДанных.Элементы[2].Значение = Дата1.Значение;
КомпоновщикНастроекДанных.Настройки.ПараметрыДанных.Элементы[3].Значение = Дата2.Значение;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(Схема, КомпоновщикНастроекДанных.ПолучитьНастройки());
//Макет.ЗначенияПараметров.Дата1.Значение = Дата1.Значение.Дата;
//Макет.ЗначенияПараметров.Дата2.Значение = Дата2.Значение.Дата;

ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет);

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Вот в этом месте возникает ошибка:
{Форма.ФормаОтчета.Форма(77)}: Ошибка при вызове метода контекста (Вывести)
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "НаборДанных1"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(186, 48)}: Не задано значение параметра "Дата1"
ЗаказыКлиентовОбороты.ЗаказКлиента.Дата МЕЖДУ <<?>>&Дата1 И &Дата2

Значения Дата1 и Дата2 я проверяла в отладчике, они соответствуют.
1 Anabella
 
10.03.15
17:06
ап. надеюсь и верю.
2 Anabella
 
11.03.15
08:50
Может с утра кто-то откликнется ?
3 Anabella
 
11.03.15
10:04
ап
4 Anabella
 
11.03.15
11:08
ап!
5 fisher
 
11.03.15
11:22
Здесь несколько вариантов боков может быть.
Для начала, сделай
Дата1 = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[0].Значение;
Дата2 = Отчет.КомпоновщикНастроек.ПользовательскиеНастройки.Элементы[1].Значение;
Сейчас у тебя ссылки на элементы пользовательских настроек, а они потом инициализируются заново.
6 Anabella
 
11.03.15
11:35
(5) Ура! Живая душа!
Сделала. Никаких результатов. Что ещё посоветуете?
7 fisher
 
11.03.15
11:50
(6) Да кучу всего. Как в том анекдоте про Хрущева и коров :)
Именно такую реализацию я не делал, но подозреваю что переключение варианта отчета в УФ делается принципиально по-другому.
Может, подойдет готовый кусок кода, но с открытием второго варианта отдельной формой? Такое есть у меня.
8 Anabella
 
11.03.15
12:24
(7) С передачей параметров ? Тогда да, годится!
9 fisher
 
11.03.15
12:26
Вся эта хрень &НаКлиенте

                // получим форму отчета для расшифровки
                ФормаОтчетаРасшифровки = ПолучитьФорму(ЭтаФорма.ИмяФормы, Новый Структура("КлючВарианта", НазваниеВарианта), ЭтаФорма, Истина);
                
                // перенесем дату отчета в отчет-расшифровку
                ПараметрДатыЭтогоОтчета = УправлениеОтчетамиКлиентСервер.ПолучитьПользовательскийПараметр("НачалоПериода", Отчет.КомпоновщикНастроек);
                ПараметрДатыОтчетаРасшифровки = УправлениеОтчетамиКлиентСервер.ПолучитьПользовательскийПараметр("НачалоПериода", ФормаОтчетаРасшифровки.Отчет.КомпоновщикНастроек);
                Если ПараметрДатыЭтогоОтчета <> Неопределено И ПараметрДатыОтчетаРасшифровки <> Неопределено Тогда
                    ЗаполнитьЗначенияСвойств(ПараметрДатыОтчетаРасшифровки,ПараметрДатыЭтогоОтчета,"Значение,Использование");
                КонецЕсли;
                ФормаОтчетаРасшифровки.Открыть();
                ФормаОтчетаРасшифровки.СкомпоноватьРезультат();
10 fisher
 
11.03.15
12:28
Функция ПолучитьПредопределенныйЭлементПользовательскихНастроек(ЭлементНастроекВарианта, ПользовательскиеНастройки) Экспорт
    
    НайденныйЭлемент = Неопределено;
    
    Если ЭлементНастроекВарианта <> Неопределено Тогда
        
        НайденныйЭлемент = ПользовательскиеНастройки.Элементы.Найти(ЭлементНастроекВарианта.ИдентификаторПользовательскойНастройки);
        
    КонецЕсли;
        
    Возврат НайденныйЭлемент;
    
КонецФункции

Функция ПолучитьПользовательскийПараметр(ИмяПараметра, КомпоновщикНастроек) Экспорт
    
    НайденныйПараметр = Неопределено;
    
    НайденныйПараметрВарианта = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметра);
    
    Если НайденныйПараметрВарианта <> Неопределено Тогда
        
        НайденныйПараметр = ПолучитьПредопределенныйЭлементПользовательскихНастроек(НайденныйПараметрВарианта, КомпоновщикНастроек.ПользовательскиеНастройки);
        
    КонецЕсли;
    
    Возврат НайденныйПараметр;
    
КонецФункции
11 Anabella
 
11.03.15
12:29
(9)Сейчас попробую! А может, здесь тоже подскажете? Ну, пожалуйста!
Отключение группировки с диаграммой в СКД (управляемые формы)