SAP MM采购订单创建接口分享

一、接口逻辑

使用费用采购订单、固定资产采购订单、模具采购订单等通过OA审批后,将结果传入SAP创建采购订单并完成审批。

1)输入参数和输出参数

2)各种申购场景梳理和业务映射

3)采购订单增强

二、接口代码

  FUNCTION z_fmmm_0007.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_DATA_GD) TYPE  ZSBC_IF_GD OPTIONAL
*"     VALUE(I_INPUT) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(E_OUTPUT) TYPE  STRING
*"----------------------------------------------------------------------

    TABLES: ztmm007_log.

    DATA: gs_input     TYPE zsmm_input_007,
          gt_output    TYPE zttmm_output_007,
          gs_output    TYPE zsmm_po_output,
          gs_data_list TYPE zsmm_po_data,
          gs_return    TYPE zsmm_output_007.

    "gs_poacc  TYPE zsmm_po_acc.
    DATA: ls_msg   TYPE bapi_msg,
          l_status TYPE c VALUE 'S'.
    DATA: l_zsbc_msg TYPE zsbc_msg.
    DATA: l_num TYPE int4.
    DATA:ls_fid     LIKE  thead-tdid,
         ls_fname   LIKE  thead-tdname,
         ls_fobject LIKE  thead-tdobject.
    DATA:flines    LIKE TABLE OF tline  WITH HEADER LINE .
    DATA: l_zlcbh(40) TYPE c.
    DATA: poheader    LIKE TABLE OF bapimepoheader  WITH HEADER LINE ,   "采购订单抬头数据
          poheaderx   LIKE TABLE OF bapimepoheaderx WITH HEADER LINE,
          return      LIKE TABLE OF bapiret2  WITH HEADER LINE,
          poitem      LIKE TABLE OF bapimepoitem WITH HEADER LINE,       "采购订单项目
          poitemx     LIKE TABLE OF bapimepoitemx WITH HEADER LINE,
          poschedule  LIKE TABLE OF bapimeposchedule WITH HEADER LINE,  "采购订单交货计划行的字段
          poschedulex LIKE TABLE OF bapimeposchedulx WITH HEADER LINE,
          poaccount   LIKE TABLE OF bapimepoaccount WITH HEADER LINE,    "采购订单的帐户分配字段
          poaccountx  LIKE TABLE OF bapimepoaccountx WITH HEADER LINE,
          potextitem  LIKE TABLE OF bapimepotext WITH HEADER LINE.

    DATA: lv_purchaseorder     TYPE bapimmpara-po_number,
          lv_po_rel_code       TYPE bapimmpara-po_rel_cod,
          lv_use_exceptions    TYPE bapimmpara-selection,
          lv_no_commit         TYPE bapimmpara-selection,
          lv_rel_status_new    TYPE bapimmpara-rel_status,
          lv_rel_indicator_new TYPE bapimmpara-po_rel_ind,
          lv_ret_code          TYPE sy-subrc,
          lt_return            TYPE STANDARD TABLE OF bapireturn.

    DATA: ls_bapi_te_mepoitem  TYPE bapi_te_mepoitem,
          ls_bapi_te_mepoitemx TYPE bapi_te_mepoitemx,
          lt_extensionin       TYPE TABLE OF bapiparex,
          lwa_extensionin      TYPE bapiparex.
    DATA: epo LIKE bapimepoheader-po_number.
    DATA: l_ebelp TYPE ebelp.
    DATA: BEGIN OF lt_zpowb1 OCCURS 0,
            ebelp(5)    TYPE c,
            zpowb1(200) TYPE c,
          END OF lt_zpowb1.

    DATA:lv_msg TYPE char255.

    DATA: lt_zpowb3 LIKE TABLE OF lt_zpowb1 WITH HEADER LINE.

    "CALL FUNCTION 'ZFM_BREAK_POINT'.

    CALL FUNCTION 'Z_FMBC_JSONTOABAP2'
      EXPORTING
        i_json = i_input
      IMPORTING
        e_data = gs_input.

*  if I_TEST is not initial.
*    GS_INPUT = I_TEST.
*  endif.

    CALL FUNCTION 'Z_FMBC_ABAPTOJSON'
      EXPORTING
        i_data = gs_input
      IMPORTING
        e_json = i_input.

*********************CHECKDATA
    IF gs_input IS INITIAL.
      l_status = 'E'.
      ls_msg = '请检查JSON结构与SAP ABAP结构 是否一致!'.
      l_zsbc_msg-type = l_status.
      l_zsbc_msg-message = ls_msg.
      APPEND l_zsbc_msg TO gs_output-messagelist.
      APPEND gs_output TO gt_output.

      gs_return-data_list = gt_output.
      CALL FUNCTION 'Z_FMBC_ABAPTOJSON'
        EXPORTING
          i_data = gs_return
        IMPORTING
          e_json = e_output.

      PERFORM write_log_po USING i_data_gd i_input e_output 'MM0007' 'INBOUND' l_status ls_msg.
      EXIT.
    ENDIF.

    "删除掉已经成功的数据
    DELETE gs_input-data_list WHERE ebeln IS NOT INITIAL.

    LOOP AT gs_input-data_list INTO gs_data_list.
      IF gs_data_list-zlcbh IS INITIAL. "OR gs_data_list-zoaitm IS INITIAL.
        l_status = 'E'.
        ls_msg = 'OA流程编号不能为空!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.
*      IF gs_data_list-submi IS INITIAL.
*        l_status = 'E'.
*        ls_msg = '汇总号里要输入SRM询价单号!'.
*        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
*        APPEND  gs_output TO gt_output.
*        EXIT.
*      ENDIF.
      SELECT SINGLE * FROM ztmm007_log
      WHERE zlcbh = gs_data_list-zlcbh
      AND   zrequest_id = gs_data_list-zrequest_id
      AND   ebeln NE ''.
      IF sy-subrc = 0.
        l_status = 'E'.
        ls_msg = 'OA流程编号和OA流程唯一码重复!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.
      SELECT SINGLE * FROM t006a
      WHERE mseh3 = @gs_data_list-meins
      AND   spras = '1' INTO @DATA(lw_t006a).
      IF sy-subrc NE 0.
        l_status = 'E'.
        ls_msg = '单位' && gs_data_list-meins && '不存在!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.
      SELECT SINGLE * FROM t006a
      WHERE mseh3 = @gs_data_list-bprme
      AND   spras = '1' INTO @lw_t006a.
      IF sy-subrc NE 0.
        l_status = 'E'.
        ls_msg = '单位' && gs_data_list-bprme && '不存在!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.

      IF gs_data_list-zterm IS INITIAL.
        l_status = 'E'.
        ls_msg = '付款条件不能为空!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.
      IF gs_data_list-mwskz IS INITIAL.
        l_status = 'E'.
        ls_msg = '税码不能为空!'.
        PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
        APPEND  gs_output TO gt_output.
        EXIT.
      ENDIF.

      IF gs_data_list-bsart = 'NB' .
*        IF gs_data_list-preq_no IS INITIAL OR gs_data_list-preq_item IS INITIAL.
*          l_status = 'E'.
*          ls_msg = 'NB类型采购申请不能为空!'.
*          PERFORM frm_set_msg TABLES gs_output-messagelist USING l_status '00' '001' ls_msg.
*          APPEND  gs_output TO gt_output.
*          

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值