ITPub博客

首页 > 数字化转型 > ERP > MRM_HEADER_CHECK发票预制抬头数据检查

MRM_HEADER_CHECK发票预制抬头数据检查

原创 ERP 作者:zhaoshuhong 时间:2020-04-23 17:25:33 0 删除 编辑

现在SAP越来越开放了,有多种方法可以做检查,比如最直观的source code plug in,这里只记载一个传统的做法。

发票预制时检查页数、抬头文本、分配栏位不为空,如果为空则不能保存与过账,使用badi:MRM_header_check实现,如下:

  1. SE19创建实施ZMRM_HEADER_CHECK,此步骤可在网上查询到。

  2. 代码如下,非ABAP专业,代码比较业余,请包涵:

    DATA : gt_errprot   TYPE  TABLE  OF mrm_errprot ,
          gs_errprot   TYPE mrm_errprot ,
          gwa_errprot  TYPE     mrm_errprot .

    *根据判断条件将错误信息保存在一个内标中,以备后续显示
     if I_RBKPV -numpg  =  '' .
        gwa_errprot -msgty  =  'E' .
        gwa_errprot -msgid  =  'MM' .
        gwa_errprot -msgno  =  '899' .
        gwa_errprot -msgv1  =  '请输入页数' .
         APPEND gwa_errprot  TO gt_errprot .

    *也许可以写成如下写反,懒得测了,看起来比较高深。

    *  GT_ERRPROT  =  VALUE # ( BASE GT_ERRPROT
    *       ( msgty  =  'E'
    *       msgid  =  'MM'
    *       msgno  =  '899'
    *       msgv1  =  '请输入页数'    )   ) .
     

      endif .

    if I_RBKPV -ZUONR  =  '' .
        gwa_errprot -msgty  =  'E' .
        gwa_errprot -msgid  =  'MM' .
        gwa_errprot -msgno  =  '899' .
        gwa_errprot -msgv1  =  '请输入分配' .
     APPEND gwa_errprot  TO gt_errprot .
     ENDIF .

     if I_RBKPV -BKTXT  =  '' .
        gwa_errprot -msgty  =  'E' .
        gwa_errprot -msgid  =  'MM' .
        gwa_errprot -msgno  =  '899' .
        gwa_errprot -msgv1  =  '请输入抬头文本' .
     APPEND gwa_errprot  TO gt_errprot .
  ENDIF .

*虽然置为报错类型,但是没有逐条显示,后面会在一弹出框显示,此处防止保存、过账。
  IF  NOT gt_errprot[]  IS  INITIAL .
       READ  TABLE gt_errprot  INTO gs_errprot  WITH  KEY msgty  =  'E' .
       IF sy -subrc  =  0 .
         DATA : c_okqx ( 17 )    TYPE  c  VALUE  '(SAPLMR1M)OK-CODE' .
         FIELD-SYMBOLS : <fs_okqx>  TYPE  ANY .
         ASSIGN  (c_okqx )  TO <fs_okqx> .
         CASE <fs_okqx> .
           WHEN  'COMP'  OR  'BU' .  "保存为完成或过账
             READ  TABLE gt_errprot  INTO gs_errprot  WITH  KEY msgty  =  'E' .
             IF sy -subrc  =  0 .
* 将OK code代码清空,避免有错保存.
               CLEAR <fs_okqx> .
               MESSAGE  '请将必输项输入完整'  TYPE  'I' .  "仍然有报错时提示
             ENDIF .
         ENDCASE .

       ENDIF .
  endif .
*将报错集中显示
     CALL  FUNCTION  'MRM_PROT_FILL'
       TABLES
        t_errprot  = gt_errprot .


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9859323/viewspace-2687959/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-09-27

  • 博文量
    42
  • 访问量
    117066