К списку форумов К списку тем
Регистрация    Правила    Главная форума    Поиск   
Имя: Пароль:
Рекомендовать в новости

СКД: Отображение данных в виде таблицы программным путём

Гость
0 - 22.04.2013 - 10:33
Доброго времени суток всем!

Нужно бы вывести данные в таблицу при помощи системы компоновки данных. Требуемый вид таблицы очень простой: в крайнем левой колонке по вертикали расположены организации, в первой строке располагаются заголовки периодов, а в теле таблицы - суммы. То есть, нечто вроде этого:

Организация 01.04.2013 02.04.2013 03.04.2013
АО МММ 2300 3400 3500
Русский дом Селенга 4300 2100 8700
Хопёр-Инвест 7800 2600 9800

Однако отчего-то заголовки периодов не выводятся, а вместо них отображается текст «Сумма»:

Организация Сумма Сумма Сумма
АО МММ 2300 3400 3500
Русский дом Селенга 4300 2100 8700
Хопёр-Инвест 7800 2600 9800

Код, реализующий вывод, расположен ниже. Сразу подчеркну, что приведённый пример является, так сказать, учебным и написан лишь для иллюстрации проблемы. Поэтому вопросами в духе «а зачем выбирать данные запросом, а потом передавать их в СКД» лучше не заморачиваться. :-)

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Период,
| Организация,
| СуммаОборот КАК Сумма
|ИЗ
| РегистрНакопления.ДенежныеСредства.Обороты(, , РЕГИСТРАТОР)";
ТабСведения = Запрос.Выполнить().Выгрузить();

ТекСхемаКомпоновкиДанных = Новый СхемаКомпоновкиДанных;
ИсточникДанных = ТекСхемаКомпоновкиДанных.ИсточникиДанных.Добавить( );
ИсточникДанных.Имя = "ИсточникДанных";
ИсточникДанных.ТипИсточникаДанных = "Local";
НаборДанныхОбъект = ТекСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип ("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъект.Имя = "НаборДанныхОбъект";
НаборДанныхОбъект.ИмяОбъекта = "ДвиженияПоОрганизациям";
НаборДанныхОбъект.ИсточникДанных = "ИсточникДанных";

ПолеНабораДанных = НаборДанныхОбъект.Поля.Добавить(Тип("ПолеНабораДан ныхСхемыКомпоновкиДанных"));
ПолеНабораДанных.Поле = "Период";
ПолеНабораДанных.ПутьКДанным = "Период";
ПолеНабораДанных.ТипЗначения = Новый ОписаниеТипов("Дата", , , Новый КвалификаторыДаты(ЧастиДаты.ДатаВремя));

ПолеНабораДанных = НаборДанныхОбъект.Поля.Добавить(Тип("ПолеНабораДан ныхСхемыКомпоновкиДанных"));
ПолеНабораДанных.Поле = "Организация";
ПолеНабораДанных.ПутьКДанным = "Организация";
ПолеНабораДанных.ТипЗначения = Новый ОписаниеТипов("СправочникСсылка.Организации");

ПолеНабораДанных = НаборДанныхОбъект.Поля.Добавить(Тип("ПолеНабораДан ныхСхемыКомпоновкиДанных"));
ПолеНабораДанных.Поле = "Сумма";
ПолеНабораДанных.ПутьКДанным = "Сумма";
ПолеНабораДанных.ТипЗначения = Новый ОписаниеТипов("Число");

ТекРесурс = ТекСхемаКомпоновкиДанных.ПоляИтога.Добавить();
ТекРесурс.Выражение = "Сумма(Сумма)";
ТекРесурс.ПутьКДанным = "Сумма";

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

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

ТекСтрокаГруппировки = ТекТаблица.Строки.Добавить();
ТекСтрокаГруппировки.Имя = "Строка";
ТекСтрокаГруппировки.Использование = Истина;

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

ТекКолонкаГруппировки = ТекТаблица.Колонки.Добавить();
ТекКолонкаГруппировки.Имя = "Колонка";
ТекКолонкаГруппировки.Использование = Истина;

ПолеГруппировки = ТекКолонкаГруппировки.ПоляГруппировки.Элементы.Доб авить(Тип("ПолеГруппировкиКомпоновкиДанных"));
ПолеГруппировки.Использование = Истина;
ПолеГруппировки.Поле = Новый ПолеКомпоновкиДанных("Период");

ВыбранныеПоля = ТекСтрокаГруппировки.Выбор.Элементы.Добавить(Тип(" АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование = Истина;

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

ВыбранноеПоле = ТекНастройки.Выбор.Элементы.Добавить(Тип("Выбранно еПолеКомпоновкиДанных"));
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных("Организация");
ВыбранноеПоле.Использование = Истина;

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

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

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

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

Вот, многоуважаемые гуру СКД, укажите, пожалуйста, в чём я неправ.



Гость
1 - 22.04.2013 - 11:01
Уже нашёл:

После строк:

ВыбранныеПоля = ТекСтрокаГруппировки.Выбор.Элементы.Добавить(Тип(" АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование = Истина;

Надо добавить:

ВыбранныеПоля = ТекКолонкаГруппировки.Выбор.Элементы.Добавить(Тип( "АвтоВыбранноеПолеКомпоновкиДанных"));
ВыбранныеПоля.Использование = Истина;

Всего-то. :-)


К списку вопросов






Copyright ©, Все права защищены