Й способ формирования диаграммы
? на основе источника данных.
|
При помощи свойства ИсточникДанных можно наполнять диаграмму данными, содержащимися в области табличного документа или в таблице значений. |
|
Если источником является таблица значений, ее первая колонка должна содержать имена точек диаграммы. Имена серий диаграммы берутся из заголовков колонок (заголовок первой колонки игнорируется). |
|
Следующая таблица значений может быть использована для формирования диаграммы: |
Й способ формирования диаграммы
? с помощью построителя отчета
|
Последний способ, которым может быть сформирована диаграмма, ? это использование объекта ПостроительОтчета, если вызвать его метод Вывести и передать ему диаграмму в качестве первого параметра. Построитель отчета описан ниже. |
Для кнопки Выполнить создайте
Построитель.Выполнить(); |
Построитель.Вывести(); |
|
В результате будет сформирован следующий отчет с группировками. |
|
Это простейший пример использования построителя отчетов, который, тем не менее, демонстрирует, с какой легкостью можно сформировать отчет с двумя измерениями. Теперь предоставим пользователю возможность настройки отчета. |
|
Можно не бояться сложности задачи, это делается несколькими щелчками мыши! В форме необходимо разместить табличные поля и указать им свойство Данные в одно из следующих значений |
Формат
Можно задать формат представления значения, например, «БЛ=Нет; БИ=Да». |
|
Обычно значения ячеек допускается редактировать с помощью элементов управления, например, с помощью поля ввода, поля выбора, флажка и др. Подробнее про элементы управления в табличном документе рассказывается в документации. |
|
Именование областей
Редактировать имена областей можно через окно свойств или с помощью панели «Имена», предварительно выделив нужный диапазон ячеек.
Панель «Имена» имеет следующие кнопки:
Любая область уже имеет системное имя, например:
· | R5C3 ? ячейка в 5-й строке и 3-й колонке; |
· | R5 ? 5-я строка; |
· | СЗ ? 3-я колонка; |
· | R5C4:R6C5 ? диапазон ячеек; |
· | СЗ:С5 ? ячейки, входящие с 3-ю по 5-ю колонку; |
· | R2:R6 ? ячейки, входящие с 2-ю по 6-ю строки; |
· | Т ? табличный документ в целом; |
· | D5 ? 5-й рисунок (графический объект). |
Разработчик может задать собственное имя для области, например, «Шапка», и использовать его при формировании табличного документа.
Для вывода пересечения горизонтальной и вертикальной секции можно использовать конструкцию с вертикальной чертой, например, «Обл = Макет.ПолучитьОбласть("Строка | Колонка")». Второй вариант ? задать имя для пересечения и работать с этой областью, как с любой другой.
ЭлементУ правления
Содержит элемент управления для редактирования значе-ния, например, флажок. |
|
Код:
Запрос = Новый Запрос("
| ВЫБРАТЬ
| ПродажиОбороты.Контрагент КАК Контрагент,
| ПродажиОбороты.Номенклатура КАК Номенклатура,
| ПродажиОбороты.КоличествоОборот КАК КоличествоОборот,
| ПродажиОбороты.СуммаОборот КАК СуммаОборот
| ИЗ
| РегистрНакопления.Продажи.Обороты(&ПериодС,&ПериодПо,
| Месяц,,(Контрагент, Номенклатура)) КАК ПродажиОбороты
|
| ИТОГИ СУММА(КоличествоОборот) , СУММА(СуммаОборот) ПО
| Контрагент ИЕРАРХИЯ,
| Номенклатура ИЕРАРХИЯ,
| ПродажиОбороты.Период,
| ПродажиОбороты.Номенклатура.СтранаПроисхождения КАК Страна
| АВТОУПОРЯДОЧИВАНИЕ") ;
Запрос.УстановитьПараметр("ПериодС", Период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. Тогда система будет автоматически добавлять заданное количество пробелов слева текста ячейки, основываясь на текущем уровне группировки. В результате отчет будет иметь пригодный внешний вид для отображения иерархии данных. |
|
Для ручного управления группами применяются следующие методы объекта ТабличныйДокумент: |
|
Выборка = Справочники.Номенклатура.Выбрать();
Пока Выборка.Следующий();
ОбластьЯчеек = Макет.Область("Номенклатура"); |
ОбластьЯчеек.Примечание.Текст = Номенклатура.Комментарий; |
ОбластьТабДок = Макет.ПолучитьОбласть("Номенклатура "); |
ОбластьТабДок.Параметры.Номенклатура = Номенклатура; |
ТабДок.Вывести(ОбластьТабДок); |
Обратите внимание, что свойство Примечание у объекта ОбластьЯчеек является объектом типа Рисунок, а не простой строкой. Через этот объект можно редактировать внешний вид примечания, шрифт и цвет текста, фон, линии и т.д. |
|
НачатьГруппуКолонок
Начинает новую группу колонок. Можно создавать вложен-ные группы колонок. |
|
НачатьГруппуСтрок
Начинает новую группу строк. Можно создавать вложенные группы строк. |
|
Номенклатура.*,Контрагент.*}
ИТОГИ Сумма(Количество), Сумма(Сумма) ПО ОБЩИЕ |
|
Обратите внимание на параметры «{&ПериодС}» и «{&ПериодПо}». Эти конструкции при обычном выполнении запроса игнорируются, а при установке свойства Текст построителя они распознаются как поля для отбора, т.е. пользователь сможет указать для них условия отбора. |
|
Конструкция «{ИТОГИ ПО ...}» распознается как ресурсы для построителя отчета. Указание точки со звездочкой («.*») говорит о том, что в построителе будет доступно не только само поле, но и все его вложенные поля, например, реквизиты справочника. |
|
Область
Позволяет получить область как объект типа ОбластьЯчеекТабличногоДокумента.
("НазваниеМесяца");
ОбластьЯчеек.Шрифт = Новый Шрифт(,,Истина); //жирный |
ОбластьЯчеек.Текст = НомМес; |
|
//получим область как объект ТабличныйДокумент |
ОбластьТабДок = Макет. |
Общая схема работы
Основные методы формирования печатной формы следующие:
Открыта
Признак того, что выводимая группа будет открыта (развернута).
Следующий пример выводит список товаров с группировками в отчете: |
ПолучитьОбласть
Позволяет получить область как объект типа ТабличныйДокумент.
Обратите внимание на различие методов Область и ПолучитьОбласть:
· | Метод Область() предоставляет доступ к части табличного документа. Он возвращает объект ОбластьЯчеекТабличногоДокумента, предназначенный для установки форматирования области ячеек, установки текста, значения, примечания и расшифровки. Этот объект можно передать в методы ВставитьОбласть и УдалитьОбласть. |
|
· | Метод ПолучитьОбласть() создает отдельный табличный до-кумент из указанной области. Он возвращает объект ТабличныйДокумент, который можно передать в методы Вывести и Присоединить. |
Построитель ИзмеренияКолонки
? измерения отчета по ко-лонкам, например, Контрагент.Вид;
Построитель.ИзмеренияСтроки
? измерения отчета по стро-кам, например, Номенклатура;
Построитель.ВыбранныеПоля
? выбранные поля для вывода в отчет.
|
Ниже приведена простая форма, позволяющая управлять настройками построителя отчета: |
|
Пользователь может сконструировать требуемый ему отчет, указав все необходимые настройки построителя отчета. Остальное сделает система, от разработчика фактически больше ничего не требуется. |
|
Например, сделаем поле Контрагент измерением колонки, а не строки, тогда будет сформирован следующий кросс-отчет: |
|
|
Присоединить
Присоединяет к печатной форме очередной фрагмент табличного документа справа, начиная со строки, с которой выводился предыдущий фрагмент методом Вывести.
(ОбластьТабДок);
К области можно обращаться не только через метод Область, но и через свойство-коллекцию Области объекта ТабличныйДокумент.
Следующие примеры эквивалентны друг другу:
Серия
? последовательность значений по одному измерению, например, курс заданной валюты за несколько дней.
Ниже на рисунке показаны основные составные части диаграммы: |
|
Диаграмма может быть сформирована следующими способами: |
|
1. «Вручную» ? разработчик средствами встроенного языка создает новые серии, добавляет точки, устанавливает их значения. |
2. На основе таблицы значений или табличного документа (свойство ИсточникДанных). |
3. | С помощью построителя отчета . |