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

SAP SD销售订单创建接口分享

一、接口逻辑

1)输入参数和输出参数

2)业务逻辑

二、接口代码

FUNCTION z_fmsd_0018.
*"----------------------------------------------------------------------
*"*"本地接口:
*"  IMPORTING
*"     VALUE(I_DATA_GD) TYPE  ZSBC_IF_GD OPTIONAL
*"     VALUE(I_INPUT) TYPE  STRING OPTIONAL
*"  EXPORTING
*"     VALUE(E_OUTPUT) TYPE  STRING
*"----------------------------------------------------------------------
  DATA:ls_data   TYPE zssd_input_018, "传入的多条数据
       ls_input  TYPE zssd_order_all,   "单条数据
       ls_output TYPE zssd_output_018.

  DATA:lv_status TYPE c.
  DATA:lv_posnr      TYPE num4,
       lv_sched_type TYPE pstyv,
       lv_znew_so    TYPE vbap-znew_so,
       lv_msg        TYPE bapi_msg.
  DATA:gv_status_025 TYPE char1.    "是否成功
  DATA:lv_testrun        TYPE bapiflag-bapiflag, "是否模拟进行
       l_salesdocumentin LIKE bapivbeln-vbeln. "销售订单

  DATA:l_order_header_in      LIKE bapisdhd1, "销售订单抬头
       l_order_header_inx     LIKE bapisdhd1x, "销售订单抬头更新
       gt_return              LIKE TABLE OF bapiret2 WITH HEADER LINE, "返回参数
       gt_order_items_in      LIKE TABLE OF bapisditm WITH HEADER LINE, "销售订单项目
       gt_order_items_inx     LIKE TABLE OF bapisditmx WITH HEADER LINE, "销售订单项目更新
       gt_order_partners      LIKE TABLE OF bapiparnr WITH HEADER LINE, "销售订单合作伙伴
       l_sender               LIKE bapi_sender, "发送人逻辑系统
       l_logic_switch         LIKE bapisdls, "逻辑切换的 SD 复选框
       l_order_conditions_in  LIKE TABLE OF bapicond WITH HEADER LINE, "条件类型
       l_order_conditions_inx LIKE TABLE OF bapicondx WITH HEADER LINE, "条件类型更新
       l_salesdocument        LIKE bapivbeln-vbeln, "BAPI 销售订单
       gt_order_schedules_in  LIKE TABLE OF bapischdl WITH HEADER LINE, "计划行
       gt_order_schedules_inx LIKE TABLE OF bapischdlx WITH HEADER LINE, "计划行更新。
       gt_order_text          LIKE TABLE OF bapisdtext WITH HEADER LINE, "文本
       gt_extensionin         LIKE TABLE OF bapiparex WITH HEADER LINE,
       gt_extensionex         LIKE TABLE OF bapiparex WITH HEADER LINE.

  CLEAR:ls_input,ls_output,lv_status.

  IF i_input IS NOT INITIAL.
    CALL FUNCTION 'Z_FMBC_JSONTOABAP2'
      EXPORTING
        i_json = i_input
      IMPORTING
        e_data = ls_data.
  ENDIF.

  IF ls_data IS INITIAL.
    MOVE-CORRESPONDING ls_data TO ls_output.
    PERFORM frm_set_msg TABLES ls_output-messagelist
                        USING 'E' '00' '001' '请检查JSON结构与SAP ABAP结构 是否一致!'.

    PERFORM frm_write_log_new USING 'SD0018' ls_output i_data_gd i_input e_output 'E'.
    EXIT.
  ENDIF.

  READ TABLE ls_data-data_list
    TRANSPORTING NO FIELDS
    WITH KEY vkgrp = '108'.
  IF sy-subrc = 0.

    MOVE-CORRESPONDING ls_data TO ls_output.
    lv_msg = '销售组为108通用,请更正销售组为对应部门!'.
    PERFORM frm_set_msg TABLES ls_output-messagelist
                    USING 'E' '00' '001' lv_msg.
    PERFORM frm_write_log_new USING 'SD0018' ls_output i_data_gd i_input e_output 'E'.
    EXIT.
  ENDIF.

  LOOP AT ls_data-data_list INTO DATA(lwa_header) WHERE auart = 'ZOR1' OR
                                                    auart = 'ZOR3' OR
                                                    auart = 'ZOR7' OR
                                                    auart = 'ZRE1' OR
                                                    auart = 'ZRE3' OR
*                                                    auart = 'ZRE5' OR
                                                    auart = 'ZRE7'.

    SELECT SINGLE *
      FROM vbak
      WHERE zrequest_id = @lwa_header-zrequest_id
      INTO @DATA(lwa_vbak).
    IF sy-subrc = 0.
      DATA(lv_error) = 'X'.
      MOVE-CORRESPONDING ls_data TO ls_output.
      lv_msg = 'REQUEST_ID:' && lwa_header-zrequest_id &&  '已创建销售订单:' && lwa_vbak-vbeln &&'!'.
      PERFORM frm_set_msg TABLES ls_output-messagelist
                      USING 'E' '00' '001' lv_msg.
      CLEAR lwa_vbak.
      CONTINUE.
    ENDIF.


    lwa_header-kunnr = |{ lwa_header-kunnr ALPHA = IN }|.
    DATA(lv_kunnr) = lwa_header-kunnr.
    DATA(lv_vkorg) = lwa_header-vkorg.
    DATA(lv_vtweg) = lwa_header-vtweg.
