Разработка в 1С 8.0

  35790931     

Й способ формирования диаграммы


? на основе источника данных.  

 

При помощи свойства ИсточникДанных можно наполнять диаграмму данными, содержащимися в области табличного документа или в таблице значений.  

 

Если источником является таблица значений, ее первая колонка должна содержать имена точек диаграммы. Имена серий диаграммы берутся из заголовков колонок (заголовок первой колонки игнорируется).  

 

Следующая таблица значений может быть использована для формирования диаграммы:  



Й способ формирования диаграммы


? с помощью построителя отчета  

 

Последний способ, которым может быть сформирована диаграмма, ? это использование объекта ПостроительОтчета, если вызвать его метод Вывести и передать ему диаграмму в качестве первого параметра. Построитель отчета описан ниже.  



Для кнопки Выполнить создайте




 

Построитель.Выполнить();  

Построитель.Вывести();  

 

В результате будет сформирован следующий отчет с группировками.  

 

Это простейший пример использования построителя отчетов, который, тем не менее, демонстрирует, с какой легкостью можно сформировать отчет с двумя измерениями. Теперь предоставим пользователю возможность настройки отчета.  

 

Можно не бояться сложности задачи, это делается несколькими щелчками мыши! В форме необходимо разместить табличные поля и указать им свойство Данные в одно из следующих значений  



Формат


 

Можно задать формат представления значения, например, «БЛ=Нет; БИ=Да».  

 

Обычно значения ячеек допускается редактировать с помощью элементов управления, например, с помощью поля ввода, поля выбора, флажка и др. Подробнее про элементы управления в табличном документе рассказывается в документации.  

 



Именование областей


Редактировать имена областей можно через окно свойств или с помощью панели «Имена», предварительно выделив нужный диапазон ячеек.

Панель «Имена» имеет следующие кнопки:

Любая область уже имеет системное имя, например:

·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.С помощью построителя отчета .  


Точка 1

5  

10  

Точка 2  

2  

15  

Точка 3  

8  

14  

Приведенный ниже фрагмент устанавливает свойство ИсточникДанных для диаграммы:  






Событие Выбор


При двойном щелчке (или нажатии Enter) на ячейке табличного документа или рисунке возникает событие Выбор. Это же событие возникает при одинарном щелчке на гиперссылке. Программист может перехватить это событие с помощью процедуры-обработчика.



СодержитЗначение


 

Признак того, что ячейка содержит значение.  

 



ТипЗначения


Объект ОписаниеТипов, определяющий допустимые типы значений, например, типы «булево» и «число».  

 



Точка


? отметка на оси абсцисс, по которой будут установлены значения для каждой серии. Например, конкретная дата, на которую будут отображены курсы всех валют.



Уровень


Этот параметр используется для автоматической группи-ровки строк табличного документа с помощью методов Начать/ЗакончитьАвтоГруппировкуСтрок и Начать/ЗакончитьАвтоГруппировкуКолонок. Соседние строки с одинаковым уровнем будут отнесены к одной группе.



в форме которого располагается элемент


 

Ниже показан отчет, в форме которого располагается элемент управления ПолеТабличногоДокумента на закладке «Таблица».  

Рассмотрим на примере, как организовать расшифровку строки. Допустим, необходимо при щелчке на строке выдавать список расходных накладных по данному товару. Это реализуется следующим образом. В форме располагается элемент управления ПолеТабличногоДокумента с именем «ТаблицаРезультат», в свойствах которого указывается процедура-обработчик события ОбработкаРасшифровки.  


 

Рассмотрим, как заполняются параметры у объекта ТабличныйДокумент через его свойство-коллекцию Параметры. Следующий фрагмент демонстрирует задание параметров через это свойство:

Вывести()


 

Создает и показывает на экране новый табличный документ.  

 


Выводит в печатную форму очередной фрагмент табличного документа, добавляя его снизу, начиная с первой колонки.




(ОбластьТабДок);

Для НомМес = 1 По 12 Цикл

 

//получим область как объект ОбластьЯчеекТабличногоДокумента   

//свойства области нужно заполнять до ее вывода в печатную форму   

ОбластьЯчеек = Макет.



Вывести(Диаграмма, ИмяРесурса)


 

Выводит результат в переданную диаграмму. Можно указать ресурс для отображения на диаграмме. Если имя ресурса не указано, то выводится первый ресурс. На основе результата, полученного построителем, можно сформировать сводную таблицу, для чего необходимо установить у нее свойство ИсточникДанных:  

   

СводТаб = ЭлементыФормы.ПолеТабДок.ВстроенныеТаблицы.СводнаяТаблица;  

СводТаб.ИсточникДанных = Построитель;  

СводТаб.ОтображатьПоля = Истина;  

 

Из построителя можно извлечь результат запроса и сам запрос, с помощью свойства Результат и метода ПолучитьЗапрос:  

 

·Свойство Результат содержит объект типа РезультатЗапроса.Используя этот объект, можно открыть выборку из результата запроса и перебрать ее для своих целей, например, вывести новый отчет.  

 

·Метод ПолучитьЗапрос возвращает объект типа Запрос. В его свойстве Текст содержится текст итогового выполненного запроса, который в общем случае может не совпадать с исходным текстом запроса.  

 

Построитель отчета поддерживает расшифровку, когда пользователь дважды щелкает на ячейке табличного документа, сводной таблицы или на диаграмме и получает более детальный отчет. Есть возможность сделать так, чтобы построитель отчета в этом случае автоматически корректировал свои настройки, например, добавлял дополнительное условие отбора.  

 



Вывести(ТабДок)


Выводит отчет в переданный табличный документ.  

 



ЗакончитьГруппуКолонок


 

Заканчивает последнюю из начатых ранее групп колонок.  

 

С помощью свойств ИтогиСнизу и ИтогиСправа разработчик может изменять положение маркера группы (сверху или снизу для строк, слева или справа для колонок). Свойства ЦветТекстаГруппировки и ЦветФонаГруппировки позволяют легко управлять форматированием группировок.  



ЗакончитьГруппуСтрок


 

Заканчивает последнюю из начатых ранее групп строк.  

 



обработчик события анализирует расшифровку, и,


Следующая процедура- обработчик события анализирует расшифровку, и, если это элемент справочника Номенклатура, то вызывается процедура РасшифроватьСтроку, а стандартная обработка расшифровки отключается:

Значение


 

Собственно значение ячейки (области), например, чис-ло 120 или значение Истина.