Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания 1С8.0_Продол_3.doc
Скачиваний:
9
Добавлен:
01.03.2016
Размер:
1.46 Mб
Скачать

Отчет ПереченьУслуг

Отчет «Перечень услуг» будет содержать информацию о том, какие услуги и по какой цене оказывает OOO «На все руки мастер». На его примере мы познакомимся с возможностью получения последних значений из периодического регистра сведений и вывода иерархических справочников.

Создадим новый объект конфигурации Отчет «ПереченьУслуг». Перейдем на закладку «Макеты» и вызовем конструктов выходной формы.

Выберем объектную (ссылочную) таблицу справочника «Номенклатура» и виртуальную таблицу регистра сведений «Цены.СрезПоследних». Для того чтобы исключить неоднозначность имен в запросе, переименуем таблицу «Номенклатура» в «СпрНоменклатура».

Вызовем диалог ввода параметров виртуальной таблицы «ЦеныСрезПоследних» и укажем, что период будет передан в параметре «ДатаОтчета». Затем выберем из таблиц следующие поля:

  • «СпрНоменклатура.Родитель»,

  • «СпрНоменклатура.Ссылка»,

  • «ЦеныСрезПоследних.Цена»:

Перейдем на закладку «Связи» и сбросим флаг «Все» у таблицы регистра и установим его у таблицы справочника.

На закладке «Условия» зададим условие выбора элементов справочника «Номенклатура» - выбираемые элементы должны соответствовать виду номенклатуры переданному в параметре запроса «ВидНоменклатуры»:

На закладке «ОбъединенияЛЛсевдонимы» укажем, что поле «Родитель» будет иметь псевдоним «ГруппаУслуг», а поле «Ссылка» -«Услуга»:

Перейдем на закладку «Итоги» и укажем, что группировка будет производиться по полю «ГруппаУслуг» с типом итогов «Элементы и иерархия», а значения суммируемых полей задавать не станем:

На закладке «Отчет» сбросим флаг «Использовать построитель отчета».

На закладке «Выходная форма» отметим, что тип параметра «ДатаОтчета» будет Дата, а параметр «ВидНоменклатуры» в форме редактироваться не будет. Нажмем «ОК».

Откроем модуль формы и в процедуре «ПереченьУслуг» определим значение параметра запроса:

Запрос.УстановитьПараметрС'ВидНоменклатуры",

Перечисления.ВидыНоменклатуры.Услуга)

Запрос.УстановитьПараметр("ДатаОтчета".ДатаОтчета);

Теперь рассмотрим текст запроса, сформированный конструктором:

Запрос.Текст =

"ВЫБРАТЬ

| СпрНоменклатура.Родитеяь КАК ГруппаУслуг,

| СпрНоменклатура.Родитель.Представление,

I СпрНоменклатура.Ссылка КАК Услуга,

I СпрНоменклатура.Представление,

I ЦеныСрезПоследних.Цена

|ИЗ

I Справочник.Номенклатура КАК СпрНоменклатура

I ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Цены.СрезПоследних(&ДатаОтчета,)

| КАК ЦеныСрезПоследних

| ПО ЦеныСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка

|ГДЕ

I СпрНоменклатура.ВидНоменклатуры = &ВидНоменклатуры

|

|ИТОГИ ПО

| ГруппаУслугИЕРАРХИЯ";

Практически все конструкции, использованные в этом запросе, нам уже известны, за исключением ключевого слова ИЕРАРХИЯ, использованного в части описания итогов. Это ключевое слово позволяет рассчитывать итоги по иерархии справочника, однако поскольку в нашем случае какие либо итоги в отчете не нужны, мы использовали эту возможность для создания группировок по иерархии справочника «Номенклатура».

Теперь запустим 1С:Предприятие в режиме отладки и, прежде всего, откроем периодический регистр «Цены».

Добавим в него еще одно значение для услуги «Диагностика» новая цена услуги на 01.04.2002 (это позволит нам протестировать отчет):

Теперь выполним отчет «Перечень услуг» по состоянию на 31.03.2004:

Наш отчет правильно отражает цену услуги «Диагностика» на 31.04-200py6.

Еще раз выполним отчет, но теперь уже на другую дату 01.04.2004:

Как видите, показана новая цена услуги «Диагностика» - 350 руб.

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

Отчет РейтингКлиентов

Отчет «Рейтинг клиентов» будет показывать, каков доход от оказания услуг каждому из клиентов за все время работы OOO «На все руки мастер». На его примере мы продемонстрируем возможность использования диаграммы для отображения результата запроса.

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

Диаграмма

Диаграмма является элементом управления, предназначенным для размещения в таблицах и формах системы 1С:Предприятие диаграмм и графиков различного вида.

Логически диаграмма является совокупностью точек, серий и значений серий в точке:

Как правило, в качестве точек используются моменты или объекты, для которых мы получаем значения характеристик, а в качестве серий - характеристики, значения которых нас интересуют.

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

Диаграмма, как объект встроенного языка, имеет три области, которые позволяют управлять оформлением диаграммы - это область построения, область заголовка и область легенды:

