Начальство любит отчеты. Дайте ему их! Дайте много!! Дайте быстро!!!
Как-то присутствовал на совещании: что делать сначала, формы или отчеты. Программисты справедливо говорят: нет форм - нет данных - не с чего отчеты делать. Представитель заказчика справедливо говорит: нет отчетов - весь ваш софт на... никому не нужен и платить начальство не станет, ему отчеты нужны. Ругались долго.
Обобщение опытного человека: делать надо формы, а сдавать отчеты. Соответственно, для создания отчетов нужна такая технология, чтоб аж заметно не было: раз - и отчет, два - и еще один. А формы, ясно-дело, бюджетировать по-полной.
Как делать отчеты БЫСТРО?
Очень просто. У нас есть база, в базе данные ("как клопы", цитируя известный сериал). Ну позовите базиста - пусть запрос напишет. Пусть вьюхой оформит. С параметром, если надо. С контекстным, если совсем круто. Он справится. А что дальше делать?
Берем Oracle APEX. Создаем в приложении "Отчеты для начальства" страницу. Или берем существующую:
Берем представление/запрос от базиста - он целых 15 минут его сочинял - и иерархический запрос применил, и аналитические функции. Oracle, работал много, однако:
select bd
, nvl(cou, 0) as cou, sum(cou) over (order by bd) as c_cou
, nvl(total_s, 0) as total_s, sum(total_s) over (order by bd) as c_total_s
, nvl(cash_s, 0) as cash_s, sum(cash_s) over (order by bd) as c_cash_s
, nvl(bank_s, 0) as bank_s, sum(bank_s) over (order by bd) as c_bank_s
from
(
select trunc(sale_date) as sd
, count(*) as cou
, sum(sale_summ) as total_s
, sum(decode(is_cash, 1,sale_summ, 0)) as cash_s
, sum(decode(is_cash, 1,0, sale_summ)) as bank_s
from sales_vi where shop_id = :P0_SHOP_ID group by trunc(sale_date)
),
(
select
(select min(trunc(sale_date)) from sales_vi where shop_id = :P0_SHOP_ID) + level - 1 as bd
from dual
connect by (select min(trunc(sale_date)) from sales_vi where shop_id = :P0_SHOP_ID) + level - 1 <= sysdate
)
where sd (+)= bd
order by bd
Берем таблицу и создаем в ней в один клик мышки экранный регион:
Говорим региону, что быть ему классическим отчетом:
Вставляем запрос от базиста:
Смотрим результат:
Начальство в восторге, но хочет пофильтровать, поанализировать.
Не вопрос. Говорим отчету, что он теперь не классический, а интерактивный:
Смотрим результат:
Начальство почти счастливо, но вот выгрузить бы. Ибо "Эксель - лучшая база". Понимаем, идем навстречу:
Всё.
Да, имена колонок можно перевести хоть на олбанский, хоть на еврейский - один из трех, хоть на марсианский - это просто отдельное поле.
"Разработка" Web отчета заняла минуту-другую, статья - гораздо больше.