关于交货单批次拆分,BAPI准备数据时,如果没有输入基本单位和销售单位,物流过账的时候OK,但到财务就会发现拆分的批次行没有单位。LIPS中新插入的批次拆分的行中,没有基本单位和销售单位。比较奇怪的是,PRD频繁重现这个问题,DEV却无法重现,后来只能在代码里加上基本单位和销售单位。我推测是必须加的,因为在批次拆分的时候,CONTROL里面只有对数量的FLAG,没有针对单位的FLAG,因此肯定是要在准备的行项目数据中提供信息。
转载两段代码。
http://hi.baidu.com/sdslee/blog/item/d655201106f3c0f7c2ce79a8.html
*Set Delivery Header data g_delivery_no = g_scr_vbeln. gs_header_data-deliv_numb = g_delivery_no. gs_techn_control-upd_ind = 'U' . gs_header_control-deliv_numb = g_delivery_no.
SORT gt_batch[] BY posnr ASCENDING . LOOP AT gt_batch INTO gs_batch. ON CHANGE OF gs_batch-posnr. READ TABLE lt_posnr INTO ls_posnr WITH KEY posnr = gs_batch-posnr BINARY SEARCH . IF sy-subrc = 0 . l_count = ls_posnr-count . ENDIF . SELECT SINGLE lfimg kcmeng INTO (l_dlv_qty,l_kcmeng) FROM lips WHERE vbeln = g_delivery_no AND posnr = gs_batch-posnr. IF sy-subrc = 0 . ls_item_data-dlv_qty = l_dlv_qty. ENDIF . ls_item_data-dlv_qty = ls_item_data-dlv_qty - l_count. ls_item_data-dlv_qty_imunit = ls_item_data-dlv_qty. ls_item_data-deliv_numb = g_delivery_no. ls_item_data-material = gs_batch-matnr. ls_item_data-deliv_item = gs_batch-posnr.* ls_item_data-dlv_qty = 1. * ls_item_data-dlv_qty_imunit = 1. ls_item_data-fact_unit_nom = 1 . ls_item_data-fact_unit_denom = 1 . APPEND ls_item_data TO gt_item_data. CLEAR ls_item_data. CLEAR l_count. ENDON . ls_item_data-deliv_numb = g_delivery_no. ls_item_data-material = gs_batch-matnr. ls_item_data-deliv_item = l_deliv_item. ls_item_data-hieraritem = gs_batch-posnr. ls_item_data-dlv_qty = 1 . ls_item_data-dlv_qty_imunit = 1 . ls_item_data-fact_unit_nom = 1 . ls_item_data-fact_unit_denom = 1 . ls_item_data-batch = gs_batch-batch. ls_item_data-usehieritm = '1' . APPEND ls_item_data TO gt_item_data. ls_item_control-deliv_numb = g_delivery_no. ls_item_control-deliv_item = l_deliv_item. ls_item_control-chg_delqty = 'X' . APPEND ls_item_control TO gt_item_control. ls_item_control-deliv_numb = g_delivery_no. ls_item_control-deliv_item = gs_batch-posnr. ls_item_control-chg_delqty = 'X' . COLLECT ls_item_control INTO gt_item_control. l_deliv_item = l_deliv_item + 1 . ENDLOOP . CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING header_data = gs_header_data header_control = gs_header_control delivery = g_delivery_no techn_control = gs_techn_control TABLES item_data = gt_item_data item_control = gt_item_control return = gt_return* TOKENREFERENCE = * ITEM_DATA_SPL = * COLLECTIVE_CHANGE_ITEMS = * NEW_ITEM_DATA = * NEW_ITEM_DATA_SPL = * NEW_ITEM_ORG = * item_data_docu_batch = gt_spbatch . IF gt_return[] IS INITIAL . CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X' . ELSE . WRITE : '由于以下原因操作失败' ,/. LOOP AT gt_return INTO gs_return . WRITE : 'item' , sy-tabix, gs_return-message , / .
http://hi.baidu.com/gary_c/blog/item/56fb5e1685c9695cf2de3246.html
BAPI 更改交货单 & 更改捡配 'BAPI_OUTB_DELIVERY_CHANGE'
2010年07月31日 星期六 下午 05:45
REPORT z_update_delivery.TABLES likp.PARAMETERS p_del LIKE likp-vbeln DEFAULT '' . DATA: str_header_data LIKE bapiobdlvhdrchg, str_header_control LIKE bapiobdlvhdrctrlchg.DATA it_return TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE.DATA it_header_deadlines TYPE STANDARD TABLE OF bapidlvdeadlnWITH HEADER LINE.DATA :item_data LIKE bapiobdlvitemchg OCCURS 0 WITH HEADER LINE, item_control LIKE bapiobdlvitemctrlchg OCCURS 0 WITH HEADER LINE, wa_lips LIKE lips OCCURS 0 WITH HEADER LINE. DATA: v_16(16) TYPE c.DATA v_del LIKE bapiobdlvhdrchg-deliv_numb.SELECT SINGLE * FROM likp WHERE vbeln = p_del.CONCATENATE sy-datum sy-uzeit INTO v_16.*str_HEADER_DATA-GROSS_WT *UNIT_OF_WT_ISO *VOLUMEUNIT_ISO str_header_data-unload_pt = likp-ablad. str_header_data-unit_of_wt = likp-gewei. str_header_data-incoterms1 = likp-inco1. str_header_data-incoterms2 = likp-inco2. str_header_data-door = likp-lgtor. str_header_data-dlv_block = likp-lifsk. str_header_data-dlv_prio = likp-lprio. str_header_data-net_weight = likp-ntgew. str_header_data-route = likp-route. str_header_data-deliv_numb = likp-vbeln. str_header_data-volumeunit = likp-voleh. str_header_data-volume = likp-volum. str_header_data-ship_cond = likp-vsbed. v_del = likp-vbeln. str_header_data-deliv_numb = likp-vbeln. str_header_control-gdsi_date_flg = 'X' . it_header_deadlines-timetype = 'WSHDRWADTI' . it_header_deadlines-timestamp_utc = v_16.APPEND it_header_deadlines.SELECT * INTO wa_lips FROM lips WHERE vbeln = p_del. item_data-deliv_numb = wa_lips-vbeln. item_data-deliv_item = wa_lips-posnr. item_data-material = wa_lips-matnr. item_data-batch = wa_lips-charg. item_data-dlv_qty = 2. item_data-dlv_qty_imunit = 2. item_data-fact_unit_nom = wa_lips-umvkz. item_data-fact_unit_denom = wa_lips-umvkn. item_data-conv_fact = wa_lips-umref. item_data-gross_wt = wa_lips-brgew. item_data-net_weight = wa_lips-ntgew. item_data-unit_of_wt = wa_lips-gewei. item_data-volumeunit = wa_lips-voleh. item_data-sales_unit = wa_lips-vrkme. item_data-base_uom = wa_lips-meins. item_data-stock_type = wa_lips-insmk. item_data-val_type = wa_lips-bwtar. item_data-insplot = wa_lips-qplos. item_data-volume = wa_lips-volum. APPEND item_data. item_control-deliv_numb = wa_lips-vbeln. item_control-deliv_item = wa_lips-posnr. item_control-chg_delqty = 'X' . APPEND item_control. ENDSELECT.CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING header_data = str_header_data header_control = str_header_control delivery = v_del TABLES header_deadlines = it_header_deadlines item_data = item_data item_control = item_control return = it_return.COMMIT WORK.*& 更改拣配数量 DATA:vbkok_wa TYPE vbkok, vbpok_tab TYPE vbpok OCCURS 0 WITH HEADER LINE, xlips TYPE lips OCCURS 0 WITH HEADER LINE . CLEAR: vbkok_wa, vbpok_tab, xlips. REFRESH: vbpok_tab, xlips. vbkok_wa-vbeln_vl = p_del.SELECT * FROM lips INTO TABLE xlipsWHERE vbeln = vbkok_wa-vbeln_vl.LOOP AT xlips. CLEAR: vbpok_tab. vbpok_tab-vbeln_vl = xlips-vbeln. vbpok_tab-posnr_vl = xlips-posnr. vbpok_tab-vbeln = xlips-vbeln. vbpok_tab-posnn = xlips-posnr.*vbpok_tab-vbtyp_n = 'Q'. vbpok_tab-pikmg = xlips-lfimg. vbpok_tab-meins = xlips-meins. vbpok_tab-ndifm = 0. vbpok_tab-taqui = ' ' . vbpok_tab-charg = xlips-charg. vbpok_tab-matnr = xlips-matnr. vbpok_tab-orpos = 0. APPEND vbpok_tab. ENDLOOP.CALL FUNCTION 'SD_DELIVERY_UPDATE_PICKING' EXPORTING vbkok_wa = vbkok_wa synchron = 'X' * NO_MESSAGES_UPDATE = ' ' * NICHT_SPERREN = ' ' * AUFRUFER_T = ' ' * IF_ERROR_MESSAGES_SEND = 'X' TABLES vbpok_tab = vbpok_tab
=============