广告广告
  加入我的最爱 设为首页 风格修改
首页 首尾
 手机版   订阅   地图  繁体 
您是第 9311 个阅读者
 
发表文章 发表投票 回覆文章
  可列印版   加为IE收藏   收藏主题   上一主题 | 下一主题   
lilimiao
数位造型
个人文章 个人相簿 个人日记 个人地图
小人物
级别: 小人物 该用户目前不上站
推文 x0 鲜花 x0
分享: 转寄此文章 Facebook Plurk Twitter 复制连结到剪贴簿 转换为繁体 转换为简体 载入图片
推文 x0
浅谈FR为ERP提供报表解决方案
这是来自帆软爱好者论坛里面一位番薯分享的案例,这里整理给大家参考学习!
ERP——Enterprise ResourcePlanning 企业资源计划系统,是指建立在信息技术基础上,以系统化的管理思想,为企业决策层及员工提供决策运行手段的管理平台。ERP系统集中信息技术与先进的管理思想于一身,成为现代企业的运行模式,反映时代对企业合理调配资源,最大化地创造社会财富的要求,成为企业在信息时代生存、发展的基石。
截止到目前,使用ERP的用户越来越多,对数据资料的探取需求也越来越大,但ERP报表对用户个性化的需求支持的力度并不大,最多支持SQL语句查询,而对报表的样式就无能为力了,从今天开始,我将列举几个报表的应用,看如何解决ERP报表使用中的难题的。
一、销售订单执行情况明细表
1ERP过滤界面图

2ERP查询效果图

相信大家从ERP效果图中可以看出,报表提供了两种单据资料,即销售订单和销售出库单,并且这两种单据资料还不是在同一行上,都是隔行显示,用户体验并不好,并且这些资料比较单一,如果我还想知道订单的入库情况、订单完工率、订单按期交货率呢?那只能对资料进行二次加工,比较常见的方法是把资料导出EXCEL表使用公式来做,粗略估计,没有个把钟头无法做出像样的报表来。
3、使用FR报表做出来的报表效果图

FR做报表,必须要明白点SQL,而且对ERP资料库也要有一定的了解,清楚每个栏位的含义,否则多表关联你也是搞不定的,下面是模板资料集语句:
SELECT * FROM (SELECT t1.FBillNo,u1.FNameAS FCustID,case when u1.FName=’零售户’ then ‘预测订单’ else ‘销售订单’ end as FCustID1,t1.FDate,
u2.FName AS FEmpID,
case when t1.FMultiCheckLevel1=16403 ort1.FMultiCheckLevel1=16507 then ‘昆嵛路工厂’
else ‘四产路工厂’ end
ASfparentid,t2.FEntryID,t100.FNumber,t100.FName,t100.FModel,
CASE WHEN t2.FUnitID=0 THEN ” ELSE u4.FNameEND AS FUnitID,
t2.FAuxQty As FQty,t2.FDate ASFOutStockDate,t2.FAdviceConsignDate,u5.FBOMNumber,t1.FInterID
,t2.FAuxStockQty as FStockQty,t51.FName asFCUUnitID,t2.FQty/t51.FCoefficient as FCUQty,
t2.FStockQty/t51.FCoefficient asFCUStockQty
,cast(t2.finterid asvarchar)+cast(t2.fentryid as varchar) finteridfentryid,t800.fqtyfstockqty1,t800.fcheckdate,t2.FHaveMrp,t1.FExchangeRate,t2.fauxpricediscount
FROM SEOrder t1 INNER JOIN SEOrderEntry t2ON t1.FInterID = t2.FInterID and t1.fstatus in (1,2,3)
and t1.FChangeMark=0 ANDIsnull(t1.FClassTypeID,0)<>1007100 and t2.FMrpAutoClosed in ${是否手工行关闭} leftouter join icmo t900 on t900.FOrderInterID =t2.FInterID andt900.FSourceEntryID=t2.FEntryID and t900.fitemid=t2.fitemid
left outer join (selectb.FICMOInterID,b.fitemid,b.fqty,a.fcheckdate from icstockbill a joinicstockbillentry b
on a.finterid=b.finterid wherea.ftrantype=2 and a.fstatus=1) t800 on t800.FICMOInterID=t900.finterid
LEFT OUTER JOIN t_Organization u1 ONt1.FCustID=u1.FItemID
LEFT OUTER JOIN t_Emp u2 ONt1.FEmpID=u2.FItemID
LEFT OUTER JOIN t_ICItem t100 ON t2.FItemID= t100.FItemID
LEFT OUTER JOIN t_MeasureUnit u4 ONt2.FUnitID = u4.FItemID
LEFT OUTER JOIN t_MeasureUnit t51 ONt100.FProductUnitID=t51.FItemID
LEFT OUTER JOIN ICBOM u5 ON t2.FBomInterID= u5.FInterID ) tt
WHERE 1=1 and tt.FOutStockDate>=${开始日期} andtt.FOutStockDate<='${结束日期}' and tt.FCustID1='销售订单' and tt.FNumber>3.01
${if(len(fparentid)==0,””,”and fparentid =‘”+fparentid+”‘”)}
order by ${cname} ${orderby}
(看起来有点复杂,这些是以需求为导向的,看需求的复杂程度而定啦)
4、做好的模板图

