SMOD : SAPLV01Z
函数: EXIT_SAPLV01Z_002
在MIGO界面,当批次属性没有值的时候,会进入这个增强,当有值的时候,不走此段逻辑。
以下是样例代码
*&---------------------------------------------------------------------*
*& 包含 ZXVBZU02
*&---------------------------------------------------------------------*
"在做收货业务(采购收货、生产收货、501无订单收货)时,根据业务类型给物料批次号,
DATA: lv_charg_like TYPE charg_d.
DATA: lv_mm(2) TYPE c.
DATA: lv_serial.
SELECT SINGLE loggr FROM marc INTO @DATA(lv_loggr) WHERE matnr = @x_bncom-matnr AND werks = @x_bncom-werks.
SELECT SINGLE mstae FROM mara INTO @DATA(lv_mstae) WHERE matnr = @x_bncom-matnr.
CASE x_bncom-bwart.
WHEN '101'. "采购\生产订单收货
IF x_bncom-lifnr <> ''. "采购订单收货
IF lv_loggr = '200'. "Batch=MSEG- LIFNR+YMDD+1位流水(M10=A,M11-B,M12=C)
lv_mm = sy-datum+4(2).
SHIFT lv_mm LEFT DELETING LEADING '0'.
CASE lv_mm.
WHEN '10'.
lv_mm = 'A'.
WHEN '11'.
lv_mm = 'B'.
WHEN '12'.
lv_mm = 'C'.
WHEN OTHERS.
ENDCASE.
lv_charg_like = x_bncom-lifnr+5(5) && sy-datum+3(1) && lv_mm+0(1) && sy-datum+6(2) && '%'.
SELECT MAX( charg ) INTO new_charg FROM mcha WHERE matnr = x_bncom-matnr AND werks = x_bncom-werks AND charg LIKE lv_charg_like.
IF sy-subrc = 0 AND new_charg IS NOT INITIAL.
IF new_charg+9(1) < '9'.
* lv_serial = new_charg+9(1) + 1.
new_charg+9(1) = new_charg+9(1) + 1.
ELSEIF new_charg+9(1) = '9'.
new_charg+9(1) = zcl_abap_common=>get_alphabet_next( iv_letter = '' ).
ELSEIF new_charg+9(1) = 'Z'.
ELSE.
new_charg+9(1) = zcl_abap_common=>get_alphabet_next( iv_letter = new_charg+9(1) ).
ENDIF.
ELSE.
new_charg = x_bncom-lifnr+5(5) && sy-datum+3(1) && lv_mm+0(1) && sy-datum+6(2) && '1'.
ENDIF.
ELSEIF ( lv_loggr = '100' OR lv_loggr = '').
new_charg = '9'.
ENDIF.
ENDIF.
IF x_bncom-aufnr <> ''. "生产订单收货
IF lv_loggr = '200'. "Batch=MSEG- AUFNR+MARA- MSTAE:
new_charg = x_bncom-aufnr+2(8) && lv_mstae.
ELSEIF ( lv_loggr = '100' OR lv_loggr = '').
new_charg = '9'.
ENDIF.
ENDIF.
WHEN '501'. ""无订单收获
IF x_bncom-sobkz = 'B'.
IF lv_loggr = '200'. "Batch=YYMMDD+4位流水:2209280001
lv_charg_like = sy-datum+2(6) && '%'.
SELECT MAX( charg ) INTO new_charg FROM mcha WHERE matnr = x_bncom-matnr AND werks = x_bncom-werks AND charg LIKE lv_charg_like.
IF sy-subrc = 0 AND new_charg IS NOT INITIAL.
new_charg = new_charg + 1.
ELSE.
new_charg = sy-datum+2(6) && '0001'.
ENDIF.
ELSEIF ( lv_loggr = '100' OR lv_loggr = '').
new_charg = '9'.
ENDIF.
ENDIF.
WHEN OTHERS.
ENDCASE.