记录一下开发内容,方便以后查看
DATA:ls_vbsk LIKE vbsk,
es_vbsk LIKE vbsk,
lt_spe_vbfs TYPE TABLE OF /spe/vbfs,
ls_spe_vbfs TYPE /spe/vbfs,
lt_komdlgn TYPE TABLE OF komdlgn,
ls_komdlgn TYPE komdlgn,
lt_vbfs TYPE TABLE OF vbfs,
lt_vbls TYPE TABLE OF vbls,
lt_lips TYPE TABLE OF lips.
DATA:l_nrnr TYPE inri-nrrangenr.
DATA:ls_head TYPE bapiibdlvhdrchg,
ls_headx TYPE bapiibdlvhdrctrlchg,
ls_techn_control TYPE bapidlvcontrol,
ls_del TYPE bapiibdlvhdrchg-deliv_numb,
ls_dn_item TYPE bapiibdlvitemchg,
lt_dn_item TYPE TABLE OF bapiibdlvitemchg,
ls_dn_itemx TYPE bapiibdlvitemctrlchg,
lt_dn_itemx TYPE TABLE OF bapiibdlvitemctrlchg,
lt_return TYPE TABLE OF bapiret2.
”创建内向交货单
ls_komdlgn-lfart = 'EL'.
ls_komdlgn-vgtyp = 'V'.
ls_komdlgn-kzazu = 'X'. "这个是订单组合标识,生成一个内部交货单
ls_komdlgn-lfdat = <fs_head>-lfdat."交货时间
ls_komdlgn-wadat = <fs_head>-lfdat.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_head>-lifnr
IMPORTING
output = ls_komdlgn-lifnr. "供应商编号
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
input = <fs_head>-bstnr
IMPORTING
output = ls_komdlgn-vgbel.
ls_komdlgn-vgpos = <fs_item>-posnr.
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
input = <fs_item>-matnr
IMPORTING
output = ls_komdlgn-matnr
EXCEPTIONS
length_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
* Implement suitable error handling here
ENDIF.
ls_komdlgn-lfimg = <fs_item>-lfimg.
ls_komdlgn-vrkme = 'EA'.
ls_komdlgn-meins = 'EA'.
ls_komdlgn-werks = <fs_item>-werks.
ls_komdlgn-lgort = <fs_item>-lgort.
ls_komdlgn-lichn = <fs_item>-lichn.
ls_komdlgn-lifex = <fs_head>-bstnr.
ls_komdlgn-lifexpos = <fs_item>-posnr.
APPEND ls_komdlgn TO lt_komdlgn.
CLEAR:ls_komdlgn.
ls_vbsk-mandt = sy-mandt.
ls_vbsk-ernam = sy-uname.
ls_vbsk-erdat = sy-datum.
ls_vbsk-uzeit = sy-uzeit.
ls_vbsk-smart = 'L'.
CALL FUNCTION 'GN_DELIVERY_CREATE'
EXPORTING
vbsk_i = ls_vbsk
IMPORTING
vbsk_e = es_vbsk
TABLES
xvbfs = lt_vbfs
xvbls = lt_vbls
xkomdlgn = lt_komdlgn
xxlips = lt_lips
et_spe_vbfs = lt_spe_vbfs.
LOOP AT lt_spe_vbfs INTO ls_spe_vbfs WHERE msgty CA 'EAX'."创建失败
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output-mt_mm098_indelivery_order_sap-status = 'E'.
output-mt_mm098_indelivery_order_sap-message = TEXT-m03.
READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
fs_ret-zsrmid = <fs_head>-zsrmid.
APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
"日志数据
ls_log-zsrmid = <fs_head>-zsrmid.
ls_log-type = 'E'.
ls_log-message = TEXT-m03.
ls_log-aedat1 = sy-datum.
ls_log-aedat2 = sy-uzeit.
ls_log-aedat3 = sy-datum.
ls_log-aedat4 = sy-uzeit.
MODIFY zshmm_023_log FROM ls_log.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
output-mt_mm098_indelivery_order_sap-status = 'S'.
output-mt_mm098_indelivery_order_sap-message = TEXT-m04.
READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
fs_ret-zsrmid = <fs_head>-zsrmid.
READ TABLE lt_lips INTO DATA(ls_lips) INDEX 1.
fs_ret-vbeln = ls_lips-vbeln.
APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
"日志数据
ls_log-zsrmid = <fs_head>-zsrmid.
ls_log-type = 'S'.
ls_log-vbeln = ls_lips-vbeln.
ls_log-message = TEXT-m04.
ls_log-aedat1 = sy-datum.
ls_log-aedat2 = sy-uzeit.
ls_log-aedat3 = sy-datum.
ls_log-aedat4 = sy-uzeit.
MODIFY zshmm_023_log FROM ls_log.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
CLEAR:ls_vbsk,
es_vbsk,
lt_vbfs,
lt_vbls,
lt_komdlgn,
lt_lips,
lt_spe_vbfs.
ENDIF.
ENDLOOP.
修改数量
SELECT SINGLE * FROM lips INTO @ls_lips WHERE vgbel = @<fs_head>-vbeln.
"抬头
ls_head-deliv_numb = <fs_head>-vbeln.
ls_headx-deliv_numb = <fs_head>-vbeln.
ls_techn_control-upd_ind = 'U'.
LOOP AT <fs_head>-item ASSIGNING FIELD-SYMBOL(<fs_item1>).
"行项目
ls_dn_item-deliv_numb = <fs_head>-vbeln.
ls_dn_item-deliv_item = ls_lips-posnr.
ls_dn_item-dlv_qty = <fs_item1>-lfimg. "数量
ls_dn_item-sales_unit = ls_lips-vrkme."单位
ls_dn_item-material = ls_lips-matnr."物料
ls_dn_item-batch = ls_lips-charg. "批次
SELECT SINGLE umrez umren
INTO (ls_dn_item-fact_unit_nom,ls_dn_item-fact_unit_denom)
FROM marm
WHERE matnr = ls_lips-matnr "销售单位一定要先在主数据维护
AND meinh = ls_dn_item-sales_unit.
APPEND ls_dn_item TO lt_dn_item.
ls_dn_itemx-deliv_numb = <fs_head>-vbeln.
ls_dn_itemx-deliv_item = ls_lips-posnr.
ls_dn_itemx-chg_delqty = 'X'."修改交货数量
APPEND ls_dn_itemx TO lt_dn_itemx.
ENDLOOP.
CALL FUNCTION 'BAPI_INB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_head
header_control = ls_headx
delivery = ls_head-deliv_numb
techn_control = ls_techn_control
TABLES
item_data = lt_dn_item
item_control = lt_dn_itemx
return = lt_return.
LOOP AT lt_return ASSIGNING FIELD-SYMBOL(<fs_return>) WHERE type CA 'EAX'.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
output-mt_mm098_indelivery_order_sap-status = 'E'.
output-mt_mm098_indelivery_order_sap-message = TEXT-m07.
READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
fs_ret-zsrmid = <fs_head>-zsrmid.
APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
"日志数据
ls_log-zsrmid = <fs_head>-zsrmid.
ls_log-type = 'E'.
ls_log-message = TEXT-m07.
ls_log-aedat1 = sy-datum.
ls_log-aedat2 = sy-uzeit.
ls_log-aedat3 = sy-datum.
ls_log-aedat4 = sy-uzeit.
MODIFY zshmm_023_log FROM ls_log.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
ENDLOOP.
IF sy-subrc NE 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
output-mt_mm098_indelivery_order_sap-status = 'S'.
output-mt_mm098_indelivery_order_sap-message = TEXT-m06.
READ TABLE output-mt_mm098_indelivery_order_sap-head INTO fs_ret INDEX 1.
fs_ret-zsrmid = <fs_head>-zsrmid.
READ TABLE lt_lips INTO ls_lips INDEX 1.
fs_ret-vbeln = ls_lips-vbeln.
APPEND fs_ret TO output-mt_mm098_indelivery_order_sap-head.
"日志数据
ls_log-zsrmid = <fs_head>-zsrmid.
ls_log-type = 'S'.
ls_log-vbeln = ls_lips-vbeln.
ls_log-message = TEXT-m06.
ls_log-aedat1 = sy-datum.
ls_log-aedat2 = sy-uzeit.
ls_log-aedat3 = sy-datum.
ls_log-aedat4 = sy-uzeit.
MODIFY zshmm_023_log FROM ls_log.
IF sy-subrc = 0.
COMMIT WORK AND WAIT.
ELSE.
ROLLBACK WORK.
ENDIF.
CLEAR:ls_vbsk,
es_vbsk,
lt_vbfs,
lt_vbls,
lt_komdlgn,
lt_lips,
lt_spe_vbfs.
ENDIF.