Имя: Пароль:
1C
 
Передача объекта ТаблицаЗначений в СКД в качестве параметра
0 Svetlana_Kazan
 
14.02.18
15:06
Помогите, пожалуйста, никак не получается найти ошибку. Может кто-то уже подобное делал...
С самим запросом проблем нет. Не получается именно с ТаблицейЗначений в СКД.

В модуле формы:
&НаСервере
Процедура СформироватьСКДНаСервере()
//Результат - ТабличныйДокумент
//АкцияТЗ - ТаблицаЗначений
//Период - СтандартныйПериод

АкцияТЗ = РеквизитФормыВЗначение("Акция");
Результат.Очистить();
НашОтчет = РеквизитФормыВЗначение("Отчет");
НашОтчет.ПечатьОтчетаСКД(НашОтчет, Результат, АкцияТЗ, Период);
КонецПроцедуры

&НаКлиенте
Процедура СформироватьСКД(Команда)
СформироватьСКДНаСервере();
КонецПроцедуры


В модуле объекта:
Процедура ПечатьОтчетаСКД(НашОтчет, Результат, АкцияТЗ, Период) экспорт
//Получаем схему из макета
СКДНастроек = НашОтчет.ПолучитьМакет("МакетСКД");
ТекстЗапроса = СКДНастроек.НаборыДанных.НаборДанных1.Запрос;

ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "АкцияТЗ КАК Акция", "&АкцияТЗ КАК Акция");

Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапроса;

//Запрос.
настройкиСКД = СКДНастроек.ВариантыНастроек.Найти("Основной").Настройки;

Запрос.УстановитьПараметр("АкцияТЗ", АкцияТЗ);
Запрос.УстановитьПараметр("КолПозиций", АкцияТЗ.Количество());
Запрос.УстановитьПараметр("ДатаНачала", Период.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ?(Период.ДатаОкончания = Дата(1,1,1), Дата(3999,12,31,23,59,59),Период.ДатаОкончания));

ТабДанных = Запрос.Выполнить().Выгрузить(); //ТабДанных содержит данные, которые получили при выполнении запроса (именно, то что должны)

ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаДанных", ТабДанных);

//Макет компоновки
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
ВнешнийНД = СКДНастроек.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
ИмяНД = СКДНастроек.НаборыДанных[0].Имя;
ЗаполнитьЗначенияСвойств(ВнешнийНД, СКДНастроек.НаборыДанных.НаборДанных1);

Для каждого ПолеСКД Из СКДНастроек.НаборыДанных[0].Поля Цикл
НовоеПоле = ВнешнийНД.Поля.Добавить(ТипЗнч(ПолеСКД));//(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ЗаполнитьЗначенияСвойств(НовоеПоле,ПолеСКД);
КонецЦикла;

СКДНастроек.НаборыДанных.Удалить(СКДНастроек.НаборыДанных[0]);
СКДНастроек.НаборыДанных[0].Имя = ИмяНД;
СКДНастроек.НаборыДанных[0].ИмяОбъекта = "ТаблицаДанных";

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

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

//Вывод результата
Результат.Очистить();
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(Результат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
1 Svetlana_Kazan
 
14.02.18
16:45
Может кто знает, а так должно быть, что при открытии СхемыКомпоновкиДанных
выходит ошибка:
Ошибка получения информации набора данных
по причине:
Ошибка в запросе набора данных
по причине:
{(6, 2)}: Таблица не найдена "АкцияТЗ"
<<?>>АкцияТЗ КАК Акция

При этом при во вкладке Настройки СКД недоступны ВыбранныеПоля(этой части вообще нет)
2 Tateossian
 
14.02.18
16:52
ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить("ТаблицаДанных", ТабДанных);

Посмотри на название таблицы
3 Svetlana_Kazan
 
14.02.18
17:50
(2) А как должно быть?

ВнешниеНаборыДанных = Новый Структура;
ВнешниеНаборыДанных.Вставить(ТаблицаДанных, ТабДанных);

Выполнение отчета дает пустой результат.
4 Evgenchik
 
14.02.18
17:54
+(2) Таблица должна называться также как у тебя в СКД.
"ТаблицаДанных" - такое название таблицы в СКД?
5 Svetlana_Kazan
 
14.02.18
18:07
(4) ,Да