Менеджер отчётов
Автор: Савельев Андрей
Существует коммерческий проект «АРМ Торговля и склад», предназначение которого состоит в автоматизации работы на складе и на кассе в торговом зале. Проект содержит модуль «Склад», подразумевающий формирование и хранение группы документов: приходные и расходные документы, списание и возврат товара, продажи по кассе и т.д. Каждой группе документов соответствуют свои отчеты. Например, к приходным и расходным документам относятся такие отчёты как «Приходная и расходная накладная» и «Печать ценников на оприходованный товар». К списанию товара или передаче его в другой отдел относятся «Акт на списание» и «Накладная на списание», а к документам продажи по кассе относятся «Список чеков на дату» и «Справка-отчёт кассира-операциониста». Отчетов множество, и выполнение того или иного из них для определённого документа представляет трудность, преодолеть которую позволит менеджер отчетов.
Первоначально необходимо определить состав таблицы, в которой будут храниться физические названия и описание отчётов. Пусть таблица называется RPT_LIST и имеет следующую структуру:
- ID_RPT // нумерация позиций отчётов
- NAME_RPT //название отчёта
- COMMENT_RPT // комментарий для отчёта
- VALUE_RPT // значение, которому будет соответствовать тип операции
- NAME_RPT_SHOT // физическое название отчёта
DDL таблицы
CREATE TABLE RPT_LIST (
ID_RPT INTEGER NOT NULL,
NAME_RPT VARCHAR(50) NOT NULL,
COMMENT_RPT VARCHAR(255) NOT NULL,
VALUE_RPT INTEGER NOT NULL,
NAME_RPT_SHORT VARCHAR(50) NOT NULL
);
Для работы с таблицей создается проект Delphi. На форму бросим Panel, на панели разместим DBGrid и DBMemo, а также три кнопки, которые назовём btnPreview, btnPrint, btnExit. Выставим Align у компонентов так, как это показано на рис. 1.
Кроме того, создадим DataMoule и поместим туда IBDataBase, IBTransaction, IBQuery, DataSources, и свяжем их обычным способом (подробнее рассмотрено в примере).
Рис. 1 – Окно проекта
Алгоритм действий прост: при открытии формы в DBGrid’е формируется список отчётов в зависимости от выбранного типа операции. За тип операции отвечают RatioButton’ы, по умолчанию выбран тип «Приход». При выборе в DBGrid’е необходимого отчёта в DBMemo отображается его краткое описание. Выбранный отчёт можно предварительно просмотреть или сразу вывести на печать.
Ниже представлен полный код проекта.
Код модуля DataModule (назван в примере dm)
procedure Tdm.DataModuleCreate(Sender: TObject);
begin
// вызывается процедура подключения БД
frmMain.OpenBD;
// Открывается DataSet для первичного формирования группы отчётов
// для определённого типа операции
IRep.Open;
end;
Код главной формы frmMain
//процедура, которая отвечает за динамическое подключение БД
procedure TfrmMain.OpenBD;
begin
//путь до БД
dm.IBDatabase.DatabaseName := ExtractFilePath(Application.ExeName)+'\base.fdb';;
with dm do
begin
try
IBDatabase.Connected := True;
IBTransaction.Active := True;
except
on E:Exception do
begin
Application.MessageBox(PChar('Не удалось подключиться к серверу!' +
#10#13+#10#13 + e.Message),'Пример',MB_OK + MB_ICONERROR);
Close;
end;
end;
end;
end;
procedure TfrmMain.RadioButton1Click(Sender: TObject);
begin
with dm.IRep do
begin
close;
sql.Clear;
sql.Text := 'select * from rpt_list where value_rpt = ' + QuotedStr(IntToStr((Sender as TRadioButton).Tag));
Open;
end;
end;
//кнопка просмотра
procedure TfrmMain.btnPreviewClick(Sender: TObject);
begin
//Создание объекта
Rep := TfrxReport.Create(self);
//загрузка отчёта
Rep.LoadFromFile(ExtractFilePath(Application.ExeName)+dm.IRep.FieldByName('name_rpt_short').AsString);
//просмотр отчёта
if rep.PrepareReport then
rep.ShowPreparedReport;
//освобождение памяти
rep.Free;
end;
procedure TfrmMain.btnExitClick(Sender: TObject);
begin
Close;
end;
// кнопка печати
procedure TfrmMain.btnPrintClick(Sender: TObject);
begin
//Создание объекта
Rep := TfrxReport.Create(self);
//загрузка отчёта
Rep.LoadFromFile(ExtractFilePath(Application.ExeName)+dm.IRep.FieldByName('name_rpt_short').AsString);
//печать отчёта
if Rep.PrepareReport then
Rep.Print;
//освобождение памяти
Rep.Free;
end;
Работа менеджера показана на рис. 2.
Рис. 2 – Работа приложения
Рассмотренные примеры прилагаются в архиве. Следует помнить, что база данных создавалась на СУБД FireBird 1.5.4 и для работы примера необходимо, чтобы данная СУБД была установлена.
Савельев Андрей
|