用Delphi_FastReport解决ERP系统开发中单据打印的实例探索

用Delphi_FastReport解决ERP系统开发中单据打印的实例探索

2023年7月13日发(作者:)

摘要:本文用Delphi+Fastreport为例介绍了用数据库后台存储单据文件前台进行调用很好的解决了后台存储与用户本地自定义设置之间的矛

盾,还介绍了通过编写通用式主从结构的单据打印程序快速解决各种单据的打印输出以及用cross-tab技术解决交叉表样式报表的输出。这些方法的

实现很好的解决了ERP系统中单据输出和报表打印问题,同时较方便的实现了用户对单据和报表样式自定义的需求。

关键词:ERP系统;后台;套打;交叉表;单据

中图分类号:TP302.1

文献标识码:A

文章编号:1003-9767(2011)05-0054-03

下载:将存于后台表中的单据字段通过流文件方式保存至本地相

1. 单据文件的存储与用户自定义

FastReport中报表默认是以文件形式存储于各客户端本地系统

应的报表文件。中,以其调用速度快而获得程序的首选,但这种方式更新时必须在各

try

客户端站点之间进行手动同步操作,给后期的报表维护带来了极大的

SetStream := (ReportFileName, fmCreate or

不便,因此往往适用于站点数量较少的系统应用场合,在ERP系统应

fmShareExclusive);

用中,一般采用将FastReport报表文件以image字段的形式存储于后台

// 保存相应字段内容到文件流中

数据库中,再通过相应的下载和上传操作实现对数据库内image字段

TBlobField(yName('xt_bill_attach')).

(即相应报表文件)的修改。1.1存放单据的表文件:

CREATE TABLE [dbo].[xt_bill] (

[xt_bill_id] [uniqueidentifier] NOT NULL ,

--编号

[xt_bill_iden] [varchar] (40),

- - 单据

标识

[xt_bill_name] [varchar] (40),

-- 单据名称

[xt_bill_user_id] [uniqueidentifier] NULL , --上传用户

[xt_bill_lastdate] [datetime] NULL , - -

最后

更新日期

[xt_bill_attach] [image] NULL

-- 报表文件

) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

GO

1.2用户自定义单据的管理:

图1:单据管理示意图

设计:打开FastReport的报表设计窗口,针对用户选择的相应单

据进行报表数据源和各类样式的设计与调整,保存后用户必须上传至

服务器用于更新最新的单据记录。

omFile(GetExePath + 'reports' +

ReportName); --装载文件

:= ReportTitle;

Report;

SaveToStream(SetStream);

MessageDlg('报表文件下载成功!', mtInformation, [mbOk], 0);

except

MessageDlg('报表文件下载过程中遇到了错误!', mtError,

[mbOk], 0);

end;

上传至服务器:将重新设置的本地报表文件上传至后台表xt_bill

相应记录。

SetStream := (FileName, fmOpenRead or

fmShareExclusive);

with ADOQueryBill do

begin

OldBookMark := GetBookmark;

Edit;

FieldByName('xt_bill_user_id').Value := pubUserID;

FieldByName('xt_bill_lastdate').Value := Now;

// 装载相应文件流到表中的相应字段

TBlobField(FieldByName('xt_bill_attach')).LoadFromStream(SetSt

ream);

try

Post;

MessageDlg('报表文件上传成功!', mtInformation, [mbOk], 0);

Requery;

GotoBookmark(OldBookMark);

except

MessageDlg('报表文件上传过程中遇到了错误,上传失败!',

mtError, [mbOk], 0);

end;

end;

2. 通用的主从式单据打印解决方案

在ERP系统应用中,单据种类复杂,有采购计划、采购订单、

采购收货通知单、销售订单、销售出库通知单、库存调拨单、库存领用单等等,但仔细分析后我们发现其结构均为主从式的数据模型,为了找到通用的解决方案,我们在Delphi 项目的DM 模块下,增加ADOQueryParent作为主表的数据源,增加ADOQueryChild作为子表的数据源,增加frDBDataSetOrder作为FastReport数据源,增加frReportOrder作为FastReport作为报表控件,前端通过后台数据库的视