Диаграмма может быть вставлена в форму либо в табличный Документ. Заполнение диаграммы данными возможно способами.

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

имена точек и серий. В случае с областью табличного документа имена точек и серий будут браться из верхней строки и левого столбца области; в случае с таблицей значений - из заголовков колонок и первой колонки.

Во-вторых, диаграмма может быть заполнена данными «вручную». Для этого нужно создать в диаграмме несколько серий и точек, а затем, используя метод УстановитьЗначение(), задать нужные значения для каждой пары серия - точка.

Следует отметить, что эти два способа заполнения диаграммы не могут комбинироваться.

В следующем примере мы будем использовать диаграмму, расположенную в форме и заполнять ее данными «вручную», используя метод УстановитьЗначение().

Создание отчета РейтингКлиентов

Создадим в конфигураторе новый объект конфигурации Отчет «РейтингКлиентов». Затем создадим основную форму отчета и расположим на ней поле выбора с именем «ПолеВыбора», подписью «Тип диаграммы:» и подсказкой «Выбор типа диаграммы» (Форма | Вставить элемент управления...):

Затем разместим под ним диаграмму с именем «Диаграмма». Изменим размеры областей диаграммы, и зададим текст области заголовка - «Рейтинг клиентов»:

В модуле формы создадим процедуру «Сформировать» с заготовкой для текста запроса:

Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = КонецПроцедуры

Установим курсор в предпоследней строке, перед точкой с запятой и вызовем конструктор запроса (Текст - Конструктор запроса...). Выберем виртуальную таблицу регистра накопления «Продажи.Обороты» и из нее одно поле «ПродажиОбороты.Клиент.Представление».

Затем добавим новое поле (иконка «Добавить» в командной панели над списком полей) и при помощи построителя выражений определим его как разность между выручкой и стоимостью:

В результате список выбранных полей будет иметь следующий вид:

На закладке «Объединения/Псевдонимы» укажем, что поле «ПродажиОбороты.Клиент.Представление» будет иметь псевдоним «Клиент», а вычисляемое поле - псевдоним «Доход»:

На закладке «Порядок» укажем, что строки результата нужно упорядочивать по убыванию значения поля «Доход». Нажмем «ОК» и посмотрим, какой текст сформировал конструктор запроса:

Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ

|ПродажиОбороты.Клиент.Представление КАК Клиент,

|ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот

|КАК Доход

|ИЗ

|РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

|УПОРЯДОЧИТЬ ПО

|ДоходУБЫВ"; КонецПроцедуры

По сравнению с предыдущими отчетами, текст запроса довольно прост; единственным интересным местом, на которое следует обратить внимание, является поле «Доход», являющееся результатом вычисления выражения:

ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СтоимостьОборот КАК Доход

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

Добавим в процедуру следующий текст (добавленный текст выделен жирным шрифтом):

Процедура Сформировать() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ

|ПродажиОбороты.Клиент.Представление КАК Клиент,

|ПродажиОбороты.ВыручкаОборот — ПродажиОбороты.СтоимостьОборот

|КАК Доход

|ИЗ

| РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты

!УПОРЯДОЧИТЬ ПО I ДоходУБЫВ";

ВыборкаРеэультатаЗапроса = Запрос.Выполнить().Выбрать();

Диаграмма = ЭлементыФормы.Диаграмма; //запретить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Ложь;

Диаграмма.АвтоТранспонирование = Ложь;

//создать единственную точку диаграммы ТочкаДиаграммы =

Диаграмма.УстановитьТочку("Доход");

//перебрать выборку результата запроса и создать серии // и значения

Пока ВыборкаРезультатаЗапроса.СледующнйО Цикл ТекущаяСерияДиаграммы = Диаграмма

.УстановитьСерию(ВыборкаРезультатаЗапроса.Клиент);

Диаграмма.УстановитьЗначение(ТочкаДиаграммы,ТекущаяСерияДиаграммы,

ВыборкаРезультатаЗапроса.Доход);

КонецЦикла;

//разрешить обновление и автотранспонирование диаграммы Диаграмма.Обновление = Истина; Диаграмма.АвтоТранспонирование = Истина;

Сначала, с помощью метода Выполнить() мы получаем результат запроса. Затем методом Выбрать() получаем выборку записей из результата запроса в переменной «ВыборкаРезультатаЗапроса».

Перед началом заполнения мы отключаем обновление и автотранспонирование диаграммы для того, чтобы заполнение данными выполнялось быстрее. После этого добавляем в диаграмму единственную точку. Затем мы организуем цикл по выборке из результата запроса и в цикле добавляем серии в нашу диаграмму. Каждому клиенту будет соответствовать своя серия. После этого мы устанавливаем значение точки, передавая методу УстановитьЗначение() точку, серию, для которой устанавливается значение в этой точке, и само значение.

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

Теперь создадим обработчик события формы «ПриОткрытии», и добавим в него установку значения поля выбора и типа диаграммы, и вызов нашей процедуры «Сформировать»: