Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   СКД: Отображение данных в виде таблицы программным путём (http://forums.kuban.ru/f1040/skd_otobrazhenie_dannyh_v_vide_tablicy_programmnym_put%D1%91m-4090275.html)

Stolz 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";
НаборДанныхОбъект = ТекСхемаКомпоновкиДанных.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанныхОбъект.Имя = "НаборДанныхОбъект";
НаборДанныхОбъект.ИмяОбъекта = "ДвиженияПоОрганизациям";
НаборДанныхОбъект.ИсточникДанных = "ИсточникДанных";

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Stolz 22.04.2013 11:01

Уже нашёл:

После строк:

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

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

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

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


Текущее время: 14:57. Часовой пояс GMT +3.