今天的需求是在STO创建DN单时,需要指定库存地点(LIPS-LGORT),开始时使用函数BAPI_OUTB_DELIVERY_CREATE_STO创建DN,发现不能在BAPI中指定LGORT的值,所以就想使用创建完成后,再修改的方式进行处理,就是创建DN单后,再修改DN的的库存地点LGORT,但此方法的问题是在创建成功,后修改时又发现库存不足等问题,而此时DN单已创建成功了,明显不能满足需求,所以后来就想到用增强的方法,在创建时指定LGORT,在增强中写入LGORT的值,
1.调用BAPI创建DN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
*增强在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中写入代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
*---------------------------------------------------------------------* 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 *eject |
在其中读取上一步写到内存变量VL01N_LGORT中的库存地点LGORT的值,关并判断是否有值,有值就写此值附给LIPS-LGORT.当然使用完成后,也清空一下内存,防止其它程序使用。