SAP-MM 采购订单已开票,MIR7可以重复预制发票 - 增强控制

本文讨论了解决MIR7在处理已过账数据时的重复预制问题,通过检查系统配置、主数据和程序逻辑,发现需要在LMR1MF6S-endform前添加代码来避免过账数据的重复预制,以符合财务一个月对账一次的实际需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

比如:

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.

以上~~

### 关于SAP MIR7 预制发票底表的技术信息 在SAP系统中,`MIR7` 是用于处理预制发票的一个事务码。它主要用于创建基于采购订单预制发票凭证,并允许用户手动输入或调整发票数据。为了理解 `MIR7` 的底层逻辑和技术细节,我们需要关注其涉及的核心底表以及配置方法。 #### 核心底表及其作用 以下是与 `MIR7` 预制发票相关的几个重要底表: 1. **`EKPO` 表** - 存储采购订单项目的详细信息。 - 当通过 `MIR7` 创建预制发票时,系统会从该表读取采购订单的相关数据以填充发票字段[^1]。 2. **`EBAN` 表** - 记录采购申请的信息。 - 如果采购订单是从采购申请生成的,则此表中的数据可能间接影响 `MIR7` 中的数据展示[^3]。 3. **`RBKP` 和 `RSEG` 表** - 这两个表分别存储财务会计凭证头和行项目信息。 - 在执行 `MIR7` 后,如果成功生成了预制发票凭证,这些数据会被写入到这两个表中[^2]。 4. **`BKPF` 和 `BSEG` 表** - 类似于 `RBKP` 和 `RSEG`,但更偏向于总账层面的记录。 - 它们同样会在最终确认发票并过账时被更新[^3]。 #### 数据流概述 当使用 `MIR7` 处理预制发票时,整个流程遵循以下顺序: - 用户启动 `MIR7` 并选择对应的采购订单作为依据。 - 系统根据选定的采购订单号访问 `EKPO` 表获取商品和服务的具体明细。 - 若存在已收货物的数量差异或其他特殊情况(如容差范围),则需调用后台作业 (Job Program) 如 `RMBABG00` 来完成自动对比计算。 - 成功匹配后,产生的临时凭证将存放在内存缓冲区直至正式提交至数据库;一旦提交完毕,“实际”的凭证条目即刻录入前述提到的各种核心表格之中。 #### 自定义配置指南 对于希望进一步优化或者修改默认行为的企业来说,可以通过如下方式来定制化自己的解决方案: 1. 使用 T-CODE: OLMRLIST 调整显示布局 此工具可以帮助管理员重新排列界面上各栏位的位置以便更好地满足特定需求。具体步骤包括但不限于复制现有视图模板、增删所需栏目等操作[^4]。 2. 设置合理的容差参数 企业可以根据自身的管理策略设定不同的容忍度界限(比如金额上的轻微偏差),从而减少不必要的干预次数。这通常涉及到更改某些隐藏参数文件的内容或是利用标准交易界面来进行相应设置。 3. 开发额外的功能扩展程序 对于那些超出开箱即用能力范畴的要求而言,往往还需要借助 ABAP 编程技能来自行构建附加组件。例如增加新的校验规则、改变原始算法等等皆可通过此类手段达成目标。 ```abap REPORT zmir7_customization. DATA: lv_order TYPE ekko-bstnk, lt_items TYPE TABLE OF ekpo. SELECT * FROM ekpo INTO TABLE lt_items WHERE bstnk = lv_order. IF sy-subrc EQ 0 AND lines( lt_items ) GT 0. WRITE: / 'Order Items Found:', lines( lt_items ). ELSE. WRITE: / 'No Order Items Found.'. ENDIF. ``` 以上代码片段展示了如何查询给定采购订单下的所有子项列表——这是任何深入分析之前必不可少的基础工作之一。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值