Имя: Пароль:
1C
1С v8
Отчет на СКД в новой форме
0 first_may
 
20.01.17
16:30
Добрый день.

Есть некоторая обработка с формой - Форма.
Есть схема компоновки данных - МакетОтчет.
Есть еще одна форма - ФормаОтчета. В этой форме добавил реквизит КомпоновщикНастроек типа КомпоновщикНастроекКомпоновкиДанных, а также на форму поместил ТабличноеПоле с данными КомпоновщикНастроек.Настройки.Отбор и типом ОтборКомпоновкиДанных.


На первой форме (самой обработке) есть кнопка, при нажатии выполняется код:

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


Но когда открывается вторая форма, отчет формируется нормально, а в ТабличноеПоле отображаются отборы, но с красным крестиком и указать отбор не получается.

Как передать отбор указанный в скд на новую форму и что бы им можно было пользоваться в ней?
1 first_may
 
20.01.17
16:55
Прошу помощи.
2 Windyhead
 
20.01.17
17:06
Компоновщик настроек нужно проинициализировать (тот который на форму кинул)
    АдресСхемы = ПоместитьВоВременноеХранилище(Схема,УНикальныйИдентификатор);
    КомпоновщикНастроек.Инициализировать(новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы ));
    КомпоновщикНастроек.ЗагрузитьНастройки(Схема.НастройкиПоУмолчанию);
3 first_may
 
20.01.17
19:08
(2) про этот

"Есть еще одна форма - ФормаОтчета. В этой форме добавил реквизит КомпоновщикНастроек типа КомпоновщикНастроекКомпоновкиДанных"?
4 first_may
 
20.01.17
19:34
(2) добавил

    АдресСхемы = ПоместитьВоВременноеХранилище(СхемаКомпоновкиДанных, Новый УникальныйИдентификатор);

и

ФормаОтчета.КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(АдресСхемы));

получилось то, что хотел. Спасибо!!!
5 first_may
 
20.01.17
19:56
(2) а еще..

Вот в новой форме я добавил кнопку Сформировать.
И если установить отбор, то что надо написать в кнопке сформировать, что бы скд обновилось, но уже с отбором?
6 first_may
 
21.01.17
08:17
Подскажите пож, как сделать обновление скд с отбором.
7 first_may
 
21.01.17
09:29
Нашел пример, вот:

тОтчет = Отчеты.ОтчетПоЦенамИНаценкам.Создать();

НастройкиКД = тОтчет.КомпоновщикНастроек.ПолучитьНастройки();

ПолеНоменклатура = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Номенклатура"); //поле отбора присутствует в СКД
ПолеНоменклатураСкидка = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("НоменклатураСкидка"); //поле отбора присутствует в СКД

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

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

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


Но у меня нет отчет. Есть только СКД, основная форма и дополнительная (вторая). Вот на второй надо установить отбор и сформировать отчет на скд.

Как передать параметры отбора сделать получилось, а вот как как с установленными обновить отчет - нет. Подскажите пожалуйста, как это сделать.
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший