找回密码
 注册账号

QQ登录

只需一步,快速开始

手机号码,快捷登录

手机号码,快捷登录

初学者课程:T3自学|T6自学|U8自学软件下载课件下载工具下载资料:通资料|U8资料|NC|培训|年结积分规则 | 使用常见问题Q&A
知识库:U8 | | NC | U9 | OA | 政务U8|U9|NCC|NC65|NC65客开|NCC客开新手必读 | 任务 | 快速增金币用友QQ群[微信群]
查看: 5041|回复: 7

[技巧] 如何编写复杂的自定义报表

  [复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:12
  • 打卡月天数:5
  • 打卡总奖励:26
  • 最近打卡:2024-11-21 09:02:53
发表于 2009-8-2 13:02:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册账号

×
一般方法的弱点实施过程中难免要根据客户的需要编写自定义报表。如果直接在自定义报表栏写SQL语句总有诸多的不便。比如:1、              不能使用某些系统函数(更别说自定义函数了);2、              不能使用分情语句;3、              对sql语句的字数有限制;所以这种方法只能做一些简单的报表,用户在使用上受到很大的限制。另外:如果使用了表头(或表体)自定义项,而这些自定义项又被其他模块定义了项目名称。那么在过滤窗体,系统就会显示这个用于其他模块的项目名称,这给客户理解报表带来很大的不便。二、使用作业的好处在实施过程中,我一般使用作业来编制复杂报表。基本的思路是这样的:先用过程生成要编制的报表,并且将它插入到tempdb当中去。把过程做成作业,让SQL SERVER在后台定时刷新这个报表。在自定义报表中,只要用最简单的select语句列出报表即可。这样做就可以完全避免【一】中所述的种种缺点,随心所欲地编出各种客户需要的报表。三、复杂报表的实例曾经编制过一个比较复杂的自定义报表――《新运行记录报表》。它有几个难点是普通自定义报表无法解决的:1、          如果班号是“大夜”要将日期减1,否则按原样显示。2、          因为数值型的自定义项不够用,用了字符型的自定义项来代替,需要将它们转换为数值型(否则做出的自定义报表无法汇总),另外有些操作员将数值型的数据写成:“8小时”、“2.3万只”需要用一个自定义函数删除多余的汉字。3、          自定义项14中的数据是对象代码(即可能是设备代码,也可能是设备的位置代码)报表中要将它转换成设备的名称或位置的名称这样的报表在作业中能够很好的实现,下面就是它的sql语句:use tempdbIF EXISTS(SELECT name          FROM        sysobjects          WHERE  name = 'yxjn'         AND    type = 'U')    DROP TABLE yxjnGOuse ufdata_777_2006SELECT convert(nvarchar(10),case eq_run.cdefine1 when '大夜' then dateadd(day,-1,eq_run.dtdate) else eq_run.dtdate end,120) as 日期,EQ_Run.cDefine1 AS [班次],EQ_Run.cDefine2 AS [班号],convert(float,dbo.turnnum(EQ_Run.cDefine3)) AS [废品只数],round(EQ_Run.cDefine7,0) AS [速度],convert(float,dbo.turnnum(EQ_Run.cDefine8)) AS [实际工时],convert(float,dbo.turnnum(EQ_Run.cDefine9)) AS [计划工时],convert(float,dbo.turnnum(EQ_Run.cDefine12)) AS [额外产量],EQ_Run.cDefine15 AS [额外工时],round(EQ_Run.cDefine16 ,0)AS [实际产量],EQ_Position.cPName AS [位置名称] , case EQ_Run.cDefine7 when null  then null when 0 then null else case convert(float,dbo.turnnum(EQ_Run.cDefine8)) when null then null when 0 then null else (EQ_Run.cDefine16-convert(float,dbo.turnnum(EQ_Run.cDefine12)))/EQ_RUN.CDEFINE7/convert(float,dbo.turnnum(EQ_Run.cDefine8))/60 end end as OEE ,case EQ_Run.cDefine16 when null then null when 0 then 0 else convert(float,dbo.turnnum(EQ_Run.cDefine3))/EQ_Run.cDefine16*1000000 end  AS PPM into tempdb..yxjn FROM EQ_Run  INNER JOIN (select cpcode,cpname from EQ_Position union all select ceqcode,ceqname from eq_eqdata) as eq_position  ON EQ_Run.cdefine14 = EQ_Position.cPCode
发表于 2009-8-17 10:42:47 | 显示全部楼层
学习了。谢谢
发表于 2009-8-17 18:56:02 | 显示全部楼层
技术不行,业务不行,农民就是看不懂啊~!!
发表于 2009-8-18 15:32:03 | 显示全部楼层
不错,就是排版不好,看得累死了。另外,数值型的字段写了字符后系统能允许你保存吗?
发表于 2009-8-18 15:35:04 | 显示全部楼层
不错,就是排版不好,看得累死了。另外,数值型的字段写了字符后系统能允许你保存吗?
发表于 2009-8-29 15:32:52 | 显示全部楼层
看的迷茫。。。。
发表于 2009-9-2 16:35:12 | 显示全部楼层
很的东西 学习了
发表于 2009-9-3 09:43:22 | 显示全部楼层
哈哈。。。又学到东西了,谢谢分享!我一般习惯用视图,可能没弄太复杂的
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

QQ|站长微信|Archiver|手机版|小黑屋|用友之家 ( 蜀ICP备07505338号|51072502110008 )

GMT+8, 2024-11-24 12:58 , Processed in 0.044126 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表