Код:
Запрос = Новый Запрос("
| ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиОбороты.СуммаОборот КАК СуммаОборот
| ИЗ
| РегистрНакопления.Продажи.Обороты(&ПериодС,&ПериодПо,
| Месяц,,(Контрагент, Номенклатура)) КАК ПродажиОбороты
|
| ИТОГИ СУММА(КоличествоОборот) , СУММА(СуммаОборот) ПО
| Контрагент ИЕРАРХИЯ,
| Номенклатура ИЕРАРХИЯ,
| ПродажиОбороты.Период,
| ПродажиОбороты.Номенклатура.СтранаПроисхождения КАК Страна
| АВТОУПОРЯДОЧИВАНИЕ") ;
Запрос.УстановитьПараметр("ПериодС", ПериодC);
Запрос.УстановитьПараметр("ПериодПо", КонецДня(ПериодПо));
Результат = Запрос.Выполнить();
ПолеТабДок = ЭлементыФормы.ПолеТабличногоДокумента;
СводнаяТаблица = ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица1;
СводнаяТаблица.ИсточникДанных = Результат;
СводнаяТаблица.ОтображатьПоля = Истина;
Если СводнаяТаблица.Колонки.Количество() = 0 И
СводнаяТаблица.Строки.Количество() = 0 И |
СводнаяТаблица.Данные.Количество() = 0 Тогда |
|
СводнаяТаблица.Обновление = Ложь; |
// Зададим начальное расположение измерений на осях |
СводнаяТаблица.Колонки.Добавить("Контрагент"); |
СводнаяТаблица.Строки.Добавить("Номенклатура"); |
СводнаяТаблица.Данные.Добавить("КоличествоОборот"); |
СводнаяТаблица.Данные.Добавить("СуммаОборот"); |
Диаграмма= ЭлементыФормы.Диаграмма;
Диаграмма.Очистить ();
Диаграмма.Обновление = Ложь;
Диаграмма.Серии.Добавить("Серия 1");
Диаграмма.Серии.Добавить("Серия 2");
Диаграмма.Точки.Добавить("Точка 1");
Диаграмма.Точки.Добавить("Точка 2");
Диаграмма.Точки.Добавить("Точка 3");
Диаграмма.УстановитьЗначение(0,0,5);
Диаграмма.УстановитьЗначение(1,0,2);
Диаграмма.УстановитьЗначение(2,0,8);
Диаграмма.УстановитьЗначение(0,1,10);
Диаграмма.УстановитьЗначение(1,1,15);
Диаграмма.УстановитьЗначение(2,1,14);
Диаграмма.Обновление = Истина;
Диаграмма = ЭлементыФормы.Диаграмма;
Диаграмма.Очистить();
Диаграмма.Обновление = Ложь;
Диаграмма.СерииВСтроках = Ложь;
Диаграмма.ИсточникДанных = ТаблицаДанных;
Диаграмма.Обновление = Истина;
ТабДок = Новый ТабличныйДокумент;
//Получение макета
Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
//получим область как новый табличный документ (!)
Область = Макет.ПолучитьОбласть("Заголовок");
//выведем область в табличный документ
ТабДок.Вывести(Область);
//Шапка
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
//Состав
Для Каждого СтрСостава Из Состав Цикл
Область = Макет.ПолучитьОбласть("Строка"); |
ТабДок.Вывести(Область); |
//Подвал
Область = Макет.ПолучитьОбласть("Подвал");
ТабДок.Вывести(Область);
ТабДок.Показать(); //покажем на экране
А следующий пример формирует более сложный отчет. В нем выводятся горизонтальные и вертикальные области, устанавливаются различные свойства области:
ТабДок= ЭлементыФормы.ПолеТабДок;
ТабДок.Очистить();
Макет = ПолучитьМакет("Основной");
//получим область как объект ТабличныйДокумент
ОбластьТабДок = Макет.ПолучитьОбласть("ЛеваяЧастьШапки");
ТабДок.
ОбластьЯчеек = Макет.Область("НазваниеМесяца") ;
ОбластьЯчеек = Макет.Области[ "НазваниеМесяца" ];
ОбластьЯчеек = Макет.Области.НазваниеМесяца;
//получим область как новый табличный документ (!)
Область = Макет.ПолучитьОбласть("Заголовок");
//укажем параметры области
Область.Параметры.НомерДокумента = Номер;
Область.Параметры.От = Дата;
Область.Параметры.Кому = Контрагент;
ТабДок.Вывести(Область) ;
ТабДок.Вывести(Макет.ПолучитьОбласть("Шапка"));
Область = Макет.ПолучитьОбласть("Строка");
Для Каждого СтрСостава Из Состав Цикл
Область.Параметры.Заполнить(СтрСостава);
ТабДок.Вывести(Область);
КонецЦикла;
Область = Макет.ПолучитьОбласть{"Подвал");
Область.Параметры.ИтогоКоличество = Состав.Итог("Количество");
Область.Параметры.ИтогоСумма = Состав.Итог("Сумма");
РегОтв = РегистрыСведений.ОтветственныеСотрудники;
Область.Параметры.Директор = РегОтв.ПолучитьПоследнее(Дата).Директор;
ТабДок.Вывести(Область);
Обратите внимание на то, что был применен метод Заполнить, который позволяет в краткой форме присвоить значения всем параметрам. Соответствие устанавливается по именам параметров области и именам свойств переданного объекта. |
|
ТабДок = Новый ТабличныйДокумент;
ТекстЗапроса = "ВЫБРАТЬ
| СпрНоменклатура.Наименование,
| СпрНоменклатура.ЭтоГруппа,
| СпрНоменклатура.Ссылка КАК Ссылка,
| РегОстатки.КоличествоОстаток КАК Остаток
|ИЗ
| Справочник.Номенклатура КАК СпрНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ
| РегистрНакопления.УчетНоменклатуры.Остатки КАК РегОстатки
| ПО СпрНоменклатура.Ссылка = РегОстатки.Номенклатура
|ГДЕ ЭтоГруппа = Ложь
|ИТОГИ СУММА(Остаток) ПО Ссылка ТОЛЬКО ИЕРАРХИЯ";
Запрос = Новый Запрос(ТекстЗапроса);
Макет = ПолучитьМакет("Остатки");
Обл = Макет.ПолучитьОбласть("Шапка");
ТабДок.Вывести(Обл);
//зафиксируем шапку для удобного просмотра
ТабДок.ФиксацияСверху = ТабДок.ВысотаТаблицы;
Обл = Макет.Область("Строка");
ОбычныйШрифт = Обл.Шрифт;
ОбычныйЦветТекста = Обл.ЦветТекста;
ОбычныйЦветФона = Обл.ЦветФона;
//один раз получим область Строка
Обл = Макет.ПолучитьОбласть("Строка");
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Остаток = ?(Выборка.Остаток = Null, 0, Выборка.Остаток); |
Обл = Макет.Область("Строка"); |
Обл.Шрифт = ОбычныйШрифт; |
Обл.ЦветТекста = ОбычныйЦветТекста; |
Обл.ЦветФона = ОбычныйЦветФона; |
Если Выборка.ТипЗаписи()<>ТипЗаписиЗапроса.ИтогПоГруппировке Тогда |
Если Остаток <= 2 Тогда |
Процедура тпРезультатОбработкаРасшифровки(Элемент, Расшифровка,
СтандартнаяОбработка)
Если ТипЗнч(Расшифровка)=Тип("СправочникСсылка.Номенклатура") Тогда |
СтандартнаяОбработка = Ложь; //отключим стандартную обработку |
НовыйТабДок = формаРасшифровки.ЭлементыФормы.ТабДок; |
РасшифроватьСтроку(НовыйТабДок, Расшифровка); |
ФормаРасшифровки. Открыть (); |
КонецЕсли; |
Обработку расшифровок у ячейки можно отключить, если задать свойство ИспользованиеРасшифровки в значение «Без обработки». Это же свойство позволяет распространить расшифровку ячейки на всю строку, если установить его в значение «Строка». |
ТабДок.НачатьАвтоГруппировкуСтрок();
Пока Выборка.Следующий();
ТабДок.Вывести(ОбластьТабДок, Выборка.Уровень(), |
Выборка.Наименование, Ложь); |
ТабДок.ЗакончитьАвтоГруппировкуСтрок();
В качестве имени группировки назначается наименование товара. Все группы выводятся сначала свернутыми, но пользователь может развернуть любую группу с помощью маркера. При использовании группировок будет очень удобно, если установить у ячейки свойство АвтоОтступ в какоенибудь ненулевое значение, например, 5. Тогда система будет автоматически добавлять заданное количество пробелов слева текста ячейки, основываясь на текущем уровне группировки. В результате отчет будет иметь пригодный внешний вид для отображения иерархии данных. |
|
Для ручного управления группами применяются следующие методы объекта ТабличныйДокумент: |
|
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий();
ОбластьЯчеек = Макет.Область("Номенклатура"); |
ОбластьЯчеек.Примечание.Текст = Номенклатура.Комментарий; |
ОбластьТабДок = Макет.ПолучитьОбласть("Номенклатура "); |
ОбластьТабДок.Параметры.Номенклатура = Номенклатура; |
ТабДок.Вывести(ОбластьТабДок); |
Обратите внимание, что свойство Примечание у объекта ОбластьЯчеек является объектом типа Рисунок, а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д. |
|