SAP-ABAP 推送PO接口
&---------------------------------------------------------------------
*& Report ZCOIP008
&---------------------------------------------------------------------
REPORT zcoip008.
TABLES: lips.
*---------------------------------------------------------------------
SELECTION SCREEN
*---------------------------------------------------------------------
SELECTION-SCREEN BEGIN OF BLOCK blk WITH FRAME.
SELECT-OPTIONS:s_vbeln FOR lips-vbeln,
s_matnr FOR lips-matnr.
SELECTION-SCREEN END OF BLOCK blk.
*---------------------------------------------------------------------
INITIALIZATION
*---------------------------------------------------------------------
INITIALIZATION.
----------------------------------------------------------------------
AT SELECTION-SCREEN *
----------------------------------------------------------------------
AT SELECTION-SCREEN.
*---------------------------------------------------------------------
START-OF-SELECTION
*---------------------------------------------------------------------
START-OF-SELECTION.
PERFORM frm_set_data.
----------------------------------------------------------------------
END-OF-SELECTION *
----------------------------------------------------------------------
END-OF-SELECTION.
&---------------------------------------------------------------------
*& Form frm_set_data
&---------------------------------------------------------------------
*& text
&---------------------------------------------------------------------
*& --> p1 text
*& <-- p2 text
&---------------------------------------------------------------------
FORM frm_set_data .DATA:lt_modify TYPE STANDARD TABLE OF ztco008,
ls_modify TYPE ztco008." 获取数据
SELECT lips~vbeln,
lips~posnr,
lips~vgbel,
lips~vgpos,
lips~matnr,
likp~wadat_ist,
vbap~zprono
FROM lips INNER JOIN likp ON lips~vbeln = likp~vbeln
INNER JOIN vbap ON vbap~vbeln = lips~vgbel AND vbap~posnr = lips~vgpos
INTO TABLE @DATA(gt_data)
WHERE lips~vbeln IN @s_vbeln
AND lips~matnr IN @s_matnr.IF gt_data IS NOT INITIAL.
SELECT * FROM ztco008
INTO TABLE @DATA(gt_ztco008)
FOR ALL ENTRIES IN @gt_data
WHERE vbeln = @gt_data-vbeln
AND posnr = @gt_data-posnr.
SORT gt_ztco008 BY vbeln posnr.
ENDIF." 发送数据
DATA:lo_cre TYPE REF TO zco_si_coi008_s4_ob_syn.
DATA:ls_output TYPE zmt_coi008_s4_req,
lt_item TYPE zdt_coi008_s4_req_item_tab,
ls_item TYPE zdt_coi008_s4_req_item.
DATA:ls_input TYPE zmt_coi008_s4_res,
lt_return TYPE zdt_coi008_s4_res_return_tab.
DATA:lo_fault TYPE REF TO cx_ai_system_fault.TRY.
FREE lo_cre.
FREE lo_fault.CREATE OBJECT lo_cre. " 整合数据 REFRESH:lt_item,lt_modify. LOOP AT gt_data INTO DATA(ls_data).
有关空置的空置如下:
1、完全没有发货过账过的,这部分在SAP处理,不传输到OA;
2、之前有发货过账过的,已经传输到OA,OA也有接收到数据,这部分后面SAP冲销后,SAP会传输空置到OA,OA需UPDATE对应的数据,置为空置,
等第二次交货时会有新的实际发货日期,那么SAP进行处理,第二次发货和第一次发货日期不一致,因此传输新的实际发货日期给OA,OA需再次UPDATE对应的数据。 " 排除已经推送且未变更的数据 READ TABLE gt_ztco008 INTO DATA(ls_ztco008) WITH KEY vbeln = ls_data-vbeln posnr = ls_data-posnr BINARY SEARCH. IF sy-subrc = 0 AND ls_data-wadat_ist = ls_ztco008-wadat_ist . CONTINUE. ELSEIF sy-subrc NE 0 AND ls_data-wadat_ist IS INITIAL."创建状态,不是冲销过账不传空日期 CONTINUE. ENDIF. MOVE-CORRESPONDING ls_data TO ls_item. MOVE-CORRESPONDING ls_data TO ls_modify. ls_modify-datum = sy-datum. ls_modify-uzeit = sy-uzeit. ls_item-vgbel = |{ ls_item-vgbel ALPHA = OUT }|. CONDENSE ls_item-vgbel NO-GAPS. ls_item-vgpos = |{ ls_item-vgpos ALPHA = OUT }|. CONDENSE ls_item-vgpos NO-GAPS. ls_item-vbeln = |{ ls_item-vbeln ALPHA = OUT }|. CONDENSE ls_item-vbeln NO-GAPS. ls_item-posnr = |{ ls_item-posnr ALPHA = OUT }|. CONDENSE ls_item-posnr NO-GAPS. CALL FUNCTION 'CONVERSION_EXIT_MATN1_OUTPUT' EXPORTING input = ls_item-matnr IMPORTING output = ls_item-matnr. CONDENSE ls_item-matnr NO-GAPS. IF ls_data-wadat_ist IS INITIAL. CLEAR: ls_item-wadat_ist."如果没有日期,就传空过来就可以 ENDIF. APPEND ls_item TO lt_item. APPEND ls_modify TO lt_modify. CLEAR:ls_item,ls_modify. ENDLOOP. IF lt_item[] IS INITIAL. MESSAGE '没有数据' TYPE 'W'. RETURN. ENDIF. CLEAR:ls_output,ls_input. ls_output-mt_coi008_s4_req-in0-item = lt_item. " 调用代理类 CALL METHOD lo_cre->si_coi008_s4_ob_syn EXPORTING output = ls_output IMPORTING input = ls_input. lt_return = ls_input-mt_coi008_s4_res-out-return. READ TABLE lt_return INTO DATA(ls_return) WITH KEY type = 'E'. IF sy-subrc = 0. MESSAGE ls_return-mess TYPE 'S' DISPLAY LIKE 'E'. LOOP AT lt_return INTO ls_return WHERE type = 'E'. DELETE lt_modify WHERE vbeln = ls_return-vbeln AND posnr = ls_return-posnr. ENDLOOP. ELSE. READ TABLE lt_return INTO ls_return WITH KEY type = 'S'. IF sy-subrc = 0 . MESSAGE '数据推送成功' TYPE 'S'. ENDIF. ENDIF. IF lt_modify[] IS NOT INITIAL. " 更新数据表 MODIFY ztco008 FROM TABLE lt_modify. COMMIT WORK AND WAIT. ENDIF. " 获取接口异常
CATCH cx_ai_system_fault INTO lo_fault.
DATA(lv_msg) = lo_fault->get_text( ).
MESSAGE lv_msg TYPE ‘S’ DISPLAY LIKE ‘E’.
ENDTRY.
ENDFORM.
文章来自于网络,如果侵犯了您的权益,请联系站长删除!