图实现用户对数据源的控制,减少了对前台应用程序的维护频度,实

现了报表文件、访问方式和数据源三者既相互独立,又兼顾统一。

2.1调用报表的过程描述如下:

procedure PrintCheck(ReportName, --报表名称

MasterViewName,

MasterKeyFieldName,

段名称

DetailViewName,

数据视图名称

DetailKeyFieldName,

段名称

SortByField

排序字段名称

- - 主项数据关键字

--明细项

- - 明细数据关联字

--数据源

- - 主项数据视图名

with rtOrder do

begin

LoadFromBlobField(FieldByName('xt_bill_attach')); // 从相

字段进行装载

Title := FieldByName('xt_bill_name').Value;

ShowReport;

end;

finally

Close;

Free;

end;

end;

3. 交叉表式数据输出解决方案

在ERP系统应用中,除了上述主从表式的数据展示方式外经常

: string; KeyFieldValue: variant);

2.2过程代码如下:

procedure PrintCheck(ReportName, MasterV iewName,

MasterKeyFieldName,

DetailViewName, DetailKeyFieldName, SortByField: string;

KeyFieldValue: variant);

Begin

// 指定主项数据源

with ryParent do

begin

Close;

;

('select * from ' + MasterViewName + ' where ' +

MasterKeyFieldName + '=:' + MasterKeyFieldName);

[0].Value := KeyFieldValue;

Open;

end;

// 指定明细项数据源

with ryChild do

begin

Close;

;

('select * from ' + DetailViewName + ' where ' +

DetailKeyFieldName + '=:' + DetailKeyFieldName);

(' order by ' + SortByField);

[0].Value := KeyFieldValue;

Open;

end;

// 装载相应单据

with (nil) do

try

Close;

Connection := nection;

;

