场景: 当对某个采购订单进行101收货的时候,如果批次为空,则给它赋一个值,赋值的规则是当前日期的后六位+4位流水号
SMOD 增强点:SAPLV01Z
函数:EXIT_SAPLV01Z_002
*&---------------------------------------------------------------------*
*& 包含 ZXVBZU02
*&---------------------------------------------------------------------*
DATA: lt_dyn TYPE TABLE OF dynpread,
ls_dyn TYPE dynpread,
lv_charg TYPE mchb-charg,
lv_seq TYPE c LENGTH 4.
CLEAR: lt_dyn,
ls_dyn,
lv_charg,
lv_seq.
* 在对采购订单做MIGO 101收货的时候,判断当前是否有输入批次号,如果没有,则使用当前日期的后六位+四位流水号赋值
IF sy-tcode = 'MIGO' AND x_bncom-bwart = '101' AND x_bncom-bstyp = 'F'.
ls_dyn-fieldname = 'GOITEM-CHARG'.
APPEND ls_dyn TO lt_dyn.
CLEAR: ls_dyn.
CALL FUNCTION 'DYNP_VALUES_READ'
EXPORTING
dyname = 'SAPLMIGO'
dynumb = '0335'
* TRANSLATE_TO_UPPER = ' '
* REQUEST = ' '
* PERFORM_CONVERSION_EXITS = ' '
* PERFORM_INPUT_CONVERSION = ' '
* DETERMINE_LOOP_INDEX = ' '
* START_SEARCH_IN_CURRENT_SCREEN = ' '
* START_SEARCH_IN_MAIN_SCREEN = ' '
* START_SEARCH_IN_STACKED_SCREEN = ' '
* START_SEARCH_ON_SCR_STACKPOS = ' '
* SEARCH_OWN_SUBSCREENS_FIRST = ' '
* SEARCHPATH_OF_SUBSCREEN_AREAS = ' '
TABLES
dynpfields = lt_dyn
EXCEPTIONS
invalid_abapworkarea = 1
invalid_dynprofield = 2
invalid_dynproname = 3
invalid_dynpronummer = 4
invalid_request = 5
no_fielddescription = 6
invalid_parameter = 7
undefind_error = 8
double_conversion = 9
stepl_not_found = 10
OTHERS = 11.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
READ TABLE lt_dyn INTO ls_dyn INDEX 1.
IF sy-subrc = 0..
IF ls_dyn-fieldvalue IS INITIAL.
CLEAR: lv_charg,
lv_seq.
SELECT MAX( charg ) INTO lv_charg
FROM mchb
WHERE matnr = x_bncom-matnr
AND werks = x_bncom-werks
AND lgort = x_bncom-lgort
AND ersda = sy-datum.
IF sy-subrc = 0 AND lv_charg+0(6) = sy-datum+2(6).
lv_seq = lv_charg+6(4).
lv_seq = lv_seq + 1.
IF lv_seq IS NOT INITIAL.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = lv_seq
IMPORTING
output = lv_seq.
ENDIF.
CONCATENATE sy-datum+2(6) lv_seq INTO new_charg.
ELSE.
CONCATENATE sy-datum+2(6) '0001' INTO new_charg.
ENDIF.
ENDIF.
ENDIF.
ENDIF.