Имя: Пароль:
1C
1С v8
Выполнение СКД программно
0 alexandr_87
 
10.01.19
15:24
Есть отчет, формируется используя СКД, хочу из другого отчет при нажатии на кнопке сформировать скд и результат записать в файл на диске.Вопрос как организовать выполнение скд из другого места.Спасибо.Платформа 1с 8.3 УФ
1 Beduin
 
10.01.19
15:26
(0) Ну как минимум тебе переменная нужна в которой будет ссылка на другой отчет.
2 shamannk
 
10.01.19
15:34
(0) Кодом.
3 runoff_runoff
 
10.01.19
15:34
если отчет без перехвата процедуры ПриКомпоновкеРезультата, то всего 7 строчек кода..
4 Fragster
 
гуру
10.01.19
15:35
(3) даже если с ПриКомпоновкеРезультата тоже
5 Ns33
 
10.01.19
15:36
Отчет = Отчеты[ИмяОтчета].Создать();
СхемаКомпоновкиДанных = Отчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");

//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;

Если ЗначениеЗаполнено(ИмяВарианта)  Тогда
    Настройки=СхемаКомпоновкиДанных.ВариантыНастроек[ИмяВарианта].Настройки;
КонецЕсли;  

ПарамВыбПериод=Новый ПараметрКомпоновкиДанных("ВыбПериод");
ПарамПериод=Новый ПараметрКомпоновкиДанных("Период");
ПарамДата=Новый ПараметрКомпоновкиДанных("Дата");

Если ЗначениеЗаполнено(Дата1) И ЗначениеЗаполнено(Дата2) И  (Настройки.ПараметрыДанных.Элементы[0].Параметр=ПарамВыбПериод ИЛИ Настройки.ПараметрыДанных.Элементы[0].Параметр=ПарамПериод)  Тогда
    Настройки.ПараметрыДанных.Элементы[0].Значение.ДатаНачала= Дата1;
    Настройки.ПараметрыДанных.Элементы[0].Значение.ДатаОкончания= КонецДня(Дата2);    
ИначеЕсли  ЗначениеЗаполнено(Дата1) И (Настройки.ПараметрыДанных.Элементы[0].Параметр=ПарамДата)    Тогда
    Настройки.ПараметрыДанных.Элементы[0].Значение.Дата= Дата1;
КонецЕсли;  

//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

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

//Выполним компоновку с помощью процессора компоновки
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки,,
                                                   ДанныеРасшифровки);

//Очищаем поле табличного документа
Результат = Новый ТабличныйДокумент;

//Выводим результат в табличный документ
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);

ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

Результат.ПоказатьУровеньГруппировокСтрок(3);

Каталог= КаталогВременныхФайлов();

ИмяДляФайла=ПРедставлениеОтчета;

Если не ЗначениеЗаполнено(ИмяДляФайла)  Тогда
      ИмяДляФайла=ИмяОтчета;
КонецЕсли;  

ИмяФайла="Отчет.xls";
Результат.Записать(ИмяФайла,ТипФайлаТабличногоДокумента.XLS);
6 Ns33
 
10.01.19
15:38
Лишнее выкинуть, это из универсальной отправки отчетов.
7 runoff_runoff
 
10.01.19
15:40
ОтчетОбъект.СкомпоноватьРезультат(ДокументРезультат);
8 alexandr_87
 
10.01.19
15:43
Спасибо большое!!!!
9 runoff_runoff
 
10.01.19
15:46
и это не нам с тобой спасибо..
10 Fragster
 
гуру
10.01.19
18:54
у меня вот такая функция используется для выполнения на основе схемы:

Функция СкомпоноватьОтчет(СхемаКомпоновкиДанных, КомпоновщикНастроек, ДокументРезультат, ДанныеРасшифровки, ВнешниеНаборыДанных = Неопределено) Экспорт
    
    ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеНаборыДанных, ДанныеРасшифровки, );
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);
    
КонецФункции
11 Fragster
 
гуру
10.01.19
19:00
А если есть ОтчетОбъект и выводить надо в таблицу, то тут вообще просто:
ОтчетОбъект.<Имя отчета> (ReportObject.<Имя отчета>)
СкомпоноватьРезультат (ComposeResult)
Синтаксис:

СкомпоноватьРезультат(<Результат>, <ИнформацияРасшифровки>)
Параметры:

<Результат> (обязательный)

Тип: ТабличныйДокумент.
Табличный документ, в который будет выводиться результат.
<ИнформацияРасшифровки> (необязательный)

Переменная, в которую будет записана информация расшифровки.
Если не указано - расшифровка заполняться не будет.
Описание:

Выполняет компоновку.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Пользователь может при помощи комбинации клавиш Ctrl + Break прервать выполнение отчета. При этом будет вызвано исключение.
12 ДенисЧ
 
10.01.19
19:03
(10) е позоврься. Из функции обязан быть возврат
13 Fragster
 
гуру
10.01.19
22:10
(12) Это кусок функции, минимально достаточный.