iT邦幫忙

4

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

sap
SAP 2008-12-07 00:07:4110490 瀏覽

SAP 財務成本跨月回帳的檢核報表開發的心得分享
http://www.domino.club.tw/bbs/bbs2002.nsf/($All)/405816716959408A4825750D000E4424?OpenDocument

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 ''.

  1. 庫位部份需要利用採購單號與項次關連到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.

  2. 回帳月份的抓取,透過字串切割
    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.

  1. 參考文件的過帳月份抓取,如果是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.

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

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


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言