*    DATA(lv_prsdt) = lwa_header-prsdt.
    DATA:lt_item LIKE lwa_header-item.

    LOOP AT lwa_header-item INTO DATA(ls_item).
      ls_item-matnr = |{ ls_item-matnr ALPHA = IN }|.
      APPEND ls_item TO lt_item.
    ENDLOOP.

    IF lt_item[] IS NOT INITIAL.
      DATA(lwa_item) = lt_item[ 1 ].
      DATA(lv_prsdt) = lwa_item-prsdt.
    ENDIF.

    IF lt_item[] IS NOT INITIAL.
      SELECT a901~kunnr,
             vkorgau,
             vtweg,
             pltyp,
             matnr,
             datab,
             datbi,
             a901~knumh,
             kbetr
        FROM a901
        LEFT JOIN konp ON konp~knumh = a901~knumh AND konp~loevm_ko = ''
        FOR ALL ENTRIES IN @lt_item
        WHERE a901~kunnr = @lv_kunnr
          AND vkorgau = @lv_vkorg
          AND vtweg = @lv_vtweg
          AND pltyp = @lt_item-pltyp
          AND matnr = @lt_item-matnr
          AND datab <= @lt_item-prsdt
          AND datbi >= @lt_item-prsdt
        INTO TABLE @DATA(lt_a901).

      SELECT matnr,
             matkl
        FROM mara
        FOR ALL ENTRIES IN @lt_item
        WHERE matnr = @lt_item-matnr
        INTO TABLE @DATA(lt_mara).
    ENDIF.

    LOOP AT lt_item INTO lwa_item WHERE pstyv NE 'ZTA5' AND pstyv NE 'ZRE5'.

      "盛思物料特殊处理
      READ TABLE lt_mara INTO DATA(ls_mara) WITH KEY matnr = lwa_item-matnr.
      IF sy-subrc = 0.
        DATA(lv_matnr) = |{ lwa_item-matnr ALPHA = OUT }|.
*        IF lv_matnr+0(3) = '202' OR ls_mara-matkl = '110901'.  "盛思物料特殊处理
        IF ls_mara-matkl = '110901'.  "盛思物料特殊处理
          IF lwa_item-zkbetr1 IS INITIAL .
            lv_error = 'X'.
            MOVE-CORRESPONDING ls_data TO ls_output.
            lv_msg = '盛思物料:' && lwa_item-matnr &&  '价格必填'.
          &nb

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

相关文章:

  • rabbitMQ 的安装和使用
  • 华为Java专业级科目一通过心得
  • [Android] AutoCMD+ v.1.3.5:安卓自动化工具
  • 从养殖场到实验室:小吉快检BL-08plus如何实现禽病检测效率提升300%?——真实案例深度解析
  • 衡阳手机网站建设外发加工费计入什么科目
  • 【JUnit实战3_06】第三章:JUnit 的体系结构(下)
  • 使用injected Provider在remix中调试合约的坑 -- 时间(或者最新块)更新不及时
  • 丽水市莲都建设分局网站湖南微网站开发
  • 笔试-最小组合数
  • Web UI自动化时,通过autoIT的解决window控件
  • 电商网站建设建议网站前端交互功能案例分析
  • Qt——窗口
  • [人工智能-大模型-20]:对比 Copilot 与国产替代方案(如通义灵码、百度Comate)
  • c语言和网站建设的关系平台网站开发可行性分析
  • gcc编译的过程及每个过程的作用
  • ROS2[Humble] -- URDF Tutorial- 02-multipleshapes
  • C#实现二维码和条形码生成与打印
  • C#WPF如何跳转页面
  • 【高并发服务器】八、Poller描述符监控类实现
  • 用vs2013网站开发四川最好的网络优化公司
  • 如何开发一个 IDEA 插件通过 Ollama 调用大模型为方法生成仙侠风格的注释
  • 【论文精读】Latent-Shift:基于时间偏移模块的高效文本生成视频技术
  • unity基础学习笔记<上>
  • C# WPF Dragablz使用记录 TabControl选项卡可拖拽为单独界面或停靠
  • 机器人场景落地步入技术验证阶段,微美全息加快创新势能探索AI多元路径变革
  • YOLOv4 核心内容笔记
  • 网站开发工程师待遇家庭网站建设
  • 医疗门户网站模板wordpress3.8
  • iOS的多线程下数据安全和内存泄漏以及工具使用监测内存泄漏
  • 『CMake』关于使用CMake构建项目时的现代/传统指令