Cell报表控件成功应用于汽车零配件销售企业管理信息系统

阅读:378次   时间:2008-10-20 00:00:00   字体:[ ]
Cell报表控件成功应用于汽车零配件销售企业管理信息系统
【项目背景】
 
经过数十年风雨历程,中国汽车产业已从专属象征的奢侈品跨入大众消费时代,如此庞大的汽车消费市场,带动了中国汽车零配件产业的蓬勃发展。随着中国加入WTO,汽车零配件行业作为产业链中不可或缺的重要环节,已经打破国家地域的限制,形成全球化市场与生产格局,外资同业的介入,将使得国内汽配市场竞争更趋激烈与白热化。
信息化在帮助汽配企业降低采购、营销成本,减少库存、优化库存结构,拓展销售渠道、提高服务效率等方面起到了不可替代的作用。所以说,汽配行业信息化建设不是应该的,而是必然的。
 
【系统概述】
 
    该系统主要管理企业中通用的信息化模块,包括工资、仓库管理、采购管理、销售开单管理、pos柜台销售管理、出纳管理、短信管理、P2P(类似RTX)等部分。
 
【报表需求】
 
一、报表需求分析
       (1)单据式报表
            例如我们需要打印入库单、出库单时,这种情况采用画模版方式完成。
       (2)套打类
            例如套打发票之类的情况也采用画模版方式完成,只是打印时候隐藏部分内容,cell已有类似例子提供。
       (3)自由报表
            有些自由格式的表格,数据可能从数据库、文本文件、或者其他方式,这个时候需要画好表格,然后根据Flag替换填充。
       (4)交叉类表格
            基于报表组件,可以完成复杂的交叉表,支持行列多表头、支持行列合计、小计、计数、平均值、最大值、最小值、百分计算,支持多个计算字段放在行区或者列区,计算方式支持普通平均值和加权平均值等多种方式计算,支持设定小数点位数等。
 
       (5)数据录入
            支持基于cell模版的数据录入,并写入数据库等。       
 
 
二、Cell应用解析
 
(1)   交叉报表式数据配置界面
可以做成通过拖拉组件来设置维护界面,报表怎么显示,通过数据库配置生成。即将显示规则存储到数据库里面,然后写一个类来解析 哪些规则,填充cell,提供sql或者一个dataset,反正不管你用什么方式,能给我数据源就可以了
 
CDSSource.Data := UISet.GetData(sSQL);
 CellReport.Cell := Cell;
 CellReport.CloneClientDataSet(CDSSource, CellReport.CDSSource);
 CellReport.CloneClientData(CDSSource, CellReport.CDSSource);
 CellReport.ExecReport(7);  
 
(2)   画模版方式完成的报表(例子:出纳系统的现金日记帐打印)
 
 
(3)普通循环类报表(例子:工资表打印,全动态统计生成!)
 
(4)交叉报表部分(仓库管理系统的实时库存报表)
 
生成这样的报表不需要写代码的,并且可以增加,行列合计、小计、平均值、计数、最大值、最小值、百分比。此组件生成报表之后,允许你写代码或者外接脚本来修改Cell,比如插入表头、表尾或者修改那些单元格颜色、字体之类的,还可以设定表格大小、生成交叉行部分、生成交叉列部分、生成交叉数据、计算整个报表、合并需要合并的单元格等。
 
用户感受】  
Cell确实是一个优秀的报表开发工具,对于软件开发公司,减轻程序员工作量的同时,将报表完美呈现方便客户打印,为中国式复杂报表提供最有效的解决办法。  
1、接口丰富、功能强大,易于与开发语言融合;
2、文档做的不错,简单、直接,都有小例子,适合各个层次的开发人员;
3、目前用cell做报表还没有碰到过做不出来的情况。
 
 
昆明讯之岭:林红卫
mail:  hellokunming@163.com  
QQ: 18077968
 
 
附:实时库存的全部源代码
unit UFrmCKRealTimeStorageRep;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, UFrmCKCellEditor, ExtCtrls, UExpandPanel, StdCtrls, CheckLst,
 Buttons, UDBAPorxy, UUISet, DB, DBClient, UCellReport,CELL50Lib_TLB,
 UPubicParm, Grids, DBGrids, Menus, ImgList, ComCtrls, ToolWin;
 
type
 TFrmCKRealTimeStorageRep = class(TFrmCKCellEditor)
    Panel1: TPanel;
    ClbStorage: TCheckListBox;
    SBtnQuery: TSpeedButton;
    UISet: TUISet;
    CDSStorage: TClientDataSet;
    CellReport: TCellReport;
    CDSSource: TClientDataSet;
    procedure SBtnQueryClick(Sender: TObject);
    procedure CellReportAfterExecReport(Cell: TCell);
 private
 
 public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
 end;
 
