SD-如何利用BTE在VKxx顯示特殊文字

JackWu發表於2019-04-01

在SAP的價格維護中,我們經常會自定義一些欄位,有時這些欄位非系統標準欄位,無法顯示文字,但需要在維護時顯示文字或者顯示特殊文字。本文就給出使用者輸入條形碼,顯示對應物料名稱的樣例。

在系統中我們會找到四個BTE和定價維護相關:

  • 00503303 Maintain conditions: Transfers
  • 00503305 Maintain conditions: Field check
  • 00503306 Maintain conditions: Text determination
  • 00503307 Maintain conditions: Default condition

其中00503306就是用來使用者編寫程式碼顯示特殊文字。我們可以參照SAMPLE_INTERFACE_00503306模板常見自定義函式,對應程式碼如下:

FUNCTION Y_0000SD_BTE_00503306.
*"----------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(FIELDNAME) TYPE  CHAR30
*"     VALUE(VALUE)
*"     VALUE(KOMG_I) TYPE  KOMG
*"     VALUE(KONP_I) TYPE  KONP
*"     VALUE(T681E_I) TYPE  T681E
*"  EXPORTING
*"     VALUE(TEXTSTRING) TYPE  CHAR40
*"  CHANGING
*"     REFERENCE(GET_TEXT) TYPE  CHAR1
*"----------------------------------------------------------------------
  IF FIELDNAME eq 'VKORG'.
    w_vkorg = value.
  endif.
  PERFORM y0000sd_0000_bte_00503306
          USING    fieldname
                   value
                   komg_i
                   konp_i
                   T681E_I
          CHANGING textstring
                   get_text.

ENDFUNCTION.

FORM y0000sd_0000_bte_00503306 USING w_fieldname
                                     w_value
                                     w_komg_i
                                     w_konp_i
                                     w_t681e_i
                              CHANGING w_textstring
                                       w_get_text.
  TYPES: BEGIN OF lty_mara,
           matnr    TYPE matnr,
           yyart    TYPE yyart,
         END OF lty_mara.

  TYPES: BEGIN OF lty_mvke,
           matnr    TYPE matnr,
           vkorg    TYPE vkorg,
           vtweg    TYPE vtweg,
         END OF   lty_mvke.
* general rules, can be used in every sales org
  DATA: w_yyart       LIKE mara-yyart,
        w_yycnu       LIKE mara-yycnu,
        lt_mara       TYPE TABLE OF lty_mara WITH HEADER LINE,
        lt_mvke       TYPE TABLE OF lty_mvke WITH HEADER LINE,
        lt_makt       TYPE TABLE OF makt,
        lv_makt       TYPE makt,
        w_vkorg       TYPE vkorg,
        w_vtweg       TYPE vtweg,
        w_EAN11       TYPE EAN11. 
  data: lwa_komg TYPE komg.
  TABLES: mara, makt.
  CASE  w_fieldname.  
  WHEN 'EAN11'.
*   EAN11
      w_EAN11 = w_value.
      MOVE-CORRESPONDING w_komg_i to lwa_komg.
      w_vkorg = lwa_komg-VKORG.
      w_vtweg = lwa_komg-VTWEG.
      SELECT matnr FROM MEAN INTO CORRESPONDING FIELDS OF TABLE lt_mara WHERE EAN11 = w_EAN11.
      IF lt_mara[] IS NOT INITIAL.
        SELECT  matnr vkorg vtweg FROM MVKE INTO TABLE lt_mvke
          FOR ALL ENTRIES IN lt_mara
          WHERE matnr = lt_mara-matnr  AND vkorg = w_vkorg AND vtweg = w_vtweg.
      ENDIF.
      CLEAR:lwa_komg, w_vkorg, w_vtweg, w_EAN11.
      LOOP AT lt_mvke.
        SELECT SINGLE * FROM makt INTO lv_makt WHERE matnr = lt_mvke-matnr AND spras = sy-langu.
          IF sy-subrc = 0.
          w_textstring = lv_makt-maktx.
          CLEAR w_get_text.
          EXIT.
        ELSE.
          SELECT SINGLE * FROM makt INTO lv_makt WHERE matnr = lt_mvke-matnr AND spras = 'EN'.
          IF sy-subrc = 0.
            w_textstring = lv_makt-maktx.
            CLEAR w_get_text.
            EXIT.
          ENDIF.
        ENDIF.
      ENDLOOP.
  ENDCASE.
ENDFORM. 

供大家參考。

 

相關文章