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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值