Как передать табличную часть из внешней обработки в СКД (как параметр)

1. Vida 15 22.02.19 21:53 Сейчас в теме
Есть внешняя обработка с табличной частью. Из нее нужно сформировать отчет.
Отчет хотелось бы в СКД.
Вне СКД начало запроса бы выглядело так:
	Запрос.Текст = "ВЫБРАТЬ
	               |	ЗаказыНаПроизводство.ЗаказНаПроизводство
	               |ПОМЕСТИТЬ втЗаказыНаПроизводство
	               |ИЗ
	               |	&ЗаказыНаПроизводство КАК ЗаказыНаПроизводство
	               |;
	               |
и потом
	Запрос.УстановитьПараметр("ЗаказыНаПроизводство",Объект.ЗаказыНаПроизводство.Выгрузить());


А СКД на такую конструкцию ругается так:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(5, 2)}: Неверные параметры "ЗаказыНаПроизводство"
<<?>>&ЗаказыНаПроизводство КАК ЗаказыНаПроизводство


Как бы это обойти?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. kumi2012 103 23.02.19 08:05 Сейчас в теме
Вставьте передачу нужной таблицы значения в процедуру модуля:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;

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

Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
НаборыДанных = Новый Структура("ВашаТаблица", ВашаТаблица);

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

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

В схеме компоновки добавьте набор данных - объект "ВашаТаблица"
3. Vida 15 23.02.19 10:18 Сейчас в теме
(2)У меня внешняя обработка (не отчет)
ПриКомпоновкеРезультата
нету
4. kumi2012 103 23.02.19 12:05 Сейчас в теме
(3) Вы будете использовать СКД программно?
7. Vida 15 23.02.19 17:56 Сейчас в теме
(4)Собиралась как то так:
&НаКлиенте
Процедура ОтчетПодробный(Команда)
         
    табДок = новый ТабличныйДокумент;
    СерверЗаполнитьТабличныйДокумент(табДок);
    
    табДок.Показать();
    
КонецПроцедуры

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

//****************************************************************************
// ШАБЛОНЫ ДЛЯ ИСПОЛЬЗОВАНИЯ СКД
// {{
//****************************************************************************
// Заполняет переданный объект на основани СКД
//
// Параметры
//
//  СКД – собствеено настройки СКД
//
//  ОбъектДляЗагрузки – объект в который выгружаются данные, таблица значений, дерево значений, табличный документ
//
//  ИсполняемыеНастройки – Пользовательские настройки СКД если не указаны будут использованы настроки СКД по умолчанию
//
//  СтруктураПараметров - Структура – Передаваемые для СКД параметры
//
//  краткий лекбез, поправлю позже
//
Процедура ПолучитьДанныеНаОснованииСКД(СКД, ОбъектДляЗагрузки, ИсполняемыеНастройки = Неопределено, СтруктураПараметров = Неопределено, РасшифровкаСКД = Неопределено, МакетКомпоновки = Неопределено, ВнешниеНаборыДанных = Неопределено) Экспорт

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

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанных");
    Иначе
        ТипГенератора = Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений");
    КонецЕсли;

    Если ИсполняемыеНастройки = Неопределено Тогда

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

    КонецЕсли;

    Если СтруктураПараметров <> Неопределено Тогда

        КоллекцияЗначенийПараметров = ИсполняемыеНастройки.ПараметрыДанных.Элементы;

        Для каждого Параметр Из СтруктураПараметров Цикл

            НайденноеЗначениеПараметра = КоллекцияЗначенийПараметров.Найти(Параметр.Ключ);

            Если НайденноеЗначениеПараметра <> Неопределено Тогда

                НайденноеЗначениеПараметра.Использование = Истина;

                НайденноеЗначениеПараметра.Значение = Параметр.Значение;

            КонецЕсли;

        КонецЦикла;

    КонецЕсли;

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

    ПроцессорКомпановки = Новый ПроцессорКомпоновкиДанных;

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

    Если ТипЗнч(ОбъектДляЗагрузки) = Тип("ПолеТабличногоДокумента") ИЛИ ТипЗнч(ОбъектДляЗагрузки) = Тип("ТабличныйДокумент") Тогда

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

        ПроцессорВывода.УстановитьДокумент(ОбъектДляЗагрузки);

    Иначе

        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

        ПроцессорВывода.УстановитьОбъект(ОбъектДляЗагрузки);

    КонецЕсли;

    ПроцессорВывода.ОтображатьПроцентВывода = Истина;

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

КонецПроцедуры // ПолучитьДанныеНаОснованииСКД()
Показать
6. echo77 1884 23.02.19 12:55 Сейчас в теме
Вот, в данную процедуру отправляете Схему, ТабличныйДокумент(пустой), настройки схемы, Структуру в табличной частью и формируете.
Соответственно в схеме нужно создать наборданных-объект
8. MaxxiMiliSan 253 26.02.19 09:09 Сейчас в теме
Только программно:

Схема = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
СтруктураСТаблицами= Новый Структура("Таблица1,Таблица2", Таблица1, Таблица2);

ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, СтруктураСТаблицами);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот