這是來自帆軟愛好者論壇裡面一位番薯分享的案例,這裡整理給大家參考學習!ERP
——Enterprise ResourcePlanning
企業資源計劃系統,是指建立在信息技術基礎上,以系統化的管理思想,為企業決策層及員工提供決策運行手段的管理平台。ERP
系統集中信息技術與先進的管理思想於一身,成為現代企業的運行模式,反映時代對企業合理調配資源,最大化地創造社會財富的要求,成為企業在信息時代生存、發展的基石。截止到目前,使用ERP
的用戶越來越多,對數據資料的探取需求也越來越大,但ERP
報表對用戶個性化的需求支持的力度並不大,最多支持SQL
語句查詢,而對報表的樣式就無能為力了,從今天開始,我將列舉幾個報表的應用,看如何解決ERP
報表使用中的難題的。一、銷售訂單執行情況明細表1
、ERP
過濾界面圖2
、ERP
查詢效果圖相信大家從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
、報表設計過程中遇到這樣一個問題:如何計算按期交貨率?公式=
按期交貨筆數/
總筆數。我們對筆數是這麼規定的,在一張訂單上,交貨日期相同的為一筆,交貨日期相同且全部未延期交貨的為一筆按期交貨筆數,這麼說是不是有點拗口,但只要你做過類似的計算,相信你會理解的。當然,各公司的規定可能不大一樣,但演算法差不多。這個問題看似簡單,實則不然。銷售訂單號和交貨日期這兩個欄位是往下擴展的,到底有幾行是未知數,如何設置公式呢?第一步利用分組求出總筆數,用序號來代表:注意看序號18
和19
,這是一張訂單,但因為兩條分錄的交貨日期不同,我們認為這是兩筆訂單,用序號來代表還有一個好處是看著直觀,設計報表一定要站在用戶的角度,因為他們是最終使用者。FR
的父格很有作用,把序號的父格指向交貨日期單元格就可以了。EXCEL
表功能最強大,用它也不好做,即使做了方法也不會比FR
更簡單。做報表關鍵是思路和想法,當時在設計這個報表時,苦苦思索了一整天,也沒有想到解決方案,無奈之下上論壇發貼求助,在jane
版主的幫助下順利解決,再次表示感謝!如何判斷是否按期交貨呢?增加一個輔助列,做好以後列隱藏,公式=if(and(min(Q5)>=0,P5>=1),1,0)
,只需要判斷交貨日期這一組中最小的數字是否大於等於0
就可以了,如果條件符合返回1
,否則返回0
,做好這個之後求這一列的和就可以了,這個匯總就是按期交貨的筆數,問題迎刃而解。寫到這裡不由的一陣感慨:FR
真是太靈活了!可能有人會說:「你是不是FR
的托呀,在這直打廣告」,那麼好,現在讓你不論用哪個軟體,按照這個需求能做出來,方法有更簡單的,請在後面跟帖。現在把ERP
報表和FR
報表效果圖放在一起比較,是不是高低立判呀,樣式效果還不是關鍵,關鍵是按照各個企業的管理特點開發出了非常有針對性的報表,充分挖掘已有數據資料,不怕做不到,就怕想不到呀。