('select xt_bill_attach,xt_bill_name from xt_bill

where xt_bill_iden=:xt_bill_iden');

[0].Value := ReportName;

Open;

if (t <> ryChild) then

t := ryChild;

遇到交叉表式的数据输出要求,依靠传统的报表设计工具和方式显特别麻烦,FastReport提供了一个Cross-tab的对象可以解决这个问题但笔者经过多次反复测试后发现只有数据源提供正确且设置合理才得到我们想要的输出格式。

数据源:必须对Cross-tab中的Row和Col进行分组Group By

作,这样得到的数据才是Cross-tab对象可以接收的数据,如下图中jc_catalog_name、jc_item_name和jc_line_name就是需要进行分组操的字段。

图2 Cross-tab设置示意图

在进行Cross-tab对象进行设置时,则首先要保证Cross-tab的数源联机(即Active=true),这时可以采用对象拖拽的方式将相关字段置至不同的区域实现对交叉表的设置。

4. 向FastReport动态传递用户自定义变量:

首先在FastReport中增加一个对象并进行相应命名,如下面的

CompanyName为公司名称,CurrDate为日期,采用如下的代码形式

可在运行时给报表中的这两个变量进行动态传值:

// 增加名称名称信息

if FindObject('CompanyName') <> nil then

(下转第57

4.1缓冲区分析。缓冲区是指包围在设施周围一定距离的地区。

根据设施的属性可以生成其定宽度和变宽度的缓冲区,生成的缓冲区

是在离设施一定距离,在其内或外的多边形区域,例如在一条规划中

的道路周围建立缓冲区,可分析该道路的建设将对哪些地下管网构成

影响。

4.2 流向分析

。系统根据管网的拓扑结构、各储配站的供气压

力、阀门的开闭情况、以及从调度系统获取的各监测点的测量数据,

分析计算指定管段的天然气流向。

4.3 管线气源方向管理。在方便、直观、快捷地显示各种空间

关系的基础上集中管理管网设施海量属性信息,不但管理管线的从

属关系,还将对气源的来气方向、管线所连接的上下级阀门关系进

行管理以满足解决实际的工程需要,如进行整个管线环网的规划设

计,在某些管段气压不足时可以根据气源的来气方向及时做出调整

等。

4.4连通性分析。在管线密集的地方,单击管点,作连通分量分

析,和此管点直接相连的管段会变色显示;作连通检查,系统会变色

显示与此管点有连接关系的所有管段。

4.5闸阀分析。闸阀分析是天然气管网的一个特有的业务分析,

是业务分析的一个非常重要的内容。在事故发生的管道上分析其上级

阀门,从而找到可以控制该事故发生管道的阀门集合,关闭这些阀门

户选择使用。系统对爆管分析结果列表输出,自动生成爆管停气阀

区。

5. 结论

西南油气田管道与场站管理系统作为油田公司完整性管理的组成部分,承担了川渝油气田地面建设管理的重任,该系统融合了川渝两

地相关的矢量数据、影像数据以及高程数据,整合了成渝两地所有天

然气管道数据、场站数据,采用APDM模型构建了数字管道数据库,

开发了天然气管道及场站数据管理地理信息平台,为油田公司管道的

完整性管理提供了有效保障服务。该系统荣获2010年度中国地理信息

系统协会颁发的中国地理信息产业优秀工程银奖。

参考文献

[1]崔阳,王华,乔淑娟. 基于GIS的空间数据库构建与应用研究. 微

计算机信息,2006,22-6:199-201

[2]郭婧,张立朝,王科伟. 基于 ArcGIS Server 构建地理信息服务.

测绘科学 2007 32 3 91-93

[3]王洪伟,张立朝,张海东等. 分布式 ArcGIS Server 体系结构的

研究与开发. 测绘科学技术学报 2007 24 2 110-113

[4] 温庆,李军. 场站安全完整性管理探讨. 天然气勘探与开发

2008.03

(上接第55页)

FindObject('CompanyName'). := ‘使用单位信息’;

// 增加日期信息

if FindObject('CurrDate') <> nil then

FindObject('CurrDate'). := DateToStr(Date); 除了以上几个方面的应用外,FastReport与Delphi的结合应该说相

当的完美,在单据套打设计、打印时打印机任意选择与切换、多重分

组和多报表合并等方面均有不俗的表现。

System Integration[J]. IEEE Computer,2002,35(6):37-46.

[7]DK Design Suite User Manual[S]. Celoxica,2003.

[8]Danciu T, Chinita L. The JasperReports Ultimate Guide[M]. San

Francisco, California, United States: JasperSoft Corporation,2006. [9]侯敬军,参考文献:

[1]李文生,叶宁;采用Delphi实现三层客户/服务器数据库应用程序

[J];计算机工程;2000年07期 [2]殷剑宏;TeeChart控件的应用[N];计算机世界;2001年 [3]宁夏数据通信局 刘君;SQL Server 2000中全文检索的使用[N];计

算机世界;2002年

[4]刘瑞,陈微,李昭原;基于XML的Web报表开发工具及其支撑框架

[J];计算机工程与应用;2002年24期

[5]谢小轩,张浩,夏敬华,王坚,李琦;企业应用集成综述[J];计算机工程

与应用;2002年22期

[6]Foster I,Kesselman C,Nick J,et al. Grid service for Distributed

曾致远,向凌.一种基于Web服务的分布式数据挖掘体系结

构[J].微机发展(现更名:计算机技术与发展),2004,14(6):48-51. [10]梁海燕;赵嵩正;;基于JSP技术工程项目甘特图的设计与实现[J];

计算机应用与软件;2006年08期

[11]王强,皮德常,李伟奇,等.基于Agent和数据挖掘的分布式信息审

计平台[J].计算机技术与发展,2006,16(4):141-143.

[12] 李志刚. 客户关系管理理论与应用[M]. 北京: 机械工业出版

社,2006.

[13]陈娟娟,李龙澎.基于Web的MIS开发中动态报表的实现. 计算机

技术与发展,2008,18(8)

[14]王明超 陈榕 .基于脚本的客户端软件结构化存储技术研究. 计

算机技术与发展,2010,20(2)

[15] 王锟 马金平 张磊. 企业间ERP 的概念框架. 计算机技术与发

展,2010,20(3)

作者简介:吴乃忠,男,江苏常州人,职称:高校讲师,学历:

大学本科,主要研究方向:企业信息化、数据库应用、数据挖掘等。

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1689248568a225705.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信