MIR7预制发票扣除已经预制的数量(每月多次预制,未即时过账)详解编程语言

业务场景见抬头,有没有标准的解决方案就不说了,也没去考虑。。。

这个增强还是SAP老表提供的,感谢,省了不少时间。

INCLUDE:LMR1MF6S

最后的位置

ENHANCEMENT 1  ZMIR7_01.    "active version 
DATA:LS_YDRSEG LIKE LINE OF YDRSEG. 
DATA:L_T_QTY LIKE EKBE-MENGE. 
DATA:LY_PRUEFLOS TYPE QPLOS. 
DATA:LY_ART TYPE QPART. 
DATA:LV_INSMK TYPE MSEG-INSMK. 
DATA:lv_BSART TYPE ESART. 
DATA:lv_KNTTP TYPE KNTTP. 
CHECK RM08M-VORGANG = '1'. 
LOOP AT YDRSEG INTO LS_YDRSEG. 
L_T_QTY = 0. 
CLEAR:LY_PRUEFLOS,LV_INSMK,lv_bSART,lv_KNTTP."排除没做出使用决策的物料凭证 
SELECT SINGLE KNTTP INTO LV_KNTTP FROM EKPO WHERE EBELN = LS_YDRSEG-EBELN AND EBELP = LS_YDRSEG-EBELP.. 
IF LV_KNTTP = 'A' OR LV_KNTTP = 'K' OR LV_KNTTP = 'Z' OR LV_KNTTP = 'F'. 
ELSE. 
SELECT SINGLE INSMK INTO LV_INSMK FROM MSEG WHERE MJAHR = LS_YDRSEG-LFGJA 
AND MBLNR = LS_YDRSEG-LFBNR  AND ZEILE = LS_YDRSEG-LFPOS. 
IF LV_INSMK = 'X'. 
SELECT SINGLE ART INTO lY_ART FROM QMAT WHERE ART = '01' AND MATNR = LS_YDRSEG-matnr AND WERKS = LS_YDRSEG-werks. 
IF sy-subrc = 0. 
SELECT SINGLE PRUEFLOS INTO LY_PRUEFLOS 
FROM QALS WHERE MJAHR = LS_YDRSEG-LFGJA 
AND  MBLNR = LS_YDRSEG-LFBNR  AND ZEILE = LS_YDRSEG-LFPOS AND STAT34 = 'X'. 
IF LY_PRUEFLOS IS INITIAL. 
DELETE YDRSEG. 
CONTINUE. 
ENDIF. 
ENDIF. 
ENDIF. 
ENDIF. 
SELECT SUM( CASE SHKZG WHEN 'S' THEN MENGE ELSE -1 * MENGE END ) 
INTO @L_T_QTY 
FROM EKBE 
WHERE EBELN = @LS_YDRSEG-EBELN 
AND   EBELP = @LS_YDRSEG-EBELP 
AND   BEWTP IN ('T','Q') 
AND   LFGJA = @LS_YDRSEG-LFGJA 
AND   LFBNR = @LS_YDRSEG-LFBNR 
AND   LFPOS = @LS_YDRSEG-LFPOS. 
SELECT SINGLE bsart INTO lv_bsart FROM ekko WHERE ebeln = LS_YDRSEG-EBELN. 
IF lv_bsart = '915'. 
LS_YDRSEG-MENGE = LS_YDRSEG-WEMNG + L_T_QTY. 
ELSE. 
LS_YDRSEG-MENGE = LS_YDRSEG-WEMNG - L_T_QTY. 
ENDIF. 
"DELETE 没有使用决策的物料凭证 
LS_YDRSEG-BPMNG = LS_YDRSEG-MENGE. 
IF LS_YDRSEG-MENGE <= 0. 
DELETE YDRSEG. 
CONTINUE. 
ELSE. 
MODIFY YDRSEG FROM LS_YDRSEG. 
ENDIF. 
ENDLOOP. 
ENDENHANCEMENT.

中间有一大串IF ELSE的可以忽略,特殊业务处理

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18610.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论