客户需求:根据ALV上的采购订单IDN进行过账,如果有IDN,就根据IDN过账,如果没有,就根据采购订单过账。
BAPI ITEM数据填充如下:
DATA:ls_goodsmvt_item TYPE bapi2017_gm_item_create,
l_line TYPE char6,
l_str TYPE string,
lt_return LIKE bapiret2 OCCURS 0,
lv_ebeln TYPE ekpo-ebeln,
lv_ebelp TYPE ekpo-ebelp,
lv_smbln TYPE matdoc-smbln,
lv_smblp TYPE matdoc-smblp,
lv_sgtxt TYPE matdoc-sgtxt,
ls_lips TYPE lips.
l_line = pv_tabix.
* 抬头
IF p_budat IS NOT INITIAL.
ps_goodsmvt_header-pstng_date = p_budat.
ELSE.
ps_goodsmvt_header-pstng_date = sy-datum.
ENDIF.
ps_goodsmvt_header-doc_date = sy-datum.
* 明细
* ls_goodsmvt_item-line_id = 1.
ls_goodsmvt_item-line_id = l_line.
ls_goodsmvt_item-plant = ps_alv-werks."委托工厂
ls_goodsmvt_item-material = ps_alv-matnr."物料
ls_goodsmvt_item-entry_qnt = ps_alv-menge."数量
ls_goodsmvt_item-batch = ps_alv-charg."批次
ls_goodsmvt_item-entry_uom = ps_alv-meins.
ls_goodsmvt_item-entry_uom_iso = ps_alv-meins.
CONCATENATE 'ZPP104A:' ps_alv-mblnr '/' ps_alv-zeile
INTO ls_goodsmvt_item-item_text.
CASE ps_alv-zdoctyp.
WHEN TEXT-006.
* 事务代码
ls_goodsmvt_item-move_type = '101'."移动类型
* 委托方采购订单IDN过账
IF ps_alv-vbeln_idn IS NOT INITIAL.
ps_goodsmvt_code-gm_code = '01'. "MIGO
ls_goodsmvt_item-deliv_numb_to_search = ps_alv-vbeln_idn.
ls_goodsmvt_item-deliv_item_to_search = ps_alv-vbelp_idn.
* ls_goodsmvt_item-po_number = ps_alv-ebeln.
* ls_goodsmvt_item-po_item = ps_alv-ebelp.
ls_goodsmvt_item-prod_date = sy-datum."生产日期
ls_goodsmvt_item-mvt_ind = 'B'. "移动标识
SELECT SINGLE *
FROM lips
INTO ls_lips
WHERE vbeln = ps_alv-vbeln_idn
AND posnr = ps_alv-vbelp_idn.
IF ls_lips-lgort IS NOT INITIAL.
ls_goodsmvt_item-stge_loc = ls_lips-lgort.
ENDIF.
IF ls_lips-charg IS NOT INITIAL.
ls_goodsmvt_item-batch = ls_lips-charg.
ENDIF.
* 委托方采购订单过账
ELSE.
ps_goodsmvt_code-gm_code = '01'. "MIGO
SELECT SINGLE
*
FROM ekpo
WHERE ebeln = @ps_alv-ebeln
AND ebelp = @ps_alv-ebelp
INTO @DATA(ls_ekpo).
ls_goodsmvt_item-stge_loc = ls_ekpo-lgort."地点
ls_goodsmvt_item-po_number = ps_alv-ebeln.
ls_goodsmvt_item-po_item = ps_alv-ebelp.
ls_goodsmvt_item-prod_date = sy-datum."生产日期
ls_goodsmvt_item-mvt_ind = 'B'. "移动标识
ENDIF.
WHEN TEXT-007.
* 事务代码
ps_goodsmvt_code-gm_code = '03'. "MIGO
ls_goodsmvt_item-xstob = 'X'.
* ls_goodsmvt_item-move_type = ps_alv-bwart."移动类型
* ls_goodsmvt_item-move_reas = 0001."移动原因
SELECT SINGLE smbln smblp
FROM matdoc
INTO ( lv_smbln, lv_smblp )
WHERE mblnr = ps_alv-mblnr
AND zeile = ps_alv-zeile.
CONCATENATE 'ZPP104A:' lv_smbln '/' lv_smblp
INTO lv_sgtxt.
SELECT SINGLE mblnr zeile
FROM matdoc
INTO ( ls_goodsmvt_item-ref_doc,
ls_goodsmvt_item-ref_doc_it )
WHERE sgtxt = lv_sgtxt.
ls_goodsmvt_item-ref_doc_yr = '2019'.
ENDCASE.
APPEND ls_goodsmvt_item TO pt_goodsmvt_item.
CLEAR ls_goodsmvt_item.

672

被折叠的 条评论
为什么被折叠?



