天天看點

SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例

1. 前言

對于銷售單螢幕增強:

  • 螢幕使用sap程式SAPMV45A标準預留的兩個子螢幕8309 8459
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  • 增強出口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
        SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
        對于銷售訂單增強的标準變量:
  • 擡頭
    • XVBAK:新資料如有變化/否則與舊資料相同
    • YVBAK:舊資料如果有變化(考慮項目)/否則為空
    • VBAK:工作區
  • 行項目
    • XVBAP:新資料如有變化/否則與舊資料相同
    • YVBAP:舊資料如果有變化(考慮項目)/否則為空
    • VBAK:工作區
  • 其他
    • 等同擡頭行項目(自行測試)

2. 增強效果

  1. 擡頭
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  2. 行項目
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例

3. Step1:新增兩個結構并include到VBAK(銷售憑證擡頭表) VBAP(銷售憑證行項目表)

  • 字段命名需要用YY ZZ開頭(本例中由于某些原因未使用,系統更新有覆寫的風險),命名規則可參考Note:16466 - Customer name range for SAP objects
  1. 擡頭
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  2. 行項目
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例

4. Step2:螢幕增加布局

  1. 擡頭
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  2. 行項目
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例

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.
               
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  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.
               
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例

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.
               
    SAP SO銷售單擡頭行項目螢幕增強,新增客戶自定義字段示例
  2. 儲存後:FORM USEREXIT_SAVE_DOCUMENT(無需求,未做增強)