用友U8服装鞋帽行业二维报表开发手册簿.docx
- 文档编号:27092119
- 上传时间:2023-06-26
- 格式:DOCX
- 页数:32
- 大小:2.16MB
用友U8服装鞋帽行业二维报表开发手册簿.docx
《用友U8服装鞋帽行业二维报表开发手册簿.docx》由会员分享,可在线阅读,更多相关《用友U8服装鞋帽行业二维报表开发手册簿.docx(32页珍藏版)》请在冰豆网上搜索。
用友U8服装鞋帽行业二维报表开发手册簿
用友U8服装鞋帽行业二维报表开发手册
(版本号:
V1.0编制:
吴伟杰日期:
2007-10-30)
一、概述
1)报表设计背景:
在服装行业最突出的特性是一个款号往往都有多种颜色、尺码,在业务管理中重点关注款号的同时,对颜色尺码也同样需要细分,如何以一种简便、直观的方式展示纷繁复杂的业务数据直接影响到日常工作决策及效率。
本文档就是在用友U8服装行业专版的基础上提供一套按尺码横向展开的二维行业报表解决方案。
并以《销售订单执行情况统计表》为例详细说明具体实现的技术细节。
(样表如下图)
报表格式如图所示,将销售订单对应数据横向展开,表头每个项目下面显示的数据是对应存货下的尺码数据,现在把它们作为列标题来显示,而对应尺码下交叉区的数值则为该种存货、颜色、尺码下的销售订单数量,发货数量,两者的差异,还有差异的百分比。
2)应用环境
用友U870+服装插件4.0或以上
3)开发工具:
UAP报表设计工具,SQLServer2000
4)对开发人员的技术要求:
熟悉UAP报表开发工具的基本操作,熟悉SQL的基本查询语句、存储过程。
二、报表应用假设
销售订单里面对应所有尺码都已在服装尺码组档案定义,每款和产品类别对应一个尺码组,且每组尺码组都应该是唯一的。
存货自由项1为颜色,存货自由项2为尺码。
三、报表设计
1.数据源设计
(1)参照样本报表原始表单的格式,表头是二级结构,每个项目下面是各组尺码组的明细,尺码组的尺码数是不固定的,需要动态生成的表头,因此选择交叉报表来实现。
(2)在数据源的设计方面,因为需要拼表头尺码字符串,所以需要用存储过程来实现。
在数据抽取方式上,因为“订单数量”,“发货数量”等四个项目下面的尺码显示都是一样的,同时为了方便分别处理,因此选择了使用联合Union把各个项目的数据分别完成了再组合起来,同时因为UAP里面的提供的横向合计功能不符合客户报表格式需求,因此为每个项目都分别加了小计项目;
完成数据抽取后,需要再使用游标分别把每条数据记录对应的尺码替换成相对应的同级尺码字符串,这是实现多组尺码组表头的关键。
2.报表创建
首先用UAP的内部版本替换目录“U8Soft/UAP/”下的UAP.exe文件,并在指向UAP.exe的快捷方式的“目标”属性后添加“–dev”参数,即目标=“C:
\U8Soft\UAP\Uap.exe–dev”。
成功使用内部版本登陆后,UAP主界面右下角会出现“开发模式”字样。
为了方便分类区别管理,一般先在UAP中新建一个项目,然后再在该项目下面新建自定义报表。
新建报表
点击菜单“项目添加报表”后,选择“SQL脚本查询”。
点击“下一步”,输入业务对象名称和功能名称,如下图所示。
注:
业务对象名称必须唯一,建议取能反映报表所对应业务的相关名称。
点击“下一步”,在查询脚本设置页签中,可以选择数据源类型“SQL脚本”或“存储过程”,可根据实际业务需要选择。
本例选择类型“存储过程”,然后在脚本编写区输入编写的存储过程名称。
注:
右侧的“检验”按钮可用来检验SQL语句或存储过程是否能成功执行。
必须在查询参数设置页签中设置存储过程中执行所需要的参数,包括参数类型和默认值。
(注:
参数设置:
把存储过程的所有参数都写上,并都加上默认值。
)
切换到查询结果列标签,点击右侧的“刷新”按钮后,取得存储过程中查询的结果列。
如果刷新后报错,则说明存储过程有问题。
点击“完成”后出会弹出如下的界面,输入报表和视图名称,并选择视图类型为“交叉报表”。
注:
视图类型在指定后就不能修改了,要实现其他视图类型只能另新建视图。
3.设计报表格式。
点击“确定”后,选择菜单“格式样式报表向导”。
在弹出来的“交叉表样式”对话框中,点击“下一步”后弹出一个提示界面,在该界面中继续点击“下一步”进入“报表标题”界面,输入报表的版面标题,下一步后进入“行/列选择”界面。
具体的行标题和列标题的设定可以参照示例报表,除此以外的字段如果是数值就可以作为数据详细放到交叉区。
具体设置方式:
点击“添加行标题”,把需要按常规显示的列标题添加到“已选行标题”中,点击“添加列标题”,把需要横向展开的列添加到“已选列标题”中。
选择后的界面如下图所示。
点击“下一步”弹出如下界面。
点击“下一步”后就完成了报表设计工作。
进入报表视图设计界面。
报表的显示明细,默认情况是false,如果需要显示要特别注意设置,其他的一些属性也可以在属性窗口上面设置,以调整报表结构。
4.添加过滤。
在左侧“报表定义”属性框中右键点击“销售订单执行统计表”。
在“查询条件”子菜单“标准条件”里面进行过滤添加。
数据源的字段要和存储过程脚本里面用的字段一样。
过滤会把字段直接拼成字符串作为参数传递给存储过程。
5.添加表头显示过滤条件。
数据的显示要用表达式组件,在左侧工具箱点击选择“表达式”组件,在报表标题区点击添加,然后选择该组件,在属性窗口点击公式窗口的按钮,调用公式设计器进行公式设计,如图所示。
注:
该例中订单日期的过滤条件曾出现不能显示的问题,该过滤项目的编辑类型是“日期”,不是必输项。
最后的解决方法是,先把该项目改成必输的,把报表执行一次,该过滤条件就能在表头正常显示了,然后再取消必输属性,以后就一直都能正常显示。
另外,销售订单号的过滤条件也不能正常在表头显示,只能在过滤条件被修改的第一次显示数据,该项目的编辑类型为参照,非必输项。
解决方法是不用系统原有参照,把编辑类型改为SQL语句,用自定义的SQL语句直接取得参照数据,问题得到解决。
6.设置分组
选择菜单“格式样式设置分组方案”。
7.添加视图
在左侧“报表定义”属性框中右键点击“销售订单执行统计表”。
点击“添加视图”选项进行视图添加。
然后在弹出的新建视图属性设置对话框里,可以进行新视图属性的设置,确定后操作方法和手册前面介绍的新建报表后弹出该窗口的是完成一样的,就是上面介绍的:
3.设计报表格式。
注:
如果把默认视图的选项选上,那视图就是打开报表时默认显示的视图。
可以在建视图以后再把相应视图设为默认视图。
8.报表展现
完成的报表保存并在uap里面发布以后,就可以在U8企业应用平台上面看实际效果。
发布:
保存并关闭所有的业务对象后,选择菜单“工具发布”,发布刚才设计的报表后就可以在本机上使用了。
登录U8后,在“我的报表”中可以看到发布的报表。
四、报表发布
最后,使用“报表元数据导出导入工具”生成脚本,在其他机器上导入该脚本后就可以使用自定义报表了。
该工具在C:
\WINDOWS\system32\UFCOMSQL\行业插件\Script目录下,导出的脚本在同一目录下。
(注意:
使用“报表元数据导出导入工具”时,Meta库文本框中输入的信息应该是:
UFMeta_***(***为对应的账套名)。
)
同时,给客户演示机器导入报表的时候,同样用该工具进行导入,选择相应帐套后,按Ctrl+O组合键打开文件选择窗口,选择相应报表脚本后就可以把报表导入,同时存储过程的脚本也要在SQLServer2000的“分析查询器”运行一下,这样报表才能正确取到数据。
五、局限说明
1.因为UAP功能的限制,列宽无法动态适应文字及列宽拉动,报表表头尺码列标题的宽度无法进行调整。
同时长度也不能自动调整,要在报表设计的时候就把长度定好,太长会影响美观,太短就可能有部分尺码没有显示出来。
2.报表列不能随意显示和隐藏,只能用多个不同视图进行列的增减来实现。
3.报表过滤条件在表头的显示只能在选择填写了相应过滤条件项的第一次有效,如果没有填写任何该项过滤条件,就会显示为空。
4.对未定义尺码组档案或与尺码组档案信息不匹配的数据,在各尺码明细数量不做任何显示,仅仅在小计上另加一条记录体现,产品类别尺码组显示该明细的产品类别和尺码,因此如果尺码组档案定义不全或与业务不匹配,可能会出现一条或多条无对应尺码数量的记录。
5.短溢装百分比百分数显示问题,为了报表总体结构格式的实现,该项交叉数据和其他项目的数量用的是同一个字段,因此不能单独对该列设置显示格式,更不能把它改为非数值的数据源(如在后面加%就变成了字符),所以该列数据的显示是直接显示实际的位数,而无法按照统一的格式设置小数尾数。
6.由于UAP交叉报表不支持多行表头,只能通过拼字符串实现多行表头,所以在输出Excel时尺码表头会乱,需要再做整理
六、相关注意事项
(一)关于英文报表的问题。
1、如果是标题,标签,行标题表头等,只需把相应的组件的标题设为对应的英文。
2、对于取得的数据源数据,要把相应的SQL语句的字段名改为英文,同时相应的存货档案数据记录也必须修改,和UAP报表功能的小计显示(可以取消合计显示),这就更深入的调整。
注:
因为同一个报表不同视图使用的是同一个数据源,而数据源里面的字段名很可能会直接显示出来,所以一般情况下,很难在一个报表下面用不同的视图实现不同语言的报表显示。
(二)编写存储过程需要注意的地方
如果使用存储过程数据源:
1、至少声明一个“@SortString”参数,最后的返回数据必须按该参数进行排序。
2、过滤条件的处理:
1)如果将过滤条件统一处理,那么声明一个“@FilterString”参数即可(缺省值为空)。
2)如果要单独处理过滤条件,那么要按如下规则处理。
比如存储过程有一个参数“@cordercode”,那么必须对应的需要定义一个Name为“cordercode”的过滤条件项。
3)对于
(2)中定义的存储过程参数,必须设置默认值。
注意:
所有存储过程的参数都必须在数据源向导中进行声明。
3、数据源改变后,特别是增减了字段后,要在视图窗口的数据源把查询结果刷新一下,把报表视图设计子窗口保存后重新打开,字段才会更新。
附件:
存储过程说明:
--两个参数,一个过滤,一个排序
CreateprocProc_hy_fz_XSFHTJ(@Filterstringvarchar(1000)='1=1',@SortStringvarchar(1000)='销售订单号')
as
DECLARE@TABLENAMEVARCHAR(20)
SET@TABLENAME='TTABLE'+HOST_NAME()
EXEC('IFEXISTS(SELECT*FROMdbo.sysobjectsWHERENAME='''+@TABLENAME+''')
DROPTABLE'+@TABLENAME)
--取得数据(iorder:
项目的顺序)
exec('select*into'+@TABLENAME+'from(
--订单数量
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sod.iquantity数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),si.cInvCCode)as产品类别尺码组,si.igrade,convert(nvarchar(500),'''')as尺码,''订单数量''项目,1iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
innerjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+')
unionall
--发货数量
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sod.iFHQuantity数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),si.cInvCCode)as产品类别尺码组,si.igrade,convert(nvarchar(500),'''')as尺码,''发货数量''项目,2iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
innerjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+')
unionall
--差异
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sod.iFHQuantity-sod.iquantity数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),si.cInvCCode)as产品类别尺码组,si.igrade,convert(nvarchar(500),'''')as尺码,''差异''项目,3iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
innerjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+')
unionall
--溢短装百分比
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,(sod.iFHQuantity-sod.iquantity)/sod.iquantity*100数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),si.cInvCCode)as产品类别尺码组,si.igrade,convert(nvarchar(500),'''')as尺码,''溢短装百分比''项目,4iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
innerjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+')
unionall
--添加订单小计,在尺码区显示标题
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sum(sod.iquantity)数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),i.cinvdefine2+casewhensi.csizenameisnullthen''''+sod.cfree2else''''end)as产品类别尺码组,50igrade,convert(nvarchar(500),''订单小计'')as尺码,''订单数量''项目,1iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
leftjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+'
Groupbysom.cSOCode,sod.cinvcode,sod.cInvName,sod.cfree1,sod.iMoney,sod.iFHMoney,si.iRowOrder,i.cinvdefine2,sod.cfree2,si.csizename)
unionall
--添加发货小计,在尺码区显示标题
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sum(sod.iFHQuantity)数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),i.cinvdefine2+casewhensi.csizenameisnullthen''''+sod.cfree2else''''end)as产品类别尺码组,50igrade,convert(nvarchar(500),''发货小计'')as尺码,''发货数量''项目,2iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
leftjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+'
Groupbysom.cSOCode,sod.cinvcode,sod.cInvName,sod.cfree1,sod.iMoney,sod.iFHMoney,si.iRowOrder,i.cinvdefine2,sod.cfree2,si.csizename)
unionall
--添加差异小计,在尺码区显示标题
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sum(sod.iFHQuantity-sod.iquantity)数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),i.cinvdefine2+casewhensi.csizenameisnullthen''''+sod.cfree2else''''end)as产品类别尺码组,50igrade,convert(nvarchar(500),''差异小计'')as尺码,''差异''项目,3iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
leftjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+'
Groupbysom.cSOCode,sod.cinvcode,sod.cInvName,sod.cfree1,sod.iMoney,sod.iFHMoney,si.iRowOrder,i.cinvdefine2,sod.cfree2,si.csizename)
unionall
--添加溢短装小计,在尺码区显示标题
(selectsom.cSOCode销售订单号,sod.cinvcode存货编码,sod.cInvName存货名称,sod.iMoney订单金额,sod.iFHMoney发货金额,sum((sod.iFHQuantity-sod.iquantity)/sod.iquantity*100)数量,sod.cfree1颜色,
si.iRowOrder产品类别ID,convert(nvarchar(500),i.cinvdefine2+casewhensi.csizenameisnullthen''''+sod.cfree2else''''end)as产品类别尺码组,50igrade,convert(nvarchar(500),''溢短装小计'')as尺码,''溢短装百分比''项目,4iorder
fromso_sodetailssodinnerjoininventoryionsod.cinvcode=i.cinvcode
leftjoinhy_fz_sizeclassitemsionsi.cinvccode=i.cinvdefine2andsi.csizename=sod.cfree2
innerjoinSO_SOMainsomonsom.cSOCode=sod.cSOCode
where'+@Filterstring+'
Groupbysom.cSOCode,sod.cinvcode,sod.cInvName,sod.cfree1,sod.iMoney,sod.iFHMoney,si.iRowOrder,i.cinvdefine2,sod.cfree2,si.csizename)
)Ttable')
--拼尺码表头字符串
declare@iGradeint
declare@iRowOrderint
declare@SizeStrVarchar(500)
declare@SCStrVa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 用友 U8 服装鞋帽 行业 二维 报表 开发 手册
![提示](https://static.bdocx.com/images/bang_tan.gif)