Имя: Пароль:
1C
 
Программный вывод отчета на скд (без макета)
0 gabd_marat
 
04.07.17
00:36
Народ подскажите как программно вывести отчет на скд?
Есть скд (набор данных запрос без макета), нужно программно вывести отче, смотрел примеры не помогает. Скорее всего не могу понять саму логику
В модуле формы отчета:
&НаСервере
Процедура СформироватьОтчетНаСервере()
    
    СхемаКомпоновкиДанных = Отчеты.МТ_ОстаткиТоваровНаСкладах.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
    УстановитьЗначениеПараметраСКДОрганизация("Организация");
    УстановитьЗначениеПараметраСКДСклад("Склад");
    УстановитьЗначениеПараметраСКДКонецПериода("КонецПериода");

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

КонецПроцедуры


&НаСервере
Процедура УстановитьЗначениеПараметраСКДСклад(НазваниеПараметра,ЗначениеПараметра = Неопределено)
    ПараметрСКД = Отчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("Склад");
    ПараметрСКД.Использование = Истина;
    Если ЗначениеПараметра = Неопределено Тогда  
        ПараметрСКД.Значение = Отчет["Склад"];
    Иначе  ПараметрСКД.Значение = ЗначениеПараметра;
    КонецЕсли;
    
КонецПроцедуры


При компоновке результата:
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных,
                        КомпоновщикНастроек.Настройки,,,
                        Тип("ГенераторМакетаКомпоновкиДанных "));
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    Результат = Новый ТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Результат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);    
    ДокументРезультат.Вывести(Результат);
КонецПроцедуры
1 gabd_marat
 
04.07.17
00:37
Скопировал с инета, и изменил под свою задачу, не выводит ничего.
2 gabd_marat
 
04.07.17
00:38
Пробывал без процедуры при компоновке результата, все равно не выводит ничего
3 gabd_marat
 
04.07.17
00:39
Где можно почитать что бы понять как программно вывести отчет на скд?
4 PCcomCat
 
04.07.17
00:43
СхемаКомпоновкиДанных = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаНачалаАнализа"));
    
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = ДатаНачала;
        Параметр.Использование = Истина;
    КонецЕсли;    
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ДатаОкончанияАнализа"));
    
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = КонецДня(ДатаОкончания);
        Параметр.Использование = Истина;
    КонецЕсли;
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодАнализаНачалоДня"));
    
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = НачалоДня(ДатаОкончания);
        Параметр.Использование = Истина;
    КонецЕсли;
    
    Параметр = КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПериодАнализаГраницаКонец"));
    
    Если Параметр <> Неопределено Тогда
        ГраницаОкончания = Новый Граница(КонецДня(ДатаОкончания),ВидГраницы.Включая);
        Параметр.Значение = ГраницаОкончания;
        Параметр.Использование = Истина;
    КонецЕсли;
    
    Параметр =    КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ТекущаяДата"));
    
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = ТекущаяДата();
        Параметр.Использование = Истина;
    КонецЕсли;    
    
    Параметр =    КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("СортироватьПоДатеОтгрузки"));
    
    Если Параметр <> Неопределено Тогда
        Параметр.Значение = СортироватьПоДатеОтгрузки;
        Параметр.Использование = Истина;
    КонецЕсли;    

    ДанныеРасшифровкиОтчета = Новый ДанныеРасшифровкиКомпоновкиДанных;
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.Настройки, ДанныеРасшифровкиОтчета);
    
    ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, ,ДанныеРасшифровкиОтчета);
    
    ТаблицаРезультата = Новый ТабличныйДокумент;
    
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ТаблицаРезультата);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
    
    ЭлементыФормы.Результат.Очистить();
    ЭлементыФормы.Результат.Вывести(ТаблицаРезультата);
    ЭлементыФормы.Результат.ТолькоПросмотр = Истина;
    ЭлементыФормы.Результат.ПоказатьУровеньГруппировокСтрок(0);
    
    ЭлементыФормы.Результат.ФиксацияСлева = 1;
    ЭлементыФормы.Результат.ФиксацияСверху = 6;
    
    ТаблицаРезультата.Очистить();
5 gabd_marat
 
04.07.17
01:16
(4) После нажатия на кнопку, пишет отчет не свормирован, и просто макет пустой
6 PCcomCat
 
04.07.17
01:19
(5) Отладчиком смотри. Может по схеме действительно пустой отчет. Проверь результат запроса. Плюс группировки должны быть в схеме - одного запроса не достаточно.
7 gabd_marat
 
04.07.17
09:23
2 задача состоит в том чтобы группировки формировались программно а не через скд.
Сделал форму по которой выбираются реквизиты, по нажатию выбрать и закрыть выбранные реквизиты записываются в реквизит отчета(ТЗ), нужно по реквизитам в ТЗ создать отчет с группировкой. Как программно создать группировки?
8 gabd_marat
 
04.07.17
09:24
(6) 2 задача состоит в том чтобы группировки формировались программно а не через скд.
Сделал форму по которой выбираются реквизиты, по нажатию выбрать и закрыть выбранные реквизиты записываются в реквизит отчета(ТЗ), нужно по реквизитам в ТЗ создать отчет с группировкой. Как программно создать группировки?
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс