Имя: Пароль:
1C
1С v8
Программное формирование отчета СКД
,
0 MistaEr
 
27.10.20
11:50
Здравствуйте!
Есть отчет на СКД. Внешние наборы данных СКД формируются при компоновке результата с использованием множества локальных переменных модуля объекта. Не хотелось бы все это повторять заново в своем коде. Есть ли возможность сформировать отчет программно, примерно так: Дорогой ОтчетОбъект, вот тебе два параметра (остальные параметры считай что не заполнены), вот тебе Вариант отчета (или даже имя варианта), вот тебе ТабличныйДокумент, сформируйся, пожалуйста в мой табличный документ)
1 ДенисЧ
 
27.10.20
11:55
Я не против. Обращайся. Только с уважением )))

Подсказываю. У отчёта есть метод СкопоноватьРезультат(ТабДокумент, данныеРасшифровки)
2 MistaEr
 
27.10.20
11:57
Спасибо попробуй, отпишусь)
3 MistaEr
 
27.10.20
11:58
(2) Попробую
4 SleepyHead
 
гуру
27.10.20
12:15
(0)

    

    Ключ = ""; // здесь идентификатор ключа варианта отчета
    
    Если ОтчетВСоставеКонфигурации Тогда
        Модуль = Отчеты.ИмяОтчетаВКонфигураторе.Создать();
    Иначе
        ОписаниеЗащиты = Новый ОписаниеЗащитыОтОпасныхДействий;
        ОписаниеЗащиты.ПредупреждатьОбОпасныхДействиях = Ложь;
        Модуль = ВнешниеОтчеты.Создать(ПутьКФайлуВнешнегоОтчета, Ложь, ОписаниеЗащиты);
    КонецЕсли;
    
    Модуль.КомпоновщикНастроек.ЗагрузитьНастройки(СхемаКомпоновкиДанных.ВариантыНастроек[Ключ].Настройки);
    
    // следующие две строки необязательны, но отчеты в составе БСП могут использовать эти значения в событии ПриКомпоновкеРезультата
    Модуль.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("КлючВарианта", Ключ);
    Модуль.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ВариантНаименование", СхемаКомпоновкиДанных.ВариантыНастроек[Ключ].Представление);
    
    // установка параметров
    П = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти(ИмяПараметры);
    П.Использование = Истина;
    П.Значение = ЗначениеПараметра;
    
    // установить второй параметр аналогично первому
    
    // посмотреть, что в событии ПриКомпоновкеРезультата, обычно там примерно такой код
    НастройкиСКД = Модуль.КомпоновщикНастроек.ПолучитьНастройки();
    
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(Модуль.СхемаКомпоновкиДанных, НастройкиСКД, ДанныеРасшифровки);
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки);    
    
    // найти такую строку
    // ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    
    // и заменить на такую
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
    
    ПроцессорВывода.УстановитьОбъект(ТвояТаблицаЗначений);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);    
    
    // обработать результат
5 MistaEr
 
10.11.20
15:21
Всем спасибо:

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