Tuesday, November 25, 2008

SAP 財務成本跨月回帳的檢核報表開發的心得分享

SAP 財務成本跨月回帳的檢核報表開發的心得分享

1.報表開發的目的:

雖然SAP標準系統有提供MB51供相關物料文件異動類型查詢,但是財務每月做成本的稽核時,就會發現一堆迴轉異動類型不知道頭尾,這時候財務成本人員要忙著對帳,於是如果有一個報表可以提供所有”跨月”異動的帳作呈現,是不是就可以大大降低檢核人員的負擔,同時也可以提供各單位有需要的人員作襙做異常管理用,如倉管主管可以依據此報表查看收貨、發料人員是否有異常回帳,船務主管也可以檢核出貨的VL02N是否正常運行。

整個設計主要以EKBE為主,其中物料文件的過帳與迴轉的關連性並非”出貨單號”,因為很多業務角度的ABAP會抓出貨單號,很多異動類型跟出貨沒關係。

例如101 與 102 的物料文件關係為何? 101 的物料文件號碼(BELNR)與參考文件號碼(LFBNR)一定是相同,只要不是迴轉的這兩個欄位都會相同。

只要是迴轉的交易,物料文件的參考文件號碼(LFBNR)就是他回帳對象的文件號碼(BELNR),例如102的文件參考號碼(LFBNR)就是101的文件號碼(BELNR)。

抓到相關資料後,我們可以針對過帳文件與迴轉文件的日期月份做比較,如果不是一樣,就表示過帳與迴轉是跨月。

要注意的是庫位,庫位必須抓EKPO採購單身的,必須用採購單號與項目與物料與工廠去關連出來。

2.報表設計需要的Table:
EKBE 主要
MARD, MARA, MAKT

3.報表輸入的參數部份:
EKBE-WERKS 工廠
EKBE-BWART 異動類型
EKBE-MATNR 物料號碼
EKBE-BELNR 物料文件號碼
EKBE-BUDAT 過帳日期

4.輸出的部份:
BELNR 文件號碼
BWART 異動號碼
BUDAT 過帳日期
BUDAT_Month 過帳月份
LFBNR 參考號碼
BUDAT_Reference 參考文件的過帳日期
BUDAT_Reference_Month 參考文件的過帳月份
WERKS 工廠
LGORT 庫位
MAKTX 物料說明
EBELN 採購單
EBELP 採購單項目
MENGE 過帳數量

5.核心的SQL部分
SELECT EKBE~BELNR EKBE~EBELN EKBE~EBELP EKBE~BWART EKBE~BUDAT EKBE~LFBNR EKBE~MATNR EKBE~WERKS EKBE~MENGE

FROM EKBE
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE EKBE~BELNR NE EKBE~LFBNR
AND EKBE~WERKS IN P_WERKS
AND EKBE~MATNR IN P_MATNR
AND EKBE~BWART IN P_BWART
AND EKBE~BELNR IN P_BELNR
*AND EKBE~XBLNR IN P_XBLNR
AND EKBE~BUDAT IN P_BUDAT
AND EKBE~BELNR NE ''
AND EKBE~LFBNR NE ''
AND EKBE~BWART NE ''.

6. 庫位部份需要利用採購單號與項次關連到EKPO單身找出庫位
LOOP AT ITAB3. "抓庫位
SELECT LGORT INTO EKPO-LGORT
FROM EKPO WHERE MATNR = ITAB3-MATNR AND WERKS = ITAB3-WERKS AND EBELN = ITAB3-EBELN AND EBELP = ITAB3-EBELP.
IF SY-SUBRC = 0.
MOVE EKPO-LGORT TO ITAB3-LGORT.
MODIFY ITAB3.
ENDIF.
ENDSELECT.
ENDLOOP.

7. 回帳月份的抓取,透過字串切割
LOOP AT ITAB3. "回帳月份
IF SY-SUBRC = 0.
* WRITE / ITAB3-BUDAT.
STRING = ITAB3-BUDAT .
* WRITE / STRING.
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-BUDAT_M.

MODIFY ITAB3.
ENDIF.
ENDLOOP.

8. 參考文件的過帳月份抓取,如果是102為物料參考文件,那此段的月份就是101的過帳月份
LOOP AT ITAB3. "抓參考文件號碼的月份
SELECT SINGLE * FROM EKBE
WHERE MATNR = ITAB3-MATNR
AND BELNR = ITAB3-LFBNR.
IF SY-SUBRC = 0.

MOVE EKBE-BUDAT TO ITAB3-RBUDAT.

STRING = ITAB3-RBUDAT .
* 轉換日期到字串月
V_YMD = STRING.
V_OFFSET_START = 4 .
V_OFFSET_LENGTH = 2.
V_MONTH = V_YMD+V_OFFSET_START(V_OFFSET_LENGTH).
*WRITE / L_C.
MOVE V_MONTH TO ITAB3-RBUDAT_M.

9. 我們只要過帳與迴轉不同月份的資料,所以相同就刪除
*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
ENDIF.
MODIFY ITAB3.
ENDLOOP.

10. ITAB3 異動後,再把重複的刪除列移除,重新寫入。
SORT ITAB3 BY BELNR. "依據文件號碼排序
DELETE ADJACENT DUPLICATES FROM ITAB3.

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home