8.х Отчет СКД сформировать программно

Тема в разделе "Система компоновки данных (СКД)", создана пользователем Samouchka, 12 сен 2015.

  1. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    Нужно программно установить параметры и сформировать отчет СКД. Нашел в Инете код для процедуры Сформировать, но там определяются только настройки по умолчанию. А как передать мои параметры? В этой части кода я передаю нужные параметры и отбор в форму отчета:

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

    Код:
    СхемаКомпоновкиДанных=Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
        //Из схемы возьмем настройки по умолчанию
       
        //А как здесь передать мои только что установленные настройки?
        Настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
       
        //Помещаем в переменную данные о расшифровке данных
        ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных;
        //Формируем макет, с помощью компоновщика макета
        КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных;
        //Передаем в макет компоновки схему, настройки и данные расшифровки
        МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
        //Выполним компоновку с помощью процессора компоновки
        ПроцессорКомпоновкиДанных=Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,ДанныеРасшифровки);
                                                      
        Результат=Форма.ЭлементыФормы.Результат;
        Результат.Очистить();
        ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(Результат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);
    Чем заменить
    Код:
    Настройки=СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
    Или может тогда надо по-другому параметры устанавливать? Прошу помочь.
  2. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Код:
    Настройки = Отчет.КомпоновщикНастроек.ПолучитьНастройки();
    Вы ведь в модуле формы код пишите?
    Если в модуле объекта, тогда "Отчет." не нужно.
  3. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    В модуле формы документа пишу.
  4. 1cUserAndrew
    Offline

    1cUserAndrew Профессионал в 1С Команда форума

    Регистрация:
    27 май 2010
    Сообщения:
    4.948
    Симпатии:
    149
    Баллы:
    104
    Ну, значит, эта строчка кода должна подойти.
  5. TopicStarter Overlay
    Samouchka
    Offline

    Samouchka Опытный в 1С

    Регистрация:
    20 мар 2013
    Сообщения:
    214
    Симпатии:
    1
    Баллы:
    29
    В данном коде косяк был с очищением результата. После этого ничего не заполнялось.
    Результат.Очистить(). Щас наюзал как все сделать в форме отчета, это лучший вариант. Отчет формируется верно, но только как сделать расшифровку? Сейчас вместо неё 1С сообщает какое-то натуральное число (например, 1С:Предприятие 61). Скорее всего это просто номер ячейки отчета. Вот он код, расшифровку вывожу в переменную "ДанныеРасшифровки":

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

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.628
    Симпатии:
    946
    Баллы:
    204
    и что? Вы этим хотите. Почитай те на фруме Расшифровка СКД. там обсуждали как делать что бы свой отчет окрывался или еще что то делалось.
  7. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    вот тут написано как в форме документа использовать скд
    Последнее редактирование модератором: 14 сен 2015
  8. Muggsy
    Offline

    Muggsy одно ЭС

    Регистрация:
    10 сен 2008
    Сообщения:
    243
    Симпатии:
    0
    Баллы:
    26
    Я извиняюсь, забыла, что нельзя ссылки тут оставлять

    Сначала в документ был добавлен макет - схема компоновки данных, потом добавлена команда в управлемую форму, код команды такой:


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

Поделиться этой страницей