Имя: Пароль:
1C
1С v8
Расшифровка СКД тем же отчетом, но с другой схемой СКД
,
0 Наська72
 
21.08.13
06:16
Имеется отчет, его расшифровка - этот же отчет, но построенный по неосновной схеме.
Есть два макета и две формы.
В первой форме пользователь кликает для расшифровки:

СтандартнаяОбработка = Ложь;
    
    ЭлементРасшифровкиДанных     = ДанныеРасшифровки.Элементы[Расшифровка];
    ЭлементРасшифровкиДанныхПоля = ЭлементРасшифровкиДанных.ПолучитьПоля()[0];
    
    НовыйОтчет = Отчеты[ЭтотОбъект.Метаданные().Имя].Создать();
    ФормаОтчета = НовыйОтчет.ПолучитьФорму("ФормаРасшифровки");
    ФормаОтчета.Объект = НовыйОтчет;
    ФормаОтчета.Ссылка = ЭлементРасшифровкиДанных.ПолучитьПоля()[0].Значение;
    ФормаОтчета.Открыть();

В новом объекте в форме расшифровки пишу:

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

Получаю новую форму с шапкой отчета, но сами данные как будто пусты.
Что делаю не так?

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

работает с основной схемой компоновки =(
1 Наська72
 
21.08.13
06:19
Пробовала запросом из СКД посмотреть по полученной ссылке есть ли там данные - всё в порядке
2 1Cv8_accepted
 
21.08.13
06:25
(0) Тот же самый отчёт получить в качестве нового объекта и параметр задать программно.
3 1Cv8_accepted
 
21.08.13
06:26
+ Объект ВСЕГО собственно отчёта.
4 Наська72
 
21.08.13
06:27
(2) а разве я не это делаю:
НовыйОтчет = Отчеты[ЭтотОбъект.Метаданные().Имя].Создать();
...
ФормаОтчета.Ссылка = ЭлементРасшифровкиДанных.ПолучитьПоля()[0].Значение;


А потом:
ПараметрСсылка = Объект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Ссылка"));
    ПараметрСсылка.Использование = Истина;
    ПараметрСсылка.Значение = Ссылка;
5 Наська72
 
21.08.13
06:28
(3) что Вы имеете ввиду?
6 Наська72
 
21.08.13
06:37
Так кажется параметр не передается.
СхемаКомпоновкиДанных = Объект.ПолучитьМакет("Макет");
    Объект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));
    Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    ПараметрСсылка = Объект.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Ссылка"));
    ПараметрСсылка.Использование = Истина;
    ПараметрСсылка.Значение = Ссылка;


Правильно задаю параметр?
Потом делаю

МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Объект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);


Не перетирает?
7 Наська72
 
21.08.13
07:28
Вот так пробую:
ПараметрСсылка = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Ссылка"));
    ПараметрСсылка.Значение = Ссылка;
    Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Объект.КомпоновщикНастроек.Настройки, ДанныеРасшифровки);


Всё равно параметр в заголовке не виден, отчет пустой
8 Наська72
 
21.08.13
07:50
Ни в какую не хочет получать параметр:

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



Помогите, пожалуйста!
9 Наська72
 
21.08.13
08:02
СхемаКомпоновкиДанных = Объект.ПолучитьМакет("Макет");
    Объект.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СхемаКомпоновкиДанных));

    Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ПараметрСсылка                 = Настройки.ПараметрыДанных.Элементы[0];
    ПараметрСсылка.Использование = Истина;
    ПараметрСсылка.Значение     = Ссылка;

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


Если в макетеКомпоновки есть значение параметра. почему я его не вижу в отчете и отчет не формируется?
10 Xatori
 
21.08.13
08:03
ПараметрСсылка = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("Ссылка")) Так не правильно, нужно
ПараметрСсылка = СхемаКомпоновкиДанных.НастройкиПоУмолчанию.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ИмяПараметра"));
ПараметрСсылка.Значение = Ссылка;
11 Xatori
 
21.08.13
08:04
Собственно поэтому наверное у тебя и данные пустые, т.к. параметр есть и скорей всего стоит использование и значение параметра пустая ссылка.
12 Xatori
 
21.08.13
08:08
Хотя собственно не очень понятно зачем делать разные схемы, когда можно сделать другой вариант и его использовать.
13 Наська72
 
21.08.13
08:09
(10) Нет "Ссылка" - это "ИмяПараметра".

Немного выше написала, что вижу в макете компоновки значение параметра (9)
14 Наська72
 
21.08.13
08:11
В МакетКомпоновки.ЗначенияПараметров преспокойно лежит значение параметра, а вот в наборе данных МакетКомпоновки.НаборыДанных[0].ЗначенияПараметров пусто.(
15 Xatori
 
21.08.13
08:12
Вот подсказка
Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);
    
    Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ПараметрСсылка                 = Настройки.ПараметрыДанных.Элементы[0];
    ПараметрСсылка.Использование = Истина;
    ПараметрСсылка.Значение     = Ссылка;

Ты загружаешь настройки в Компановщик, потом в этих настройках меняешь что то, в компановщике будут изменения?
16 Наська72
 
21.08.13
08:15
(15) перенести загрузку настроек ниже?
Я потом делаю
МакетКомпоновки             = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
Где Настройки - это СхемаКомпоновкиДанных.НастройкиПоУмолчанию

КомпоновщикНастроек где будет использован?
17 Наська72
 
21.08.13
08:24
(15) Ситуация прежняя. В МакетКомпоновки.ЗначенияПараметров есть параметр, а в наборе данных МакетКомпоновки.НаборыДанных[0].ЗначенияПараметров нет
18 Xatori
 
21.08.13
08:25
Поменяй местами
Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию);

С
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    ПараметрСсылка                 = Настройки.ПараметрыДанных.Элементы[0];
    ПараметрСсылка.Использование = Истина;
    ПараметрСсылка.Значение     = Ссылка;
19 Наська72
 
21.08.13
08:37
(18) сделала, результат в (17)
20 Наська72
 
21.08.13
08:40
(18) Объясните, пожалуйста, почему у МакетКомпоновки параметры есть а в НабореДанных в этом же МакетеКомпоновки их нет.
21 Xatori
 
21.08.13
08:47
Почитай про программное формирование СКД, очень долго объяснять.
22 Наська72
 
21.08.13
08:57
(21) Читала. Можно конкретизировать что отвечает за заполнение МакетеКомпоновки.НаборДанных[0].ЗначенияПараметров? КомпоновщикНастроек или СхемаКомпоновкиДанных.НастройкиПоУмолчанию?
23 Наська72
 
21.08.13
09:22
Вот в этом месте Объект.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.НастройкиПоУмолчанию); настройки не закгружаются в Компоновщик. В настройках по умолчанию они стоят. Как быть???
24 Наська72
 
21.08.13
10:03
с (23) в этом месте решила. Но вот в наборданных параметры не передаются
25 Xatori
 
21.08.13
10:05
Эх, ну вот тебе, программное создание и заполнение нового отчёта, тут единственное отличие используется другой вариант той же схемы, но принципиального отличия нет, только нужные настройки передать нужно будет

Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    Перем ВыполненноеДействие;
    Перем ДополнительныеДействия;
    Перем НайденныйОтбор;
    СтандартнаяОбработка = Ложь;
        
    ЭлементыРасшифровки = ЭтаФорма.ДанныеРасшифровки.Элементы[Расшифровка];
        
    ПоляРасшифровки = ЭлементыРасшифровки.ПолучитьПоля();
    ЗначениеПолеРасшифровки = ПоляРасшифровки[0].Поле;

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

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

    
    Отчет.СформироватьОтчет(Форма.ЭлементыФормы.Результат, Форма.ДанныеРасшифровки, ДатаНачало, ДатаКонец);        
            
    КонецЕсли;

КонецПроцедуры
26 Xatori
 
21.08.13
10:08
Вот с этого момента тебя должно интересовать
ИначеЕсли  ВыполненноеДействие = "График" Тогда
27 Наська72
 
21.08.13
10:19
Мне кажется есть существенная разница, если схема используется другая.

Подытожу мой код:

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

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


В отчет параметр так и не пришел. Подозреваю проблема в МакетеКомпоновки.НаборДанных1.Парметры
28 Xatori
 
21.08.13
10:32
Кинь отчет
29 Xatori
 
21.08.13
10:35
Можно и на Инфостарте :)
30 Наська72
 
21.08.13
10:44
31 Наська72
 
21.08.13
11:04
Всем спасибо. Сама разобралась.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.