Осталась 3-я часть ЭТОЙ технологии.
Генератор отчётов.
Полезный инструмент, многие даже в него заходили, но без обьяснения (только лишь из вида рабочего стола генератора) действительно непонятно, как оно работает.
Итак.
Пусть имеется таблица:
Продажи(КодТовара, КодНоменклатурнойГруппы, КодТорговойТочки, НаСколькоПродали)
Пока оставляем в стороне то, как именно мы выкрутили из общей базы данных системы эту таблицу, в частности, сумму продаж этого товара в этой торговой точке. Пусть уже есть готовая таблица за какой-то период.
Также оставляем в стороне то, в каком смысле это КодТовара, это наш внутренний код, или код из классификатора номенклатуры (чисто нашего или ощепринятого).
Нам надо получить итоги продаж по каждой торговой точке и всего по всем.
А внутри каждой торговой точки подытоги по каждому виду товара.
Видимо, хозяин хочет видеть общую картину, какой лоток успешнее, и в каком лотке что лучше берут.
Генератору отчётов тем или иным способом сообщают, по каким полям формировать итоги.
По полям: КодТорговойТочки, а внутри - по полю КодНоменклатурнойГруппы.
Всего итого обычно он может показать без особого указания.
Что делает генератор?
1. Он всю таблицу сортирует по полю КодТорговойТочки То есть строки переставляются так, чтобы строки с одинаковым кодом лотка стояли рядом.
2. Внутри каждого лотка он сортирует по полю КодНоменклатурнойГруппы так, чтобы одинаковые виды товаров стояли рядом.
Теперь будем двигаться по этой дважды отсортированной таблице сверху вниз.
(Конечно, лучше было бы нарисовать, так для лучшего усвоения вы сами и нарисуйте:). Я серьёзно.
Генератор заводит две ячейки для сумм:
СуммаПоГруппе и
СуммаПоТорговойТочке.
Перед движением в суммах нули.
При движении по строкам в ОБЕ суммы на каждой строке прибавляется НаСколькоПродали.
Как только в строке изменилось поле КодНоменклатурнойГруппы (а оно изменится ПЕРВЫМ - проверьте - и при этом поле КодТорговойТочки
пока ещё не поменялось), генератор делает следующее:
Он в заданное место отчёта с заданной красотой выводит ячейку СуммаПоГруппе. При этом, как правило, он может слазить в справочник
ГруппыТоваров (КодНоменклатурнойГруппы, Название)
и напечатать рядом с суммой по группе название группы:
Крепёж 850.00
После этого СуммаПоГруппе сбрасывается.
Пошла следуюшая группа товаров.
Вот уже кончились строки по текущему лотку.
Генератор лезет в справочник
Лотки(КодТорговойТочки,Название) за названием лотка,
печатает ячейку СуммаПоТорговойТочке:
Возле автовокзала 3350
и сбрасывает обе суммы.
Когда доходит до конца таблицы, то может напечатать всего итого, если мы затребуем.
Получилось что-то вроде
Крепёж 850.0
Сигареты 2500.0
Возле автовокзала 3350
Крепёж 3005
Сигареты 2000
Кондитерка 300
На авторынке 5305
Крепёж 100
Сигареты 500
Кондитерка 2600
В парке 3200
..... и т.д.
То есть сначала идут внутренние суммы, потом итого по тому, что выше.
Эту странную выдачу можно сделать более красивой, например - развернуть по горизонтали об этом далее.
Но рабочий стол генератора отчётов размечен именно в соответствии с тем, что нарисовано выше:
==== Общее =====
==== Начало "КодТорговойТочки" ====
==== Начало "КодНоменклатурнойГруппы" ====
==== Детальные записи ======
==== Детальные записи ======
==== Конец "КодНоменклатурнойГруппы" ====
==== Конец "КодТорговойТочки" ====
==== Общее =====
Можно малость украсить:
==== Общее =====
Таблица продаж Первомайск за январь
==== Начало "КодТорговойТочки" ====
По %%"Название" из Лотки.КодТорговойТочки=КодТорговойТочки%%
==== Начало "КодНоменклатурнойГруппы" ====
==== Детальные записи ======
==== Детальные записи ======
==== Конец "КодНоменклатурнойГруппы" ====
%%"Название" из ГруппыТоваров.КодНоменклатурнойГруппы=КодНоменклатурнойГруппы%%% %%Сумма%%
==== Конец "КодТорговойТочки" ====
ИТОГО %%Сумма%%
==== Общее =====
ИТОГО ВСЕГО %%Сумма%%
И получится:
Таблица продаж Первомайск за январь
По Возле автовокзала
Крепёж 850.0
Сигареты 2500.0
ИТОГО 3350
По На авторынке
Крепёж 3005
Сигареты 2000
Кондитерка 300
ИТОГО 5305
По В парке
Крепёж 100
Сигареты 500
Кондитерка 2600
ИТОГО 3200
ИТОГО ВСЕГО 11855
Получили то, что нужно хозяину. Но он, скорее всего, к оформлению придираться не будет.
Всё, что между %% и %% - информация генератору, что откуда брать, чтоб здесь размещать.
Всё, что вне %% - %% - любые текстовки, рамки и картинки.
%% - это не догма, здесь МОДЕЛЬНЫЙ текст! Ваш генератор отчётов может понимать совершенно другие служебные символы, либо же вообще их не применять, а разрешать рисовать поля в макете выдачи в понятном диалоге. То есть вы ставите мышь на требуемое место в макете выдачи, и по меню выбираете, какие поля из каких баз туда ставить. Или какие стандартные поля туда ставить, например, сумму по группе текущего "=====", дату, и т.п. Заметим, что этот диалог может быть хоть и понятным (с подсказками имён таблиц и полей), но довольно занудным, и при некотором опыте писать формулы, или "ВЫРАЖЕНИЯ", будет проще.
Как правило, оформительские возможности генератора широки и примерно соответствуют оформительским возможностям генератора входных форм (см. рассказ про входные формы).
Теперь наконец мы имеем стройную картину ЭТОЙ технологии.
1. Составляется логическая схема базы данных в виде таблиц: что где размещено и как называется. Здесь и только здесь надо думать, это основное содержание всей работы. Схема забивается в машину -соответствующим средством ввода схемы данных.
2. Рисуются макеты ввода информации -генератором входных форм.
3. Рисуются макеты вывода требуемой информации - генератором отчётов
И получаем информационную систему без всякого программирования на языках программирования (впрочем, за исключение тех самых "выражений", которые вы всё равно захотите применять:)
В пунктах 2 и 3 надо не думать, а украшать и воевать с условностями генераторов форм.
Пока всё. Продолжение следует. Технология вот она, теперь ваша. Но здесь за кадром всё ещё остались некоторые важные мелочи. Мелочи, но важные.