淺談FR為ERP提供報表解決方案 - Java - 程式設計 - 頂客論壇 ,免費遊戲,免費交友,免費空間,免費部落格,免費相簿,免費開店 - 頂客社區 dk101.com 最用心的華人社群網站
發新話題

[討論] 淺談FR為ERP提供報表解決方案

淺談FR為ERP提供報表解決方案

這是來自帆軟愛好者論壇裡面一位番薯分享的案例,這裡整理給大家參考學習!
ERP——Enterprise Resource Planning 企業資源計劃系統,是指建立在信息技術基礎上,以系統化的管理思想,為企業決策層及員工提供決策運行手段的管理平台。ERP系統集中信息技術與先進的管理思想於一身,成為現代企業的運行模式,反映時代對企業合理調配資源,最大化地創造社會財富的要求,成為企業在信息時代生存、發展的基石。
截止到目前,使用ERP的用戶越來越多,對數據資料的探取需求也越來越大,但ERP報表對用戶個性化的需求支持的力度並不大,最多支持SQL語句查詢,而對報表的樣式就無能為力了,從今天開始,我將列舉幾個報表的應用,看如何解決ERP報表使用中的難題的。
一、銷售訂單執行情況明細表
1、ERP過濾界面圖

2、ERP查詢效果圖

相信大家從ERP效果圖中可以看出,報表提供了兩種單據資料,即銷售訂單和銷售出庫單,並且這兩種單據資料還不是在同一行上,都是隔行顯示,用戶體驗並不好,並且這些資料比較單一,如果我還想知道訂單的入庫情況、訂單完工率、訂單按期交貨率呢?那只能對資料進行二次加工,比較常見的方法是把資料導出EXCEL表使用公式來做,粗略估計,沒有個把鐘頭無法做出像樣的報表來。
3、使用FR報表做出來的報表效果圖

用FR做報表,必須要明白點SQL,而且對ERP資料庫也要有一定的了解,清楚每個欄位的含義,否則多表關聯你也是搞不定的,下面是模板資料集語句:
SELECT * FROM (SELECT t1.FBillNo,u1.FName AS FCustID,case when u1.FName=’零售戶’ then ‘預測訂單’ else ‘銷售訂單’ end as FCustID1,t1.FDate,
u2.FName AS FEmpID,
case when t1.FMultiCheckLevel1=16403 or t1.FMultiCheckLevel1=16507 then ‘昆嵛路工廠’
else ‘四產路工廠’ end
AS fparentid,t2.FEntryID,t100.FNumber,t100.FName,t100.FModel,
CASE WHEN t2.FUnitID=0 THEN ” ELSE u4.FName END AS FUnitID,
t2.FAuxQty As FQty,t2.FDate AS FOutStockDate,t2.FAdviceConsignDate,u5.FBOMNumber,t1.FInterID
,t2.FAuxStockQty as FStockQty,t51.FName as FCUUnitID,t2.FQty/t51.FCoefficient as FCUQty,
t2.FStockQty/t51.FCoefficient as FCUStockQty
,cast(t2.finterid as varchar)+cast(t2.fentryid as varchar) finteridfentryid,t800.fqty fstockqty1,t800.fcheckdate,t2.FHaveMrp,t1.FExchangeRate,t2.fauxpricediscount
FROM SEOrder t1 INNER JOIN SEOrderEntry t2 ON t1.FInterID = t2.FInterID and t1.fstatus in (1,2,3)
and t1.FChangeMark=0 AND Isnull(t1.FClassTypeID,0)<>1007100 and t2.FMrpAutoClosed in ${是否手工行關閉} left outer join icmo t900 on t900.FOrderInterID =t2.FInterID and t900.FSourceEntryID=t2.FEntryID and t900.fitemid=t2.fitemid
left outer join (select b.FICMOInterID,b.fitemid,b.fqty,a.fcheckdate from icstockbill a join icstockbillentry b
on a.finterid=b.finterid where a.ftrantype=2 and a.fstatus=1) t800 on t800.FICMOInterID=t900.finterid
LEFT OUTER JOIN t_Organization u1 ON t1.FCustID=u1.FItemID
LEFT OUTER JOIN t_Emp u2 ON t1.FEmpID=u2.FItemID
LEFT OUTER JOIN t_ICItem t100 ON t2.FItemID = t100.FItemID
LEFT OUTER JOIN t_MeasureUnit u4 ON t2.FUnitID = u4.FItemID
LEFT OUTER JOIN t_MeasureUnit t51 ON t100.FProductUnitID=t51.FItemID
LEFT OUTER JOIN ICBOM u5 ON t2.FBomInterID = u5.FInterID ) tt
WHERE 1=1 and tt.FOutStockDate>=’${開始日期}’ and tt.FOutStockDate<='${結束日期}' and tt.FCustID1='銷售訂單' and tt.FNumber>‘3.01’
${if(len(fparentid)==0,””,”and fparentid = ‘”+fparentid+”‘”)}
order by ${cname} ${orderby}
(看起來有點複雜,這些是以需求為導向的,看需求的複雜程度而定啦)
4、做好的模板圖

5、報表設計過程中遇到這樣一個問題:如何計算按期交貨率?公式=按期交貨筆數/總筆數。我們對筆數是這麼規定的,在一張訂單上,交貨日期相同的為一筆,交貨日期相同且全部未延期交貨的為一筆按期交貨筆數,這麼說是不是有點拗口,但只要你做過類似的計算,相信你會理解的。當然,各公司的規定可能不大一樣,但演算法差不多。
這個問題看似簡單,實則不然。銷售訂單號和交貨日期這兩個欄位是往下擴展的,到底有幾行是未知數,如何設置公式呢?第一步利用分組求出總筆數,用序號來代表:

注意看序號18和19,這是一張訂單,但因為兩條分錄的交貨日期不同,我們認為這是兩筆訂單,用序號來代表還有一個好處是看著直觀,設計報表一定要站在用戶的角度,因為他們是最終使用者。FR的父格很有作用,把序號的父格指向交貨日期單元格就可以了。
EXCEL表功能最強大,用它也不好做,即使做了方法也不會比FR更簡單。
做報表關鍵是思路和想法,當時在設計這個報表時,苦苦思索了一整天,也沒有想到解決方案,無奈之下上論壇發貼求助,在jane版主的幫助下順利解決,再次表示感謝!
如何判斷是否按期交貨呢?增加一個輔助列,做好以後列隱藏,公式=if(and(min(Q5)>=0,P5>=1),1,0),只需要判斷交貨日期這一組中最小的數字是否大於等於0就可以了,如果條件符合返回1,否則返回0,做好這個之後求這一列的和就可以了,這個匯總就是按期交貨的筆數,問題迎刃而解。寫到這裡不由的一陣感慨:FR真是太靈活了!可能有人會說:「你是不是FR的托呀,在這直打廣告」,那麼好,現在讓你不論用哪個軟體,按照這個需求能做出來,方法有更簡單的,請在後面跟帖。
現在把ERP報表和FR報表效果圖放在一起比較,是不是高低立判呀,樣式效果還不是關鍵,關鍵是按照各個企業的管理特點開發出了非常有針對性的報表,充分挖掘已有數據資料,不怕做不到,就怕想不到呀。

TOP

發新話題

本站所有圖文均屬網友發表,僅代表作者的觀點與本站無關,如有侵權請通知版主會盡快刪除。