var
 FrmCKRealTimeStorageRep: TFrmCKRealTimeStorageRep;
 
implementation
 
{$R *.dfm}
 
{ TFrmCKRealTimeStorageRep }
 
constructor TFrmCKRealTimeStorageRep.Create(AOwner: TComponent);
var
 sSQL: string;
begin
 inherited;
 sSQL := 'select * from T_CK_BASE_STORAGE';
 CDSStorage.Data := UISet.GetData(sSQL);
 
 ClbStorage.Items.Clear;
 CDSStorage.First;
 while not CDSStorage.Eof do
 begin
    ClbStorage.Items.Add(CDSStorage.FieldByName('F_NAME').AsString);
    CDSStorage.Next;
 end;
end;
 
destructor TFrmCKRealTimeStorageRep.Destroy;
begin
 
 inherited;
end;
 
procedure TFrmCKRealTimeStorageRep.SBtnQueryClick(Sender: TObject);
var
 sSQL: string;
 sStorageList: string;
 I: Integer;
begin
 inherited;
 for I := 0 to ClbStorage.Count - 1 do
 begin
    if ClbStorage.Checked[I] then
    begin
      CDSStorage.First;
      CDSStorage.MoveBy(I);
      if sStorageList = '' then
        sStorageList := CDSStorage.FieldByName('ID').AsString
      else
        sStorageList := sStorageList + ',' +
          CDSStorage.FieldByName('ID').AsString;
    end;
 end;
 
 if sStorageList = '' then
    raise Exception.Create('请选择仓库');
 
 sSQL := 'select ' +
    '    a.F_CODE,' +
    '    a.F_NAME as F_ITEM_NAME, ' +
    '    a.F_SPEC as F_SPEC,' +
    '    d.F_UNIT as F_UNIT,' +
    '    a.F_PRICE as F_PRICE,' +
    '    b.F_NAME AS F_STORAGE,' +
    '    c.F_NUM as F_NUM,' +
    '    c.F_NUM * a.F_PRICE as F_MONEY' +
    ' from ' +
    '    T_CK_ITEM a,' +
    '    T_CK_BASE_STORAGE b,' +
    '    T_CK_TIME_STORAGE c,' +
    '    T_SYS_UNIT d' +
    ' where ' +
    '    c.F_ITEM_ID = A.ID ' +
    '    and c.F_STORAGE = b.ID ' +
    '    and a.F_UNIT = d.ID ' +
    '    and c.F_STORAGE in ( ' +
    sStorageList +
    ')';
 
 CDSSource.Data := UISet.GetData(sSQL);
 
 CellReport.Cell := Cell;
 CellReport.CloneClientDataSet(CDSSource, CellReport.CDSSource);
 CellReport.CloneClientData(CDSSource, CellReport.CDSSource);
 CellReport.ExecReport(7);  
end;
 
procedure TFrmCKRealTimeStorageRep.CellReportAfterExecReport(Cell: TCell);
begin
 inherited;
 
 // 执行后期处理 -- 表头
 Cell.SetCellString(1, 1, Cell.GetCurSheet, '分仓库实时库存表');
 Cell.SetCellAlign(1, 1, Cell.GetCurSheet, 36);
 Cell.SetCellFontStyle(1, 1, Cell.GetCurSheet, 10);
 Cell.SetCellFontSize(1, 1, Cell.GetCurSheet, 24);
 Cell.SetRowHeight(1, Cell.GetRowBestHeight(1), 1, Cell.GetCurSheet);
 Cell.MergeCells(1, 1, Cell.GetCols(Cell.GetCurSheet) - 1, 1);
 
 
 // 制表人
 Cell.SetCellString(1, Cell.GetRows(Cell.GetCurSheet) - 1,
    Cell.GetCurSheet, '制表人:' + gUserInfo.UserName);
 Cell.MergeCells(1, Cell.GetRows(Cell.GetCurSheet) - 1,
    3, Cell.GetRows(Cell.GetCurSheet) - 1);
 
 // 制表日期
 Cell.SetCellString(4, Cell.GetRows(Cell.GetCurSheet) - 1,
    Cell.GetCurSheet, '制表时间:' + DateToStr(Now));
 Cell.MergeCells(4, Cell.GetRows(Cell.GetCurSheet) - 1,
    Cell.GetCols(Cell.GetCurSheet) - 1, Cell.GetRows(Cell.GetCurSheet) - 1);
 
end;
 
end.
 源码推荐
关于本站 - 广告服务 - 会员指南 - 联系方法
Copyright ©2003-2011 源码天空 All Rights Reserved