КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Перебрать выборку результата запроса и создать серии // и значения
ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,) КАК ПродажиОбороты |УПОРЯДОЧИТЬ ПО | Период |
Создание отчетов
| Мастер, | Период"; Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета «Выручка мастеров» за период c01.03.2004no30.04.2004:
| РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,)
Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки:
Вернемся к модулю отчета «ВыручкаМастеров» и в части описания итогов запроса уточним, каким образом должны рассчитываться итоги по полю «Период»:
|ПродажиОбороты.Мастер КАК Мастер, |ПродажиОбороты.Мастер.Представление, |ПродажиОбороты.ПериодКАКПериод, |ПродажиОбороты.Клиент, |ПродажиОбороты.Клиент.Представление, |ПродажиОбороты.ВыручкаОборот КАК Выручка
Создание отчетов
I РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,) I КАК ПродажиОбороты I !УПОРЯДОЧИТЬ ПО I Период I !ИТОГИ СУММА(Выручка) ПО I ОБЩИЕ, I Мастер, I Период ПЕРИОДАМЩДень, &ДатаНачала, &ДатаОкончания)";
И для того, чтобы все эти итоги попали в итоговый табличный документ, нам нужно будет уточнить порядок вывода итогов в выборке результата запроса:
.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаМастер.Следующий() Цикл ОбластьМастер.Параметры.Заполнить(ВыборкаМастер); ТабДок.Вывести(ОбластьМастер, ВыборкаМастер.Уровень()); ВыборкаПериод = ВыборкаМастер .Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам, "Пернод","Все"); Пока ВыборкаПериод.Следующий() Цикл ОбластьПериод.Параметры.Заполнить(ВыборкаПериод); ТабДок.Вьщесп(ОбластьПериодВыборкаПериод.Уровень()); ВыборкаДетали = ВыборкаПериод.Выбрать(); Пока ВыборкаДетали.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); ТабДок.Вьтести(ОбластьДетальныхЗаписей,ВыборкаДетали.Уровень()); КонецЦикла; КонецЦикла; КонецЦикла; Смысл внесенных нами уточнений заключается в том, что теперь при формировании выборки по группировке «Период» будут выбираться все имеющиеся значения группировок. Запустим 1С:Предприятие в режиме отладки и выполним отчет «ВыручкаМастеров» за период с 20.03.2004 по 20.04.2004. В целях экономии неинформативного пространства книги, мы не будем приводить результат работы отчета, но на словах объясним, что результат отчета будет содержать по 32 строки дат для каждого сотрудника. Очевидно, что такой внешний вид отчета абсолютно «нечитабелен», поэтому мы снова вернемся к модулю отчета и внесем небольшие уточнения в алгоритм вывода областей табличного документа:
ВыборкаПериод = ВыборкаМастер .Bыбрать(ОбходРезультата3anpoca.ПоГруппировкам, "Период", "Bce"); Пока ВыборкаПериод.Следующий() Цикл ОбластьПериод.Параметры.Заполнить(ВыборкаПериод); ТабДок.Вывести(ОбластьПериод, ВыборкаПериод.Уровень(),, Ложь); ВыборкаДетали = ВыборкаПериод.Выбрать(); Пока ВыборкаДетали.Следующий() Цикл ОбластьДетальныхЗаписей.Параметры.Заполнить(ВыборкаДетали); ТабДок.Вывести(ОбластьДетальныхЗаписей, ВыборкаДетали.Уровень(),,Ложь); КонецЦикла; КонецЦикла; КонецЦикла;
Запустим 1С:Предприятие в режиме отладки и снова выполним отчет «ВыручкаМастеров» за период с 20.03.2004 по 20.04.2004.
Создание отчетов
Отчет ПереченьУслуг
тчет «Перечень услуг» будет содержать информацию о том, какие услуги и по какой цене оказывает OOO «На все руки мастер». На его примере мы познакомимся с возможностью получения последних значений из периодического регистра сведений и вывода иерархических справочников. Создадим новый объект конфигурации Отчет «ПереченьУслуг». Перейдем на закладку «Макеты» и вызовем конструктов выходной формы. Выберем объектную (ссылочную) таблицу справочника «Номенклатура» и виртуальную таблицу регистра сведений «Цены.СрезПоследних». Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу «Номенклатура» в «СпрНоменклатура». Вызовем диалог ввода параметров виртуальной таблицы «ЦеныСрезПоследних» и укажем, что период будет передан в параметре «ДатаОтчета». Затем выберем из таблиц следующие поля: • «СпрНоменклатура.Родитель», • «СпрНоменклатура.Ссылка», • «ЦеныСрезПоследних.Цена»:
Перейдем на закладку «Связи» и сбросим флаг «Все» у таблицы регистра и установим его у таблицы справочника.
Использование основных объектов конфигурации Создание отчете
Откроем модуль формы и в процедуре «ПереченьУслуг» определим значение параметра запроса:
Запрос.УстановитьПараметрС'ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Услуга) Запрос.УстановитьПараметр("ДатаОтчета".ДатаОтчета);
Перейдем на закладку «Итоги» и укажем, что группировка будет производиться по полю «ГруппаУслуг» с типом итогов «Элементы и иерархия», а значения суммируемых полей задавать не станем:
На закладке «Отчет» сбросим флаг «Использовать построитель отчета». На закладке «Выходная форма» отметим, что тип параметра «ДатаОтчета» будет Дата, а параметр «ВидНоменклатуры» в форме редактироваться не будет. Нажмем «ОК». Теперь рассмотрим текст запроса, сформированный конструктором:
"ВЫБРАТЬ | СпрНоменклатура.Родитеяь КАК ГруппаУслуг, | СпрНоменклатура.Родитель.Представление, I СпрНоменклатура.Ссылка КАК Услуга, I СпрНоменклатура.Представление, I ЦеныСрезПоследних.Цена |ИЗ I Справочник.Номенклатура КАК СпрНоменклатура I ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета,) | КАК ЦеныСрезПоследних | ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка |ГДЕ I СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры | |ИТОГИ ПО | ГруппаУслугИЕРАРХИЯ";
Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр «Цены».
Создание отчетов
Еще раз выполним отчет, но теперь уже на другую дату
Теперь выполним отчет «Перечень услуг» по состоянию на 31.03.2004:
Как видите, показана новая цена услуги «Диагностика» - 350 руб. Таким образом, на примере этого отчета мы показали, как при помощи запроса можно получить последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника.
Создание отчетов
тчет «Рейтинг клиентов» будет показывать, каков доход от оказания услуг каждому из клиентов за все время работы OOO «На все руки мастер». На его примере мы продемонстрируем возможность использования диаграммы для отображения результата запроса. Здесь стоит сделать оговорку о том что, используя построитель отчета, можно вывести данные в диаграмму исключительно с помощью конструктора выходной формы, что мы и покажем в конце главы. Однако для того, чтобы понимать, как устроена диаграмма, и каким образом можно заполнить ее данными, мы рассмотрим сначала более подробный вариант. Диаграмма
иаграмма является элементом управления, предназначенным для размещения в таблицах и формах системы 1С:Предприятие диаграмм и графиков различного вида. Логически диаграмма является совокупностью точек, серий и значений серий в точке: Значение серии в точке Как правило, в качестве точек используются моменты или объекты, для которых мы получаем значения характеристик, а в качестве серий - характеристики, значения которых нас интересуют. Например, диаграмма продаж видов номенклатуры по месяцам будет состоять из точек - месяцев, серий - видов номенклатуры и значений - оборотов продаж. Диаграмма, как объект встроенного языка, имеет три области, которые позволяют управлять оформлением диаграммы - это область построения, область заголовка и область легенды:
Область построения
Точка Серия Область легенды
Диаграмма может быть вставлена в форму либо в табличный Документ. Заполнение диаграммы данными возможно способами. Во-первых, можно заполнить диаграмму данными автоматически. Для этого используется свойство диаграммы ИсточникДанных. В качестве источника данных диаграммы может выступать область табличного документа (если диаграмма вставлена в табличный Документ), либо таблица значений. Общее требование к источнику Данных - он должен поставлять диаграмме (кроме самих данных)
Использование основных объектов конфигурации Создание отчетов
Во-вторых, диаграмма может быть заполнена данными «вручную». Для этого нужно создать в диаграмме несколько серий и точек, а затем, используя метод УстановитьЗначение(), задать нужные значения для каждой пары серия - точка. Следует отметить, что эти два способа заполнения диаграммы не могут комбинироваться. В следующем примере мы будем использовать диаграмму, расположенную в форме и заполнять ее данными «вручную», используя метод УстановитьЗначение(). Создание отчета РейтингКлиентов
оздадим в конфигураторе новый объект конфигурации Отчет «РейтингКлиентов». Затем создадим основную форму отчета и расположим на ней поле выбора с именем «ПолеВыбора», подписью «Тип диаграммы:» и подсказкой «Выбор типа диаграммы» (Форма | Вставить элемент управления...): Затем разместим под ним диаграмму с именем «Диаграмма». Изменим размеры областей диаграммы, и зададим текст области заголовка - «Рейтинг клиентов»:
В модуле формы создадим процедуру «Сформировать» с заготовкой для текста запроса:
Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = КонецПроцедуры
Создание отчетов
На закладке «Порядок» укажем, что строки результата нужно упорядочивать по убыванию значения поля «Доход». Нажмем «ОК» и посмотрим, какой текст сформировал конструктор запроса:
Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Клиент.Представление КАК Клиент, | ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот | КАК Доход |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты |УПОРЯДОЧИТЬ ПО | ДоходУБЫВ"; КонецПроцедуры
В результате список выбранных полей будет иметь следующий вид: ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот КАК Доход
Теперь обработаем результат запроса таким образом, чтобы данные отобразились в диаграмме, расположенной в форме отчета. Добавим в процедуру следующий текст (добавленный текст выделен жирным шрифтом):
Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Клиент.Представление КАК Клиент, | ПродажиОбороты.ВыручкаОборот — ПродажиОбороты.СтоимостьОборот | КАК Доход |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
Создание отчетов
ВыборкаРеэультатаЗапроса = Запрос.Выполнить().Выбрать(); Диаграмма = ЭлементыФормы.Диаграмма; //запретить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Ложь; Диаграмма.АвтоТранспонирование = Ложь; //создать единственную точку диаграммы ТочкаДиаграммы = Диаграмма.УстановитьТочку("Доход"); Пока ВыборкаРезультатаЗапроса.СледующнйО Цикл ТекущаяСерияДиаграммы = Диаграмма .УстановитьСерию(ВыборкаРезультатаЗапроса.Клиент); Диаграмма.УстановитьЗначение(ТочкаДиаграммы,ТекущаяСерияДиаграммы, ВыборкаРезультатаЗапроса.Доход); КонецЦикла; //разрешить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Истина; Диаграмма.АвтоТранспонирование = Истина;
Перед началом заполнения мы отключаем обновление и автотранспонирование диаграммы для того, чтобы заполнение данными выполнялось быстрее. После этого добавляем в диаграмму единственную точку. Затем мы организуем цикл по выборке из результата запроса и в цикле добавляем серии в нашу диаграмму. Каждому клиенту будет соответствовать своя серия. После этого мы устанавливаем значение точки, передавая методу УстановитьЗначение() точку, серию, для которой устанавливается значение в этой точке, и само значение. После заполнения диаграммы данными мы включаем свойство «Обновление», чтобы новое состояние диаграммы было отображено, и «АвтоТранспонирование» для того, чтобы различные типы диаграмм, которые будут выбраны в поле выбора, отображались правильно. <#" Узнай больше! Следует сделать несколько замечаний no оптимизации заполнения диаграммы данными. Во-первых, перед началом заполнения диаграммы данными следует отключать обновление диаграммы (свойство диаграммы «Обновление»). Это значительно ускорит процесс заполнения, поскольку при включенном обновлении диаграмма будет выполнять пересчет и отрисовку автоматически. После того, как диаграмма будет заполнена данными, обновление диаграммы нужно снова включить. Во-вторых, перед началом заполнения диаграммы данными Автотранспонирование позволяет диаграмме анализировать данные и выбирать наиболее подходящее представление в зависимости от заданного типа диаграммы. Например, круговая диаграмма отображает значения нескольких серий в одной точке, а обычный график - как раз наоборот - значения одной серии в нескольких точках. Обратите внимание, что автотранспонирование диаграммы доступно только в режиме «ручного» заполнения данными. При использовании источника данных это свойство недоступно. После того, как диаграмма будет заполнена данными, автотранспонирование диаграммы можно снова включить, если в этом есть необходимость. Теперь создадим обработчик события формы «ПриОткрытии», и добавим в него установку значения поля выбора и типа диаграммы, и вызов нашей процедуры «Сформировать»:
ПолеВыбора = ТипДиаграммы. Гистограмма; ЭлементыФормы.Диаграмма.ТипДиаграммы = ПолеВыбора; Сформировать(); КонецПроцедуры
Создание отчетов
Запустим 1С:Предприятие в режиме отладки и откроем отчет «РейтингКлиентов». Обратите внимание, что при наведении курсора на столбец гистограммы появляется подсказка:
СписокВыбора.Добавить(ТипДиаграммы.График, "График"); СписокВыбора.Добавить(ТипДиаграммы.Гистограмма, "Гистограмма"); СписокВыбора.Добавить(ТипДиаграммы.ГистограммаОбъемная, "Гистограмма 3D"); СписокВыбора.Добавитъ(ТипДиаграммы.ГистограммаГоризонтальная, "Гистограмма горизонтальная"); СписокВыбора.Добавить(ТипДиаграммы.ГистограммаГоризонтальнаяОбъемная, "Гистограмма горизонтальная 3D"); СписокВыбора.Добавить(ТипДиаграммы.Круговая, "Круговая"); СписокВыбора.Добавить(ТипДиаграммы.КруговаяОбъемная,"Круговая объемная"); СписокВыбора.Добавить(ТипДиаграммы.Изометрическая," Изометрическая"); СгшсокВыбора.Добавить(ТипДиаграммы.ИзометрическаяНепрерывная, "Изометрическая непрерывная"); СписокВыбора.ДобавитьСГипДиаграммы.ИзометрическаяЛента, "Изометрическая лента"); СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяПирамида, "Изометрическая пирамида");
Теперь изменим тип диаграммы на «Круговая объемная>:
И в заключение, создадим обработчик события поля выбора «При изменении», и выполним в нем установку типа диаграммы:
ЭлементыФормы.Диаграмма.ТипДиаграммы = ПолеВыбора; Только что мы рассмотрели с вами общий случай заполнения Диаграммы данными. Однако если исходные данные могут быть получены в виде таблицы значений или области ячеек табличного Документа, существует более простой и эффективный способ
Использование основных объектов конфигурации
Дата добавления: 2014-11-16; Просмотров: 1059; Нарушение авторских прав?; Мы поможем в написании вашей работы! |