原文链接:https://blog.csdn.net/LH26988/article/details/136802631
之前博主有介绍过通过配置来控制不让采购发票重复开立,然是这个方式有点缺陷(跳转)
今天介绍,通过增强来彻底搞定这个问题的办法:
问题如下:
比如:
1月开票的432pc,MIR7金额和数量不会带出
3月开票的568pc,MIR7预制时依旧能带出并生成预制凭证
检查了系统配置和主数据:
(1)基于收货的发票校验标识:供应商主数据/信息记录/采购订单,有勾选
(2)OMRDC-重复发票检查:有勾选
(3)OBA5-消息控制:状态是E
以上配置均无问题
间隔时间较近的能带出,远的不会带出,所以怀疑是否跟发票未清账有关,但是财务清账是需要付款才能清,而且并不是过账了当月就会付款了,所以系统里会存在很多供应商都有已过账,但还未付款未清账的情况,无法验证,且不符合业务实际,所以只能通过增强控制。
补充一点:MIRO和MIR7的区别
MIRO如果已经开票,金额和数量都会显示为空,但是会带出本月的未开票的数据,MIR7则不会带出本月未开票的数据
财务是一个月对账一次,本月对账上个月的收货数据,所以需要对MIR7作增强控制
直接在程序LMR1MF6S - endform 前面加一段代码
ENHANCEMENT-POINT MIR7_01 SPOTS ES_SAPLMR1M . "MIR7已经过账的数据不能再重复预制
DATA: LS_YDRSEG LIKE LINE OF YDRSEG.
DATA: LT_EKBE LIKE TABLE OF EKBE WITH HEADER LINE.
DATA: L_QTY LIKE EKBE-MENGE.
DATA: S_QTY LIKE EKBE-MENGE.
CHECK RM08M-VORGANG = '1'.
IF SY-TCODE = 'MIR7'.
LOOP AT YDRSEG INTO LS_YDRSEG.
CLEAR: LT_EKBE,L_QTY,S_QTY.
REFRESH: LT_EKBE.
SELECT *
INTO CORRESPONDING FIELDS OF TABLE LT_EKBE
FROM EKBE
WHERE EBELN = LS_YDRSEG-EBELN
AND EBELP = LS_YDRSEG-EBELP
* AND BEWTP IN ('T','Q') "Q - 已过账 ;T - 预制
AND BEWTP = 'Q'
AND LFGJA = LS_YDRSEG-LFGJA
AND LFBNR = LS_YDRSEG-LFBNR
AND LFPOS = LS_YDRSEG-LFPOS.
IF LT_EKBE[] IS NOT INITIAL.
LOOP AT LT_EKBE.
IF LT_EKBE-SHKZG = 'S'. "借方
L_QTY = LT_EKBE-MENGE.
ELSEIF LT_EKBE-SHKZG = 'H'. "贷方
L_QTY = 0 - LT_EKBE-MENGE.
ENDIF.
S_QTY = S_QTY + L_QTY.
ENDLOOP.
IF LS_YDRSEG-SHKZG = 'H'.
LS_YDRSEG-WEMNG = 0 - LS_YDRSEG-WEMNG. "退货订单
ENDIF.
LS_YDRSEG-MENGE = LS_YDRSEG-WEMNG - S_QTY.
LS_YDRSEG-BPMNG = LS_YDRSEG-MENGE.
IF LS_YDRSEG-MENGE <= 0.
DELETE YDRSEG.
CONTINUE.
ELSE.
MODIFY YDRSEG FROM LS_YDRSEG.
ENDIF.
ENDIF.
ENDLOOP.
ENDIF.
以上~~