SAP SO销售单抬头行项目屏幕增强,新增客户自定义字段示例

1. 前言

对于销售单屏幕增强:

  • 屏幕使用sap程序SAPMV45A标准预留的两个子屏幕8309 8459
    1
  • 增强出口BAdI & USER_EXIT
    • BAdI
      • 使用SAP BADI_SD_SALES_BASIC(SE18->BAdI名称)中
      • BADI_SLS_HEAD_SCR_CUS
      • BADI_SLS_ITEM_SCR_CUS
        进行增强
    • USER_EXIT(MV45AOZZ)
      • USEREXIT_FIELD_MODIFICATION
      • USEREXIT_MOVE_FIELD_TO_VBAK
      • USEREXIT_SAVE_DOCUMENT
      • USEREXIT_SAVE_DOCUMENT_PREPARE
      • 更多出口函数及函数作用请参考官方文档:User Exits In Sales Document Processing
        2
        对于销售订单增强的标准变量:
  • 抬头
    • XVBAK:新数据如有变化/否则与旧数据相同
    • YVBAK:旧数据如果有变化(考虑项目)/否则为空
    • VBAK:工作区
  • 行项目
    • XVBAP:新数据如有变化/否则与旧数据相同
    • YVBAP:旧数据如果有变化(考虑项目)/否则为空
    • VBAK:工作区
  • 其他
    • 等同抬头行项目(自行测试)

2. 增强效果

  1. 抬头
    3
  2. 行项目
    4

3. Step1:新增两个结构并include到VBAK(销售凭证抬头表) VBAP(销售凭证行项目表)

  1. 抬头
    5
    6
  2. 行项目
    7
    7

4. Step2:屏幕增加布局

  1. 抬头
    8
  2. 行项目
    9

5. Step3:屏幕PBO PAI事件

  1. 抬头

    MODULE status_8309 OUTPUT.
      IF SY-TCODE EQ 'VA03'.
        LOOP AT SCREEN.
          IF SCREEN-NAME = 'VBAK-ZGFH'
          OR SCREEN-NAME = 'VBAK-ZJFD'
          OR SCREEN-NAME = 'VBAK-ZXTGG'.
            SCREEN-INPUT = 0.
            MODIFY SCREEN.
          ENDIF.
        ENDLOOP.
      ENDIF.
    ENDMODULE.
    

    12

  2. 行项目

    IF SY-TCODE = 'VA03'.
      LOOP AT SCREEN .
        IF SCREEN-NAME = 'VBAP-ZXTGG'
          OR SCREEN-NAME = 'VBAP-ZYQYQ'
          OR SCREEN-NAME = 'VBAP-ZXTDYXH'
          OR SCREEN-NAME = 'VBAP-ZXTBZ'.
          SCREEN-INPUT = 0.
          MODIFY SCREEN.
        ENDIF.
        ENDLOOP.
    ENDIF.
    

    13

6. Step4:用户出口保存前增强和保存后增强(程序:SAPMV45A 包含程序:MV45AFZZ)

  1. 保存前 USEREXIT_SAVE_DOCUMENT_PREPARE(新建增强点,增加校验)

        IF ( SY-TCODE = 'VA01' AND SY-UCOMM = 'SICH' AND VBAK-ERDAT > '20210916' ) OR         "跳过历史订单;因为有信贷增强,所以增加了一个UCOMM ENT2
        ( SY-TCODE = 'VA01' AND SY-UCOMM = 'ENT2' AND VBAK-ERDAT > '20210916' ) OR
        ( SY-TCODE = 'VA02' AND SY-UCOMM = 'SICH' AND VBAK-ERDAT > '20210916' ).
    
          DATA: BEGIN OF LT_MARA OCCURS 0,
            MATNR      TYPE MARA-MATNR,
            MTPOS_MARA TYPE MARA-MTPOS_MARA,
          END OF LT_MARA.
    
          IF VBAK-AUART = 'Z001' OR VBAK-AUART = 'Z002' OR
          VBAK-AUART = 'Z003' OR VBAK-AUART = 'Z004' OR VBAK-AUART = 'Z005'.
    
            "Herder check
    *      IF VBAK-ZXTGG IS  INITIAL.
    *        MESSAGE |销售凭证:{ VBAK-VBELN } "抬头-附加数据B-交付-箱贴规格"未维护值,不允许保存| TYPE 'E'.
    *      ENDIF.
    
            "ITEM Check
            SELECT MATNR MTPOS_MARA
            INTO TABLE LT_MARA
            FROM  MARA
            FOR ALL ENTRIES IN XVBAP
            WHERE MATNR = XVBAP-MATNR.
    
              LOOP AT XVBAP WHERE UPDKZ NE 'D'.
    
                READ TABLE LT_MARA TRANSPORTING NO FIELDS WITH KEY MATNR = XVBAP-MATNR MTPOS_MARA = 'NORM'.    "NORN类型物料
                IF SY-SUBRC = 0.
                IF XVBAP-ZMPXX IS  INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-铭牌数据-铭牌选项"未维护值,不允许保存| TYPE 'E'.
                ELSEIF XVBAP-ZYSBM IS INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-铭牌数据-颜色编码"未维护值,不允许保存| TYPE 'E'.
                ELSEIF XVBAP-ZYQBZ IS INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-铭牌数据-油漆标准"未维护值,不允许保存| TYPE 'E'.
                ELSEIF XVBAP-ZXTGG IS INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-交付数据-箱贴规格"未维护值,不允许保存| TYPE 'E'.
                ELSEIF XVBAP-ZYQYQ IS INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-交付数据-要求编码"未维护值,不允许保存| TYPE 'E'.
                  ENDIF.
                ENDIF.
    
                READ TABLE LT_MARA TRANSPORTING NO FIELDS WITH KEY MATNR = XVBAP-MATNR MTPOS_MARA = 'NOR2'.    "NOR2类型物料
                IF SY-SUBRC = 0.
                IF XVBAP-ZXTGG IS INITIAL.
                  MESSAGE |销售凭证:{ XVBAP-VBELN } "行项目:{ XVBAP-POSNR }-附加数据B-交付数据-箱贴规格"未维护值,不允许保存| TYPE 'E'.
                  ENDIF.
                ENDIF.
    
              ENDLOOP.
            ENDIF.
          ENDIF.
    

    14

  2. 保存后:FORM USEREXIT_SAVE_DOCUMENT(无需求,未做增强)

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值