КАТЕГОРИИ: Архитектура-(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) |
Перебрать выборку результата запроса и создать серии // и значения
ИЗ | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,) КАК ПродажиОбороты |УПОРЯДОЧИТЬ ПО | Период |
184 Использование основных объектов конфигурации Создание отчетов
ИТОГИ СУММА(Выручка) ПО | ОБЩИЕ, | Мастер, | Период"; Теперь, чтобы наглядно продемонстрировать смысл наших дальнейших действий, запустите 1С:Предприятие в режиме отладки и посмотрите на результат работы отчета «Выручка мастеров» за период c01.03.2004no30.04.2004:
В части описания запроса обратите внимание, что у источника данных кроме задания начала и окончания периода расчета итогов задана периодичность выбираемых данных - «День»: |из | РегистрНакопления.Продажи.Обороты(&ДатаНачала, &ДатаОкончания, День,) Именно благодаря этому у нас появляется возможность описать среди выбранных полей поле «Период». Далее в тексте запроса следует известная нам часть упорядочивания результатов, и в следующей части - описание итогов - мы видим новые для нас строки: |ИТОГИ СУММА(Выручка) ПО I ОБЩИЕ, | Мастер, | Период"; Помимо общих итогов, в нашем запросе будут рассчитаны промежуточные итоги по полям «Мастер» и «Период». Если вы помните, в начале раздела мы говорили, что этот отчет должен показывать данные с детализацией по всем дням в выбранном периоде. У нас же отображаются только те дни, для которых существуют ненулевые записи в таблице регистра накопления. Поэтому сейчас мы займемся тем, что изменим текст программы таким образом, чтобы в отчет попадала каждая дата из указанного периода. Вернемся к модулю отчета «ВыручкаМастеров» и в части описания итогов запроса уточним, каким образом должны рассчитываться итоги по полю «Период»: Запрос.Текст = "ВЫБРАТЬ |ПродажиОбороты.Мастер КАК Мастер, |ПродажиОбороты.Мастер.Представление, |ПродажиОбороты.ПериодКАКПериод, |ПродажиОбороты.Клиент, |ПродажиОбороты.Клиент.Представление, |ПродажиОбороты.ВыручкаОборот КАК Выручка 186 Использование основных объектов конфигурации Создание отчетов
1ИЗ 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.
188 Использование основных объектов конфигурации Создание отчетов
На этот раз результат выглядит гораздо лучше: Итак, на примере этого отчета мы продемонстрировали, как строить многоуровневые группировки в запросе, как обходить все даты в выбранном периоде и как управлять состоянием группировок в табличном документе. Отчет ПереченьУслуг
тчет «Перечень услуг» будет содержать информацию о том, какие услуги и по какой цене оказывает OOO «На все руки мастер». На его примере мы познакомимся с возможностью получения последних значений из периодического регистра сведений и вывода иерархических справочников. Создадим новый объект конфигурации Отчет «ПереченьУслуг». Перейдем на закладку «Макеты» и вызовем конструктов выходной формы. Выберем объектную (ссылочную) таблицу справочника «Номенклатура» и виртуальную таблицу регистра сведений «Цены.СрезПоследних». Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу «Номенклатура» в «СпрНоменклатура». Вызовем диалог ввода параметров виртуальной таблицы «ЦеныСрезПоследних» и укажем, что период будет передан в параметре «ДатаОтчета». Затем выберем из таблиц следующие поля: • «СпрНоменклатура.Родитель», • «СпрНоменклатура.Ссылка», • «ЦеныСрезПоследних.Цена»:
Перейдем на закладку «Связи» и сбросим флаг «Все» у таблицы регистра и установим его у таблицы справочника. 190 Использование основных объектов конфигурации Создание отчете
На закладке «Условия» зададим условие выбора элементов справочника «Номенклатура» - выбираемые элементы должны соответствовать виду номенклатуры переданному в параметре запроса «ВидНоменклатуры»: Откроем модуль формы и в процедуре «ПереченьУслуг» определим значение параметра запроса: Запрос.УстановитьПараметрС'ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Услуга) Запрос.УстановитьПараметр("ДатаОтчета".ДатаОтчета); На закладке «ОбъединенияЛЛсевдонимы» укажем, что поле «Родитель» будет иметь псевдоним «ГруппаУслуг», а поле «Ссылка» -«Услуга»: Перейдем на закладку «Итоги» и укажем, что группировка будет производиться по полю «ГруппаУслуг» с типом итогов «Элементы и иерархия», а значения суммируемых полей задавать не станем: На закладке «Отчет» сбросим флаг «Использовать построитель отчета». На закладке «Выходная форма» отметим, что тип параметра «ДатаОтчета» будет Дата, а параметр «ВидНоменклатуры» в форме редактироваться не будет. Нажмем «ОК». Теперь рассмотрим текст запроса, сформированный конструктором: Запрос.Текст = "ВЫБРАТЬ | СпрНоменклатура.Родитеяь КАК ГруппаУслуг, | СпрНоменклатура.Родитель.Представление, I СпрНоменклатура.Ссылка КАК Услуга, I СпрНоменклатура.Представление, I ЦеныСрезПоследних.Цена |ИЗ I Справочник.Номенклатура КАК СпрНоменклатура I ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета,) | КАК ЦеныСрезПоследних | ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка |ГДЕ I СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры | |ИТОГИ ПО | ГруппаУслугИЕРАРХИЯ"; Практически все конструкции, использованные в этом запросе, нам уже известны, за исключением ключевого слова ИЕРАРХИЯ, использованного в части описания итогов. Это ключевое слово позволяет рассчитывать итоги по иерархии справочника, однако поскольку в нашем случае какие либо итоги в отчете не нужны, мы использовали эту возможность для создания группировок по иерархии справочника «Номенклатура». Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр «Цены».
192 Использование основных объектов конфигурации Создание отчетов
Добавим в него еще одно значение для услуги «Диагностика» Еще раз выполним отчет, но теперь уже на другую дату
Теперь выполним отчет «Перечень услуг» по состоянию на 31.03.2004: Как видите, показана новая цена услуги «Диагностика» - 350 руб. Таким образом, на примере этого отчета мы показали, как при помощи запроса можно получить последние значения из периодического регистра сведений и как вывести группировки по иерархии справочника. Наш отчет правильно отражает цену услуги «Диагностика» на 31.04-200py6. 194 Использование основных объектов конфигурации Создание отчетов
Отчет РейтингКлиентов
тчет «Рейтинг клиентов» будет показывать, каков доход от оказания услуг каждому из клиентов за все время работы OOO «На все руки мастер». На его примере мы продемонстрируем возможность использования диаграммы для отображения результата запроса. Здесь стоит сделать оговорку о том что, используя построитель отчета, можно вывести данные в диаграмму исключительно с помощью конструктора выходной формы, что мы и покажем в конце главы. Однако для того, чтобы понимать, как устроена диаграмма, и каким образом можно заполнить ее данными, мы рассмотрим сначала более подробный вариант. Диаграмма
иаграмма является элементом управления, предназначенным для размещения в таблицах и формах системы 1С:Предприятие диаграмм и графиков различного вида. Логически диаграмма является совокупностью точек, серий и значений серий в точке: Значение серии в точке Как правило, в качестве точек используются моменты или объекты, для которых мы получаем значения характеристик, а в качестве серий - характеристики, значения которых нас интересуют. Например, диаграмма продаж видов номенклатуры по месяцам будет состоять из точек - месяцев, серий - видов номенклатуры и значений - оборотов продаж. Диаграмма, как объект встроенного языка, имеет три области, которые позволяют управлять оформлением диаграммы - это область построения, область заголовка и область легенды:
Область построения
Точка Серия Область легенды
Диаграмма может быть вставлена в форму либо в табличный Документ. Заполнение диаграммы данными возможно способами. Во-первых, можно заполнить диаграмму данными автоматически. Для этого используется свойство диаграммы ИсточникДанных. В качестве источника данных диаграммы может выступать область табличного документа (если диаграмма вставлена в табличный Документ), либо таблица значений. Общее требование к источнику Данных - он должен поставлять диаграмме (кроме самих данных)
196 Использование основных объектов конфигурации Создание отчетов
имена точек и серий. В случае с областью табличного документа имена точек и серий будут браться из верхней строки и левого столбца области; в случае с таблицей значений - из заголовков колонок и первой колонки. Во-вторых, диаграмма может быть заполнена данными «вручную». Для этого нужно создать в диаграмме несколько серий и точек, а затем, используя метод УстановитьЗначение(), задать нужные значения для каждой пары серия - точка. Следует отметить, что эти два способа заполнения диаграммы не могут комбинироваться. В следующем примере мы будем использовать диаграмму, расположенную в форме и заполнять ее данными «вручную», используя метод УстановитьЗначение(). Создание отчета РейтингКлиентов
оздадим в конфигураторе новый объект конфигурации Отчет «РейтингКлиентов». Затем создадим основную форму отчета и расположим на ней поле выбора с именем «ПолеВыбора», подписью «Тип диаграммы:» и подсказкой «Выбор типа диаграммы» (Форма | Вставить элемент управления...): Затем разместим под ним диаграмму с именем «Диаграмма». Изменим размеры областей диаграммы, и зададим текст области заголовка - «Рейтинг клиентов»: В модуле формы создадим процедуру «Сформировать» с заготовкой для текста запроса: Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = КонецПроцедуры Установим курсор в предпоследней строке, перед точкой с запятой и вызовем конструктор запроса (Текст | Конструктор запроса...). Выберем виртуальную таблицу регистра накопления «Продажи.Обороты» и из нее одно поле «ПродажиОбороты.Клиент.Представление». 198 Использование основных объектов конфигурации Создание отчетов
Затем добавим новое поле (иконка «Добавить» в командной панели над списком полей) и при помощи построителя выражений определим его как разность между выручкой и стоимостью: На закладке «Порядок» укажем, что строки результата нужно упорядочивать по убыванию значения поля «Доход». Нажмем «ОК» и посмотрим, какой текст сформировал конструктор запроса: Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Клиент.Представление КАК Клиент, | ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот | КАК Доход |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты |УПОРЯДОЧИТЬ ПО | ДоходУБЫВ"; КонецПроцедуры По сравнению с предыдущими отчетами, текст запроса довольно прост; единственным интересным местом, на которое следует обратить внимание, является поле «Доход», являющееся результатом вычисления выражения: В результате список выбранных полей будет иметь следующий вид: ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот КАК Доход На закладке «Объединения/Псевдонимы» укажем, что поле «ПродажиОбороты.Клиент.Представление» будет иметь псевдоним «Клиент», а вычисляемое поле - псевдоним «Доход»: Теперь обработаем результат запроса таким образом, чтобы данные отобразились в диаграмме, расположенной в форме отчета. Добавим в процедуру следующий текст (добавленный текст выделен жирным шрифтом): Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПродажиОбороты.Клиент.Представление КАК Клиент, | ПродажиОбороты.ВыручкаОборот — ПродажиОбороты.СтоимостьОборот | КАК Доход |ИЗ | РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты 200 Использование основных объектов конфигурации Создание отчетов
!УПОРЯДОЧИТЬ ПО I ДоходУБЫВ"; ВыборкаРеэультатаЗапроса = Запрос.Выполнить().Выбрать(); Диаграмма = ЭлементыФормы.Диаграмма; //запретить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Ложь; Диаграмма.АвтоТранспонирование = Ложь; //создать единственную точку диаграммы ТочкаДиаграммы = Диаграмма.УстановитьТочку("Доход"); Пока ВыборкаРезультатаЗапроса.СледующнйО Цикл ТекущаяСерияДиаграммы = Диаграмма .УстановитьСерию(ВыборкаРезультатаЗапроса.Клиент); Диаграмма.УстановитьЗначение(ТочкаДиаграммы,ТекущаяСерияДиаграммы, ВыборкаРезультатаЗапроса.Доход); КонецЦикла; //разрешить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Истина; Диаграмма.АвтоТранспонирование = Истина; Сначала, с помощью метода Выполнить() мы получаем результат запроса. Затем методом Выбрать() получаем выборку записей из результата запроса в переменной «ВыборкаРезультатаЗапроса». Перед началом заполнения мы отключаем обновление и автотранспонирование диаграммы для того, чтобы заполнение данными выполнялось быстрее. После этого добавляем в диаграмму единственную точку. Затем мы организуем цикл по выборке из результата запроса и в цикле добавляем серии в нашу диаграмму. Каждому клиенту будет соответствовать своя серия. После этого мы устанавливаем значение точки, передавая методу УстановитьЗначение() точку, серию, для которой устанавливается значение в этой точке, и само значение. После заполнения диаграммы данными мы включаем свойство «Обновление», чтобы новое состояние диаграммы было отображено, и «АвтоТранспонирование» для того, чтобы различные типы диаграмм, которые будут выбраны в поле выбора, отображались правильно. <#" Узнай больше! Следует сделать несколько замечаний no оптимизации заполнения диаграммы данными. Во-первых, перед началом заполнения диаграммы данными следует отключать обновление диаграммы (свойство диаграммы «Обновление»). Это значительно ускорит процесс заполнения, поскольку при включенном обновлении диаграмма будет выполнять пересчет и отрисовку автоматически. После того, как диаграмма будет заполнена данными, обновление диаграммы нужно снова включить. Во-вторых, перед началом заполнения диаграммы данными Автотранспонирование позволяет диаграмме анализировать данные и выбирать наиболее подходящее представление в зависимости от заданного типа диаграммы. Например, круговая диаграмма отображает значения нескольких серий в одной точке, а обычный график - как раз наоборот - значения одной серии в нескольких точках. Обратите внимание, что автотранспонирование диаграммы доступно только в режиме «ручного» заполнения данными. При использовании источника данных это свойство недоступно. После того, как диаграмма будет заполнена данными, автотранспонирование диаграммы можно снова включить, если в этом есть необходимость. Теперь создадим обработчик события формы «ПриОткрытии», и добавим в него установку значения поля выбора и типа диаграммы, и вызов нашей процедуры «Сформировать»: Процедура ПриОткрытии() // Заполним список поля выбора ПолеВыбора = ТипДиаграммы. Гистограмма; ЭлементыФормы.Диаграмма.ТипДиаграммы = ПолеВыбора; Сформировать(); КонецПроцедуры
202 Использование основных объектов конфигурации Создание отчетов
В теле модуля формы опишем заполнение списка выбора для поля выбора: Запустим 1С:Предприятие в режиме отладки и откроем отчет «РейтингКлиентов». Обратите внимание, что при наведении курсора на столбец гистограммы появляется подсказка:
СписокВыбора = ЭлементыФормы.ПолеВыбора.СписокВыбора; СписокВыбора.Добавить(ТипДиаграммы.График, "График"); СписокВыбора.Добавить(ТипДиаграммы.Гистограмма, "Гистограмма"); СписокВыбора.Добавить(ТипДиаграммы.ГистограммаОбъемная, "Гистограмма 3D"); СписокВыбора.Добавитъ(ТипДиаграммы.ГистограммаГоризонтальная, "Гистограмма горизонтальная"); СписокВыбора.Добавить(ТипДиаграммы.ГистограммаГоризонтальнаяОбъемная, "Гистограмма горизонтальная 3D"); СписокВыбора.Добавить(ТипДиаграммы.Круговая, "Круговая"); СписокВыбора.Добавить(ТипДиаграммы.КруговаяОбъемная,"Круговая объемная"); СписокВыбора.Добавить(ТипДиаграммы.Изометрическая," Изометрическая"); СгшсокВыбора.Добавить(ТипДиаграммы.ИзометрическаяНепрерывная, "Изометрическая непрерывная"); СписокВыбора.ДобавитьСГипДиаграммы.ИзометрическаяЛента, "Изометрическая лента"); СписокВыбора.Добавить(ТипДиаграммы.ИзометрическаяПирамида, "Изометрическая пирамида"); Теперь изменим тип диаграммы на «Круговая объемная>: И в заключение, создадим обработчик события поля выбора «При изменении», и выполним в нем установку типа диаграммы: ПроцедураПолеВыбораПриИзмененииЭлемент) ЭлементыФормы.Диаграмма.ТипДиаграммы = ПолеВыбора; Только что мы рассмотрели с вами общий случай заполнения Диаграммы данными. Однако если исходные данные могут быть получены в виде таблицы значений или области ячеек табличного Документа, существует более простой и эффективный способ 204 Использование основных объектов конфигурации
Дата добавления: 2014-11-16; Просмотров: 1059; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |