Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Выполнение СКД программно

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

//Из схемы возьмем настройки по умолчанию

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

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

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

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

//Помещаем в переменную данные о расшифровке данных

ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

//Формируем макет, с помощью компоновщика макета

КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;

//Передаем в макет компоновки схему, настройки и данные расшифровки

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

//Выполним компоновку с помощью процессора компоновки

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

//Очищаем поле табличного документа

Результат = Новый ТабличныйДокумент;

//Выводим результат в табличный документ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Список тем форума
  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует