在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.


供大家参考。