SAP_ABAP_MM_BADI清单案例教程——PO采购发票校验_INVOICE_UPDATE_MIRO

SAP ABAP 顾问(开发工程师)能力模型_Terry谈企业数字化的博客-CSDN博客目标:基于对SAP abap 顾问能力模型的梳理,给一年左右经验的abaper 快速成长为三年经验提参考ALV/REPORT|SMARTFROM|SCREEN|OLE|BAPI|BDC|PI|IDOC|RFC|API|WEBSERVICE|Enhancement|UserExits|Badi|Debughttps://blog.csdn.net/java_zhong1990/article/details/132469977

一 背景说明

1.1 BADI的概念

        SAP BADI(Business Application Development Interface)是SAP在标准程序中为客户自定义逻辑所预留的接口(属于第三代增强),在技术本质上是一个interface,通过实现类的向上继承,完成用户逻辑的调用。

1.2 BADI清单

 采购申请创建 | 采购订单创建 | 采购订单审批 | 采购订单收货 | 采购发票校验 

生产订单收货 |

采购申请创建ME_PROCESS_REQ_CUSTSAP_MM_ABAP_BADI清单案例教程——PR采购申请创建_ME_PROCESS_REQ_CUST_ME51N_Terry谈企业数字化的博客-CSDN博客
采购订单创建ME_PROCESS_PO_CUSTSAP_MM_ABAP_BADI清单案例教程——PO采购订单创建_ME_PROCESS_PO_CUST_ME21N-CSDN博客
采购订单审批

ZME_PURCHDOC_POSTED

SAP_MM_ABAP_BADI清单案例教程——PO采购订单审批_ME_PURCHDOC_POSTED_ME29N-CSDN博客
采购订单收货MB_MIGO_BADISAP_MM_ABAP_BADI清单案例教程——PO采购订单收货_MB_MIGO_BADI_MIGO_Terry谈企业数字化的博客-CSDN博客
采购发票校验

INVOICE_UPDATE

SAP_MM_ABAP_BADI清单案例教程——PO采购发票校验_INVOICE_UPDATE_MIRO-CSDN博客
生产订单收货

ZMB_DOCUMENT_BADI

SAP_MM_ABAP_BADI清单案例教程——生产订单收货_MB_DOCUMENT_BADI_MB1B_Terry谈企业数字化的博客-CSDN博客

二 实施步骤

2.1 BADI名称 INVOICE_UPDATE

2.2 实施BADI,输入Tcode SE19 

三 实施细节

CHANGE_AT_SAVEABAP ABAP 代码Invoice Document at Save
CHANGE_BEFORE_UPDATEABAP ABAP 代码Invoice Document Before Update
CHANGE_IN_UPDATEABAP ABAP 代码Invoice Document During Update

CHANGE_AT_SAVE

3.1 代码样例

  METHOD if_ex_invoice_update~change_at_save.
    DATA(lv_code) = sy-tcode .
    IF s_rbkp_new-lifnr IS NOT INITIAL AND lv_code = 'MIR7'.
      LOOP AT ti_rseg_new ASSIGNING FIELD-SYMBOL(<fs_rseg>) .
        SELECT SINGLE
          rbkp~belnr
           INTO @DATA(lv_belnr)
           FROM rbkp
          INNER JOIN rseg ON rbkp~belnr = rseg~belnr AND rbkp~gjahr = rseg~gjahr
          WHERE rbkp~lifnr = @s_rbkp_new-lifnr
          AND   rseg~werks = @<fs_rseg>-werks "20210810 加入工厂作为判断条件
          AND   rbkp~rbstat = 'A' .
        IF sy-subrc = 0.
          MESSAGE e899(v1) WITH '该供应商已存在未过账预制发票,请先联系财务校对并过账,该预制凭证号为:' && lv_belnr .
        ENDIF .
      ENDLOOP .
    ENDIF .

***MIR7/MIRO保存时,将屏幕字段付款方式设置为必填
    IF lv_code = 'MIR7' OR  lv_code = 'MIRO' .
      IF s_rbkp_new-zlsch IS INITIAL .
        MESSAGE e899(v1) WITH '付款方式设置为必填' .
      ENDIF .
    ENDIF .
*"20221123 MIR7分配号输入检验
    DATA len TYPE i.
    IF lv_code = 'MIR7' OR lv_code = 'MIR4'.
      len = strlen( s_rbkp_new-zuonr ).
      IF len > 0.
        IF s_rbkp_new-zuonr+0(len) CA space .
          MESSAGE e899(v1) WITH '分配号存在空格,请检查' .
        ENDIF.
      ENDIF.
    ENDIF.

***MIR7/MIRO保存时,增强检查该供应商,通过输入的采购订单检查采购订单的付款条件(EKKO- ZTERM)是否一致
    IF lv_code = 'MIR7' OR  lv_code = 'MIRO' .
      IF ti_rseg_new[] IS NOT INITIAL .
        SELECT zterm
          INTO TABLE @DATA(lt_zterm)
          FROM ekko
          FOR ALL ENTRIES IN @ti_rseg_new
          WHERE ebeln = @ti_rseg_new-ebeln .
        LOOP AT lt_zterm ASSIGNING FIELD-SYMBOL(<fs_zterm>).
          LOOP AT lt_zterm ASSIGNING FIELD-SYMBOL(<fs_zterm2>) WHERE zterm <> <fs_zterm>-zterm .
            MESSAGE e899(v1) WITH '采购订单的付款条件不一致' .
          ENDLOOP .

        ENDLOOP .
      ENDIF .
    ENDIF .

    CLEAR lv_code .
  ENDMETHOD.

3.2 效果

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Terry谈企业数字化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值