logo

Пример написания простого отчета

В данной статье рассмотрен процесс создания простого отчета «от и до»: формирование запроса в базу данных (далее по тексту - БД), настройку параметров отчета, моделирование макета отчета. В качестве примера выбран отчет по контрагентам с выводом информации об отрасли и ответственном менеджере контрагента – условно назовем отчет – Новый отчет.

Дизайнер

В Дизайнере в разделе Отчеты создаем Новый отчет, который будет выводить информацию о контрагентах, отрасль и ответственных за контрагентов. Используем справочники Контрагенты, Пользователи, Отрасль. Данные объекты можно найти на вкладке Источники данных отчета, в правой части окна – Объекты БД. В Объектах БД можно найти нужный справочник по полю Отображаемое имя, затем посмотреть имя таблицы в БД по полю Имя.

7Редактирование источника данных

1.1. На верхней панели выбираем пункт Редактировать и указываем язык запроса SQL.

1.2. На вкладке Параметры вводим параметр для отчета Ответственный менеджер (Тип: Пользователь, связь: Одиночная).

1.2 . Пишем запрос, который будет выводить Наименование контрагента, его отрасль и ответственного за данного контрагента. Все указанные поля по сути хранятся в одной таблице Контрагенты, но некоторые поля хранят в них только идентификаторы других таблиц, поэтому в запросе соединим нужные таблицы. 

Текст запроса:

 

1
2
3
4
5
6
7
8
select Contractor.Name, ContractorIndustry.Industry, [User].FullName
from Contractor
left join [User] on Contractor.Responsible=[User].Id
left join ContractorIndustry on Contractor.Industry=ContractorIndustry.Id
{if {$OtvetstvennyyMenedzher} <> Null }
where
[User].Id = {$OtvetstvennyyMenedzher.Id}
{end if}

Описание запроса:

select Contractor.Name, ContractorIndustry.Industry, [User].FullNameвыбираем поле Name из таблицы Contractor (Наименование контрагента), поле Industry из таблицы ContractorIndustry (Отрасль контрагента), поле FullName из таблицы [User] (Ответственный за контрагента).

from Contractor – указываем из какой таблицы брать данные.

left join [User] on Contractor.Responsible=[User].Id – соединяем таблицу User с таблицей Contractor через поле Responsible (Ответственный) из таблицы Contractor с полем Id из таблицы User. Это необходимо, чтобы в результате отчета в выводимом поле Ответственный было полное имя сотрудника, не его ID.

left join ContractorIndustry on Contractor.Industry=ContractorIndustry.Idсоединяем таблицу ContractorIndustry с таблицей Contractor через поле Industry (Отрасль) из таблицы Contractor с полем Id из таблицы ContractorIndustry. Это необходимо, чтобы в результате отчета в выводимом поле Отрасль было название отрасли, не его ID.

{if {$OtvetstvennyyMenedzher} <> Null }

where

[User].Id = {$OtvetstvennyyMenedzher.Id}

{end if} - указываем условие, при котором при пустом значении параметра Ответственный менеджер, будут показываться все записи, а при указанном параметре – будет отображаться только отфильтрованная запись.

Макет отчета 

Переходим на вкладку Макет, где рисуем отображение отчета на FastReport в веб-части.

 

Выводим полученные Данные на макет: в часть Data: Данные. Переименовываем колонки.

 

 Для проверки полученного отчета можно запустить режим отладки по соответствующей кнопке – Отладка.

 

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

 

Укажем в параметре конкретного сотрудника – Администратор ELMA и снова покажем отчет:

 

В результате выведены те контрагенты, у которых ответственным менеджером назначен Администратор ELMA.

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

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