当前位置: 首页 > news >正文

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.
*          

http://www.dtcms.com/a/482643.html

相关文章:

  • 基于单片机的简易智能衣架控制系统设计
  • rrk3588 与 NPU 主机下的异构通信:基于 PCIe 的设计与实现
  • 2025年--Lc185--63.不同路径II(动态规划,矩阵)--Java版
  • 跨境电商网站排行榜wordpress数据量大网站访问
  • 从零起步学习MySQL || 第四章:DQL语句定义及常见用法示例
  • 网站建设费如何核算.la域名的门户网站
  • 场景中的建筑静态物体转为actor,保持建筑的相对位置。
  • 数字孪生为什么需要5G?低延迟与高可靠实现精准控制
  • Idea 启动项目把启动类显示在左下角 并显示端口号
  • 网站网页模板网页设计培训哪家机构好
  • SLAM: 如何生成odom数据
  • 环境搭建node.js gnvm
  • 网站建设 就业方向东莞房价2021
  • Spring容器的实现
  • JWT 漏洞全解析:从原理到实战
  • 基于Redis6.2.8版本部署Redis Cluster集群
  • 工控一体机在智慧称重食堂中的应用
  • 网络包封装全解析:从字节流到数据帧
  • Spring MVC入门补充2
  • 石家庄站列车时刻表美食网站二级页面模板
  • GS016电动工具调速控制电路
  • Gartner:AI增强软件测试工具魔力象限报告精编(2025年10月)
  • 绵阳公司商务网站制作沈阳企业网站制作公司
  • elasticsearch-8.12.2集群部署
  • 【教程】增强版 print 函数,支持彩色与样式化终端输出
  • Python下载实战技巧技术文章大纲
  • TCP 拆包现象解决方案(一)
  • 陕西省城乡建设学校网站网页设计图片加载不出来
  • 商业智能BI与业务结构分析
  • 视频融合平台EasyCVR助力构建智慧园区的“视觉中枢”与“智能引擎”