在STO创建DN单时,需要指定库存地点(LIPS-LGORT),开始时使用函数BAPI_OUTB_DELIVERY_CREATE_STO创建DN,发现不能在BAPI中指定LGORT的值,所以就想使用创建完成后,再修改的方式进行处理,就是创建DN单后,再修改DN的的库存地点LGORT,但此方法的问题是在创建成功,后修改时又发现库存不足等问题,而此时DN单已创建成功了,明显不能满足需求,所以后来就想到用增强的方法,在创建时指定LGORT,在增强中写入LGORT的值,
1.调用BAPI创建DN
*增强在MV50AFZ1-USEREXIT_MOVE_FIELD_TO_LIPS修改LGORT.
L_LGORT = LS_CONFG-RESLO_FH2.
EXPORT L_LGORT FROM L_LGORT TO MEMORY ID 'VL01N_LGORT' .
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
* EXPORTING
* SHIP_POINT = LS_EKPV-VSTEL
* DUE_DATE = LS_DATA-BLDAT
IMPORTING
DELIVERY = LV_DELIVERY
TABLES
STOCK_TRANS_ITEMS = LT_STOCK_ITEMS
CREATED_ITEMS = LT_CREATED_ITEMS
RETURN = LT_RETURN.
FREE MEMORY ID 'VL01N_LGORT'.
此BAPI前把要指定的LGORT值保存到内存变量VL01N_LGORT中。并有BAPI使用完成后清空内存变量值,防止其它程序使用。
2.在增强MV50AFZ1中写入代码
FORM USEREXIT_MOVE_FIELD_TO_LIPS.
* LIPS-zzfield = xxxx-zzfield2.
*使用指定的LGORT创建交货单。
DATA: L_LGORT TYPE LGORT_D.
*--------------------------------------------------------------------*
IMPORT L_LGORT TO L_LGORT FROM MEMORY ID 'VL01N_LGORT' .
FREE MEMORY ID 'VL01N_LGORT'.
IF L_LGORT IS NOT INITIAL .
LIPS-LGORT = L_LGORT .
ENDIF.
*--------------------------------------------------------------------*
ENDFORM. "USEREXIT_MOVE_FIELD_TO_LIPS
在其中读取上一步写到内存变量VL01N_LGORT中的库存地点LGORT的值,关并判断是否有值,有值就写此值附给LIPS-LGORT.当然使用完成后,也清空一下内存,防止其它程序使用。