iT邦幫忙

8

[更新20081208]跨月回帳檢核報表最新ABAP邏輯

sap
SAP 2008-12-09 08:17:117713 瀏覽

跨月回帳檢核報表最新ABAP邏輯
[更新20081208]跨月回帳檢核報表最新ABAP邏輯
原始文章
http://www.domino.club.tw/bbs/bbs2002.nsf/($All)/405816716959408A4825750D000E4424?OpenDocument
2008/12/8 更新
http://www.domino.club.tw/bbs/bbs2002.nsf/($All)/E3499F04F80F4D5B482575190042B999?OpenDocument

核心程式如下:
*共通欄位
*1. MSEG~MBLNR 物料文件
*2. MSEG~MJAHR 物料年度
*3. MSEG~ZEILE 項目
*4. MSEG~LGORT 儲位
*5. MSEG~WERKS 工廠
*6. MKPF~BUDAT 過帳日期
*
*共通SQL
*1. MSEG~SMBLN NE '空白'
*2. MSEG~LFBNR NE '空白'
*
*無採購單的SQL & Outpout
*SQL
*1. MSEG~EBELN 採購單="空白"
*2. MSEG~SJAHR = MSEG~MJAHR 迴轉年度相等
*3. MSEG~SMBLN = MSEG~MBLNR 迴轉物料文件相等
*4. MSEG~SMBLP = MSEG~ZEILE 迴轉物料項目
*
*有採購單的SQL
*SQL
*1. MSEG~EBELN 採購單="非空白"
*2. MSEG~SJAHR = MSEG~LFBJA 迴轉年度相等
*3. MSEG~SMBLN = MSEG~LFBNR 迴轉物料文件相等
*4. MSEG~SMBLP = MSEG~LFPOS 迴轉物料項目

*ITAB特別定義有採購單與無採購單的欄位
LFBNR LIKE MSEG-LFBNR,"參考文件號碼 (採購)
LFBJA LIKE MSEG-MJAHR,"文件號碼年度 (採購)
LFPOS LIKE MSEG-ZEILE,"文件號碼項次 (採購)
SMBLN LIKE MSEG-SMBLN,"物料文件號碼 (無採購)
SJAHR LIKE MSEG-MJAHR,"文件號碼年度 (無採購)
SMBLP LIKE MSEG-ZEILE,"文件號碼項次 (無採購)

SELECT MSEG~WERKS MSEG~LGORT MSEG~MENGE MSEG~BWART
MSEG~EBELN MSEG~EBELP
MSEG~MBLNR MSEG~MJAHR MSEG~ZEILE
MSEG~SJAHR MSEG~SMBLN MSEG~SMBLP
MSEG~LFBJA MSEG~LFBNR MSEG~LFPOS
MKPF~MBLNR MKPF~BUDAT MKPF~MJAHR
FROM MSEG
INNER JOIN MKPF ON MSEG~MBLNR = MKPF~MBLNR AND MSEG~MJAHR = MKPF~MJAHR
INTO CORRESPONDING FIELDS OF TABLE ITAB3
WHERE ( MSEG~MBLNR NE MSEG~LFBNR AND MSEG~ZEILE NE MSEG~LFPOS )
AND ( MSEG~SMBLN NE '' OR MSEG~LFBNR NE '' )
AND MSEG~BWART NE ''
AND MSEG~WERKS IN P_WERKS
AND MSEG~MATNR IN P_MATNR
AND MSEG~BWART IN P_BWART
AND MSEG~MBLNR IN P_MBLNR
AND MKPF~BUDAT IN P_BUDAT.

*有採購單的部份
LOOP AT ITAB3. "抓參考文件號碼的月份
IF ITAB3-EBELN NE ''.
SELECT SINGLE * FROM MSEG
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-LFBJA
AND ZEILE = ITAB3-LFPOS.
MOVE MSEG-MBLNR TO ITAB3-LFBNR.
MOVE MSEG-MATNR TO ITAB3-MATNR.

SELECT SINGLE * FROM MKPF
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-LFBJA.
MOVE MKPF-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).
MOVE V_MONTH TO ITAB3-RBUDAT_M.

*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
MODIFY ITAB3.

*ENDIF.
ENDIF.
ENDLOOP.

LOOP AT ITAB3. "抓參考文件號碼的月份
*無採購單的部份
IF ITAB3-EBELN = ''.
SELECT SINGLE * FROM MSEG
WHERE MBLNR = ITAB3-SMBLN
AND MJAHR = ITAB3-SJAHR
AND ZEILE = ITAB3-SMBLP.
MOVE MSEG-MBLNR TO ITAB3-LFBNR.
MOVE MSEG-MATNR TO ITAB3-MATNR.

SELECT SINGLE * FROM MKPF
WHERE MBLNR = ITAB3-LFBNR
AND MJAHR = ITAB3-SJAHR.
MOVE MKPF-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.

*進行物料文件與回帳文件的月份比較,相等就刪除。
IF ITAB3-BUDAT_M = ITAB3-RBUDAT_M.
CLEAR ITAB3.
ENDIF.
MODIFY ITAB3.
ENDIF.
ENDLOOP.


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

1 則留言

0
jjw
iT邦研究生 1 級 ‧ 2009-05-18 17:08:19

謝謝分享

我要留言

立即登入留言