1. 程式人生 > 其它 >SD-銷售訂單抬頭和行專案螢幕增強

SD-銷售訂單抬頭和行專案螢幕增強

此文轉載至:https://blog.csdn.net/weixin_43929815/article/details/113928655

在對銷售訂單抬頭和行專案的螢幕做增強開發有兩種方法可選:
一.使用BADI:BADI_SD_SALES_BASIC下的BADI_SLS_HEAD_SCR_CUSBADI_SLS_ITEM_SCR_CUS來實現螢幕增強
1.建立增強結構,附加到VBAK或者VBAP表中,這裡以表頭為例
2.SE18檢視BADI:BADI_SLS_HEAD_SCR_CUS,建立BADI實施ZSD_BADI_SLS_HEAD_SCR_CUS

建立之後可以看到介面下有四個方法,其中1.用來把螢幕掛在銷售訂單2.將資料讀取到子螢幕3.從子螢幕讀取資料


3.建立子螢幕
首先建立函式組ZSD_HEAD

新建子螢幕,螢幕內容即為新增的附加結構
新建兩個函式模組,用來傳遞子螢幕的值

以下為這兩個函式模組的程式碼

FUNCTION ZSD_HEAD_INPUT.
*"----------------------------------------------------------------------
"“本地介面:
*” IMPORTING
*" REFERENCE(IS_VBAK) TYPE VBAK
*" REFERENCE(IS_T180) TYPE T180
*"----------------------------------------------------------------------
gs_vbak = is_vbak. gs_t180 = is_t180. "這個用來判斷是顯示還是修改 A代表顯示 MOVE-CORRESPONDING is_vbak to zsd_VBAK_1. ENDFUNCTION. FUNCTION ZSD_HEAD_OUTPUT. *"---------------------------------------------------------------------- "“本地介面: *” EXPORTING *" REFERENCE(ES_VBAK) TYPE VBAK *"----------------------------------------------------------------------
MOVE-CORRESPONDING zsd_vbak_1 to gs_vbak. es_vbak = gs_vbak. ENDFUNCTION.

4.在增強實施中的方法呼叫這個函式組

方法1.
method IF_EX_SLS_HEAD_SCR_CUS~ACTIVATE_TAB_PAGE.
  DATA ls_tab like LINE OF CT_CUS_HEAD_TAB.
  IF sy-tcode CP ‘VA++’.
  ls_tab-HEAD_CAPTION = ‘專案資訊’.
  ls_tab-HEAD_PROGRAM = ‘SAPLZSD_HEAD’."函式組主程式名稱
  ls_tab-HEAD_DYNPRO = ‘9001’.
  APPEND ls_tab to CT_CUS_HEAD_TAB.
  ENDIF.
endmethod.

方法2. method IF_EX_SLS_HEAD_SCR_CUS~TRANSFER_DATA_TO_SUBSCREEN.
CALL FUNCTION ‘ZSD_HEAD_INPUT’ EXPORTING is_vbak = is_vbak is_t180 = is_t180 endmethod.
方法3. method IF_EX_SLS_HEAD_SCR_CUS~TRANSFER_DATA_FROM_SUBSCREEN.
CALL FUNCTION ‘ZSD_HEAD_OUTPUT’ IMPORTING ES_VBAK = CS_VBAK endmethod.

二.使用銷售訂單程式SAPMV45A中預留的螢幕8309,8459實現增強
此種方法實現較簡單
1.找到銷售訂單主程式SAPMV45A,再找到這兩個子螢幕

直接根據新增的結構編輯子螢幕
同時增加欄位控制程式碼

MODULE SO_ADD_8309 OUTPUT.

  LOOP AT SCREEN.
    IF SY-TCODE = 'VA03' OR SY-TCODE = 'VA23'.
      SCREEN-INPUT = '0'.
    ELSE.
      IF SCREEN-GROUP1 EQ 'Z1'.
        SCREEN-INPUT = '0'.
      ELSE.
        SCREEN-INPUT = '1'.
      ENDIF.
    ENDIF.
    MODIFY SCREEN.
ENDLOOP. ENDMODULE.