5、报表设计过程中遇到这样一个问题:如何计算按期交货率?公式=按期交货笔数/总笔数。我们对笔数是这么规定的,在一张订单上,交货日期相同的为一笔,交货日期相同且全部未延期交货的为一笔按期交货笔数,这么说是不是有点拗口,但只要你做过类似的计算,相信你会理解的。当然,各公司的规定可能不大一样,但演算法差不多。
这个问题看似简单,实则不然。销售订单号和交货日期这两个栏位是往下扩展的,到底有几行是未知数,如何设置公式呢?第一步利用分组求出总笔数,用序号来代表:

注意看序号1819,这是一张订单,但因为两条分录的交货日期不同,我们认为这是两笔订单,用序号来代表还有一个好处是看着直观,设计报表一定要站在用户的角度,因为他们是最终使用者。FR的父格很有作用,把序号的父格指向交货日期单元格就可以了。
EXCEL表功能最强大,用它也不好做,即使做了方法也不会比FR更简单。
做报表关键是思路和想法,当时在设计这个报表时,苦苦思索了一整天,也没有想到解决方案,无奈之下上论坛发贴求助,在jane版主的帮助下顺利解决,再次表示感谢!
如何判断是否按期交货呢?增加一个辅助列,做好以后列隐藏,公式=if(and(min(Q5)>=0,P5>=1),1,0),只需要判断交货日期这一组中最小的数字是否大于等于0就可以了,如果条件符合返回1,否则返回0,做好这个之后求这一列的和就可以了,这个汇总就是按期交货的笔数,问题迎刃而解。写到这里不由的一阵感慨:FR真是太灵活了!可能有人会说:「你是不是FR的托呀,在这直打广告」,那么好,现在让你不论用哪个软体,按照这个需求能做出来,方法有更简单的,请在后面跟帖。
现在把ERP报表和FR报表效果图放在一起比较,是不是高低立判呀,样式效果还不是关键,关键是按照各个企业的管理特点开发出了非常有针对性的报表,充分挖掘已有数据资料,不怕做不到,就怕想不到呀。



献花 x0 回到顶端 [楼 主] From:欧洲 | Posted:2015-12-15 14:27 |

首页  发表文章 发表投票 回覆文章
Powered by PHPWind v1.3.6
Copyright © 2003-04 PHPWind
Processed in 0.092567 second(s),query:15 Gzip disabled
本站由 瀛睿律师事务所 担任常年法律顾问 | 免责声明 | 本网站已依台湾网站内容分级规定处理 | 连络我们 | 访客留言