SAP-PS采购申请

METHOD zps_ii_si_xm_cgsq_in~si_xm_cgsq_in.

"定义返回参数
DATA:it_bapi_bus2002_new TYPE STANDARD TABLE OF bapi_bus2002_new,
     wa_bapi_bus2002_new TYPE bapi_bus2002_new,

     it_bapiret2         TYPE STANDARD TABLE OF bapiret2,
     wa_bapiret2         TYPE bapiret2.

DATA : i_number          TYPE bapi_network_list-network.

DATA:"定义输入活动
  it_bapi_bus2002_act_new TYPE STANDARD TABLE OF bapi_bus2002_act_new,
  wa_bapi_bus2002_act_new TYPE bapi_bus2002_act_new.

DATA:
  "输入的组件信息
  wa_i_components_add TYPE bapi_network_comp_add,
  it_i_components_add TYPE STANDARD TABLE OF bapi_network_comp_add,

  "输出的消息信息

  wa_e_message_table  TYPE bapi_meth_message,
  it_e_message_table  TYPE STANDARD TABLE OF bapi_meth_message.

"返回接口参数
DATA: lo_output    TYPE REF TO zun_co_si_un_resp_out,
      ls_output    TYPE zun_mt_un_resp,
      ls_output_hd TYPE zmmi005_dt_mesg_hd,
      lt_output_bd TYPE zun_dt_un_resp_msgbd_tab,
      ls_output_bd TYPE zun_dt_un_resp_msgbd.


DATA: ls_zpspr TYPE zpspr,
      lt_zpspr TYPE STANDARD TABLE OF zpspr.


DATA: flag_head TYPE c,
      flag_hxm  TYPE c.

****修改组件
DATA: lt_comp TYPE TABLE OF bapi_network_comp_detail,
ls_comp TYPE bapi_network_comp_detail.

DATA:lt_com_change TYPE STANDARD TABLE OF bapi_network_comp_change,
     ls_com_change TYPE bapi_network_comp_change,
     ls_com_upd    TYPE  bapi_network_comp_cng_upd,
     lt_com_upd    TYPE STANDARD TABLE OF bapi_network_comp_cng_upd.

************删除组件

DATA: ls_comp_id TYPE bapi_network_comp_id,
      lt_comp_id TYPE STANDARD TABLE OF bapi_network_comp_id.



LOOP AT input-mt_xm_cgsq-msgbd INTO DATA(ls_input).

  IF ls_input-zflag = 'I'.

    "校验
    IF ls_input-profid IS INITIAL.
      "错误反馈
      ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
      ls_output_bd-itemid    = ls_input-itemid.
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  '关键字段 网络参数文件 不能为空'.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
        CONTINUE.
      ENDIF.
    
      IF ls_input-auart IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  '关键字段 网络类型 不能为空'.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
        CONTINUE.
      ENDIF.
    
      IF ls_input-werks IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  '关键字段 工厂 不能为空'.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
        CONTINUE.
      ENDIF.
    
      IF ls_input-dispo IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  '关键字段 MRP控制者 不能为空'.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
        CONTINUE.
      ENDIF.
    
      IF ls_input-posnr IS INITIAL.
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  '关键字段 WBS元素 不能为空'.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
        CONTINUE.
      ENDIF.
    
    
      "写自建表
      ls_zpspr-msgid  =  ls_input-itemid.
      ls_zpspr-zflag   =  ls_input-zflag.
      ls_zpspr-posnr   =  ls_input-posnr.
      ls_zpspr-profid  =  ls_input-profid.
      ls_zpspr-aufnr   =  ls_input-aufnr.
      ls_zpspr-auart   =  ls_input-auart.
      ls_zpspr-werks   =  ls_input-werks.
      ls_zpspr-dispo   =  ls_input-dispo.
      ls_zpspr-ktext   =  ls_input-ktext.
    
      MODIFY zpspr FROM ls_zpspr.
      COMMIT WORK.
    
      CLEAR:wa_bapi_bus2002_new.
      wa_bapi_bus2002_new-project_definition = ls_input-psphi. "   'JG-112'.       "项目定义
      wa_bapi_bus2002_new-wbs_element        = ls_input-posnr. "'JG-1121'.       "工作分解结构元素 (WBS 元素)
      wa_bapi_bus2002_new-short_text         = ls_input-ktext. "'BAPI测试创建网络11'.       "描述
    
      wa_bapi_bus2002_new-profile            = ls_input-profid. "'AG00002'.  "网络参数文件
      wa_bapi_bus2002_new-network_type       = ls_input-auart. " 'AG46'."网络类型
      wa_bapi_bus2002_new-plant              = ls_input-werks. " '2060'.       "工厂
      wa_bapi_bus2002_new-mrp_controller     = ls_input-dispo. "  'PS1'.       "MRP控制者
    
    
      CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
      CALL FUNCTION 'BAPI_BUS2002_CREATE'
        EXPORTING
          i_network = wa_bapi_bus2002_new
        TABLES
          et_return = it_bapiret2.
    
      "第四步:判断是否有错误消息
      LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
        MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
            INTO wa_bapiret2-message
            WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                 wa_bapiret2-message_v3 wa_bapiret2-message_v4.
      ENDLOOP.
      "第四步:如果有错误消息则退出
      IF sy-subrc EQ 0.
    
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_bapiret2-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
        COMMIT WORK.
    
      ENDIF.
      CHECK sy-subrc NE 0.
    
      "第四步:没有错误消息则执行预提交
      CALL FUNCTION 'BAPI_PS_PRECOMMIT'
        TABLES
          et_return = it_bapiret2.
    
      LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
        MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
            INTO wa_bapiret2-message
            WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                 wa_bapiret2-message_v3 wa_bapiret2-message_v4.
      ENDLOOP.
    
      "第五步:预提交有错误消息则执行回滚
      IF sy-subrc EQ 0.
    
        "错误反馈
        ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
        ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
        ls_output_bd-rettxt    =  wa_bapiret2-message.
        ls_output_bd-retid     = '0'.
        APPEND ls_output_bd TO  lt_output_bd.
    
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
        CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
        CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
          EXPORTING
            i_precommit_ok = 'Y'.
    
        UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
        COMMIT WORK.
      ELSE.
        "第五步:预提交无错误消息则执行正式提交
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        READ TABLE it_bapiret2 INTO wa_bapiret2  WITH  KEY type = 'S'.
        IF sy-subrc = 0.
          i_number = wa_bapiret2-message_v2+0(12).
        ENDIF.
      ENDIF.
    
    
      "网络创建成功后创建作业
      IF i_number IS NOT INITIAL.
    
        CLEAR: it_bapiret2,wa_bapiret2,it_bapi_bus2002_act_new.
        "作业赋值
        wa_bapi_bus2002_act_new-activity           = '0010'.                "在网络和库网络中的作业编号
        wa_bapi_bus2002_act_new-description        = ls_input-ktext.        "工序短文本
        wa_bapi_bus2002_act_new-wbs_element        = ls_input-posnr.        "工作分解结构元素 (WBS 元素)
        wa_bapi_bus2002_act_new-work_cntr          = ''.                    "工作中心
        wa_bapi_bus2002_act_new-work_activity      = ''.                    "工作(时间单位H)
        wa_bapi_bus2002_act_new-acttype            = ''.                    "活动类型
        wa_bapi_bus2002_act_new-cost_elem          = ''.                    "成本要素编码
        wa_bapi_bus2002_act_new-profit_ctr         = ''.                    "利润中心
        wa_bapi_bus2002_act_new-activity_costs   = ''.                      "作业中的成本
    
        APPEND wa_bapi_bus2002_act_new TO it_bapi_bus2002_act_new.
        CLEAR:wa_bapi_bus2002_act_new.
    
        "第三步:调用函数
        CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    
        CALL FUNCTION 'BAPI_BUS2002_ACT_CREATE_MULTI'
          EXPORTING
            i_number    = i_number
          TABLES
            it_activity = it_bapi_bus2002_act_new
            et_return   = it_bapiret2.
    
    
        "第四步:判断是否有错误消息
        LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
          MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
              INTO wa_bapiret2-message
              WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                   wa_bapiret2-message_v3 wa_bapiret2-message_v4.
        ENDLOOP.
    
        "第四步:如果有错误消息则退出
        IF sy-subrc EQ 0.
    
          "错误反馈
          ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
          ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  wa_bapiret2-message.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
    
          CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
          CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
            EXPORTING
              i_precommit_ok = 'Y'.
        ENDIF.
        CHECK sy-subrc NE 0.
    
        "第四步:没有错误消息则执行预提交
        CALL FUNCTION 'BAPI_PS_PRECOMMIT'
          TABLES
            et_return = it_bapiret2.
    
        LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
    
    
          MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
              INTO wa_bapiret2-message
              WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                   wa_bapiret2-message_v3 wa_bapiret2-message_v4.
        ENDLOOP.
        "第五步:预提交有错误消息则执行回滚
        IF sy-subrc EQ 0.
    
    
          "错误反馈
          ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
          ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  wa_bapiret2-message.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
    
          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
            IMPORTING
              return = it_bapiret2.
    
          CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
          CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
            EXPORTING
              i_precommit_ok = 'Y'.
    
        ELSE.
          "第五步:预提交无错误消息则执行正式提交
          CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
            EXPORTING
              wait = 'X'.
    

********************************************8创建物料组件

        SORT ls_input-hxm BY itemid.
        LOOP AT ls_input-hxm INTO DATA(ls_hxm).

          CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
            EXPORTING
              input  = ls_hxm-matnr
            IMPORTING
              output = ls_hxm-matnr.

          ls_zpspr-itemid = ls_hxm-itemid.
          ls_zpspr-matnr =  ls_hxm-matnr.
          ls_zpspr-ekgrp =  ls_hxm-ekgrp.
          ls_zpspr-menge =  ls_hxm-menge.
          ls_zpspr-meins =  ls_hxm-meins.
          ls_zpspr-loekz =  ls_hxm-loekz.
  •          ls_zpspr-zfgtxt =  ls_hxm-zfgtxt.
            MODIFY zpspr FROM ls_zpspr.
            COMMIT WORK.
    
            CLEAR: wa_bapiret2,it_bapiret2.
    
            "物料组件
    
            wa_i_components_add-activity           = '0010'.         "活动编号
            wa_i_components_add-mrp_relevant       = '3'.           "事件立即执行
            wa_i_components_add-material           = ls_hxm-matnr.   "物料号
            wa_i_components_add-entry_quantity     = ls_hxm-menge.   "数量
            wa_i_components_add-base_uom           = ls_hxm-meins.   "'KG'. "基本计量单位
    
            wa_i_components_add-price              = ls_hxm-zyl-yl1. "价格20221213
            wa_i_components_add-req_date           = ls_hxm-zyl-yl2. "需求日期
    
            IF ls_input-profid = 'AG00003'.
              wa_i_components_add-pur_group        = ls_hxm-ekgrp. "采购组
              wa_i_components_add-type_of_pur_resv = '5'.          "采购类型
            ENDIF.
    
            wa_i_components_add-item_cat           = 'L'.        "项目类别不传??????????????????  固定、
    
            APPEND wa_i_components_add TO it_i_components_add.
            CLEAR: wa_i_components_add.
          ENDLOOP.
    
          "第三步:调用函数
          CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
          CALL FUNCTION 'BAPI_NETWORK_COMP_ADD'
            EXPORTING
              number           = i_number
            IMPORTING
              return           = wa_bapiret2
            TABLES
              i_components_add = it_i_components_add
              e_message_table  = it_e_message_table.
    
    
          CLEAR:it_i_components_add.
          APPEND wa_bapiret2 TO it_bapiret2.
          "第四步:判断是否有错误消息
          LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.
            MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
                INTO wa_bapiret2-message
                WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                     wa_bapiret2-message_v3 wa_bapiret2-message_v4.
          ENDLOOP.
    
          "第四步:如果有错误消息记录错误
          IF sy-subrc EQ 0.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
            LOOP AT it_e_message_table INTO wa_e_message_table WHERE  message_type CA 'AE'.
              LOOP AT ls_input-hxm INTO DATA(ls_hxm10).
                IF wa_e_message_table-external_object_id CS ls_hxm10-matnr.
                  "错误反馈
                  ls_output_bd-msgid     = ls_input-itemid.
                  ls_output_bd-itemid    = ls_hxm10-itemid.
                  ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text.
                  ls_output_bd-retid     = '0'.
                  APPEND ls_output_bd TO  lt_output_bd.
                  "找完删后期
                  EXIT.
                ENDIF.
              ENDLOOP.
              IF lt_output_bd IS INITIAL.
                "错误反馈
                ls_output_bd-msgid     = ls_input-itemid.
                ls_output_bd-itemid    = ls_hxm10-itemid.
                ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text.
                ls_output_bd-retid     = '0'.
                APPEND ls_output_bd TO  lt_output_bd.
                CLEAR ls_output_bd.
              ENDIF.
            ENDLOOP.
    
  •          "错误反馈
    
  •          ls_output_bd-msgid     = input-mt_xm_cgsq-msghd-msgid.
    
  •          ls_output_bd-itemid    = ls_input-itemid.
    

** ls_output_bd-order1 = ls_body-anln1.

  •          ls_output_bd-rettxt    =  wa_e_message_table-message_text.
    
  •          ls_output_bd-retid     = '0'.
    
  •          APPEND ls_output_bd TO  lt_output_bd.
    
            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
              EXPORTING
                i_precommit_ok = 'Y'.
    

*********************************"物料创建错误删除网络8

          CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
          CALL FUNCTION 'BAPI_BUS2002_DELETE'
            EXPORTING
              i_number  = i_number
            TABLES
              et_return = it_bapiret2.

          "第四步:判断是否有错误消息
          LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.

            MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
                INTO wa_bapiret2-message
                WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                     wa_bapiret2-message_v3 wa_bapiret2-message_v4.
          ENDLOOP.

          "第四步:如果有错误消息则退出
          IF sy-subrc EQ 0.

            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.

            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
              EXPORTING
                i_precommit_ok = 'Y'.
          ENDIF.

          CHECK sy-subrc NE 0.

          "第四步:没有错误消息则执行预提交
          CALL FUNCTION 'BAPI_PS_PRECOMMIT'
            TABLES
              et_return = it_bapiret2.

          LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.

            MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
                INTO wa_bapiret2-message
                WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                     wa_bapiret2-message_v3 wa_bapiret2-message_v4.
          ENDLOOP.

          "第五步:预提交有错误消息则执行回滚
          IF sy-subrc EQ 0.

            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.

            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
              EXPORTING
                i_precommit_ok = 'Y'.
          ELSE.
            "第五步:预提交无错误消息则执行正式提交
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
          ENDIF.

          CLEAR:it_bapiret2,wa_bapiret2.

******************************************************************"删除网络。。。结束
UPDATE zpspr SET
zfkzt = ‘0’
zfgtxt = wa_bapiret2-message WHERE
msgid = ls_input-itemid AND
zflag = ls_input-zflag AND
itemid = ls_hxm-itemid.
COMMIT WORK.
ENDIF.

        CHECK sy-subrc NE 0.
        "第四步:没有错误消息则执行预提交
        CALL FUNCTION 'BAPI_PS_PRECOMMIT'
          TABLES
            et_return = it_bapiret2.

        LOOP AT it_bapiret2 INTO wa_bapiret2 WHERE type CA 'AE'.

          MESSAGE ID wa_bapiret2-id TYPE wa_bapiret2-type NUMBER wa_bapiret2-number
              INTO wa_bapiret2-message
              WITH wa_bapiret2-message_v1 wa_bapiret2-message_v2
                   wa_bapiret2-message_v3 wa_bapiret2-message_v4.
        ENDLOOP.

        "第五步:预提交有错误消息则执行回滚
        IF sy-subrc EQ 0.

          CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
  •    IMPORTING
    
  •      return = it_bapiret2.
    
            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
    
            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
              EXPORTING
                i_precommit_ok = 'Y'.
    
            UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_bapiret2-message WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag.
            COMMIT WORK.
    
          ELSE.
            "第五步:预提交无错误消息则执行正式提交
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              EXPORTING
                wait = 'X'.
    
  •    IMPORTING
    
  •      return = wa_bapiret2.
          ENDIF.
    

8物料组件*
DATA:
"返回参数
ld_return TYPE bapireturn1,
it_e_component TYPE STANDARD TABLE OF bapi_component_exp,
wa_e_component LIKE LINE OF it_e_component.

        CALL FUNCTION 'BAPI_NETWORK_GETDETAIL'
          EXPORTING
            number      = i_number
  •           i_without_network          = ld_i_without_network
    
  •           i_without_network_activity = ld_i_without_network_activity
    
  •           i_without_relation         = ld_i_without_relation
    
  •           i_without_activity_element = ld_i_without_activity_element
    
  •           i_without_activity_milestone =    ld_i_without_activity_milestone
    
  •           i_without_component        = ld_i_without_component
            IMPORTING
              return      = ld_return
            TABLES
    
  •           e_network   = it_e_network
    
  •           e_activity  = it_e_activity
    
  •           e_relation  = it_e_relation
    
  •           e_message_table            = it_e_message_table
    
  •           e_activity_element         = it_e_activity_element
    
  •           e_activity_milestone       = it_e_activity_milestone
              e_component = it_e_component
            .  "  BAPI_NETWORK_GETDETAIL
    
          LOOP AT it_e_component  INTO wa_e_component .
    
            "创建完反馈
            "上传item
            READ TABLE ls_input-hxm INTO DATA(l_hxm) INDEX sy-tabix.
    
            ls_output_bd-msgid       = ls_input-itemid.  "物料id不烦,他们只有wbs
            ls_output_bd-itemid      = l_hxm-itemid.
            ls_output_bd-rettxt     =  wa_bapiret2-message.
            ls_output_bd-retid      = '1'.
    
            ls_output_bd-yl-yl1     = wa_e_component-preq_no.
            ls_output_bd-yl-yl2     = wa_e_component-preq_item.
            ls_output_bd-yl-yl3     = wa_e_component-reserv_no.
            ls_output_bd-yl-yl4     = wa_e_component-res_item.
            APPEND ls_output_bd TO  lt_output_bd.
    
            UPDATE zpspr SET aufnr = i_number   banfn = wa_e_component-preq_no  bnfpo = wa_e_component-preq_item rsnum = wa_e_component-reserv_no
                             rspos = wa_e_component-res_item   zfkzt = '1' zfgtxt = wa_bapiret2-message
                         WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND  itemid = wa_e_component-res_item.
            COMMIT WORK.
            CLEAR: l_hxm.
          ENDLOOP.
    
        ENDIF.
      ENDIF.
    ENDIF.
    
  •  "只改数量20220819
    IF ls_input-zflag = 'U'.
      LOOP AT ls_input-hxm INTO DATA(ls_hxm2).
        IF ls_hxm2-rsnum IS INITIAL.
          "错误反馈
          ls_output_bd-msgid     = ls_hxm2-itemid.
          ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  '关键字段 预留 不能为空'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
          CONTINUE.
        ENDIF.
    
        IF ls_hxm2-rspos IS INITIAL.
          "错误反馈
          ls_output_bd-msgid     = ls_hxm2-itemid.
          ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  '关键字段 预留行项目 不能为空'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
          CONTINUE.
        ENDIF.
    
        "获取网络号
    
        SELECT SINGLE aufnr INTO i_number FROM resb  WHERE rsnum = ls_hxm2-rsnum   AND  rspos = ls_hxm2-rspos   AND xloek  NE 'X'.
        IF sy-subrc = 0.
    
          CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
            EXPORTING
              number              = i_number
    
  •           MAX_ROWS            = 0
    
  •     IMPORTING
    
  •           RETURN              =
            TABLES
    
  •           I_ACTIVITY_RANGE    =
    
  •           I_COMPONENTS_ID     =
              e_components_detail = lt_comp.
    
          IF lt_comp  IS NOT  INITIAL.
    
            DELETE lt_comp  WHERE reserv_no  NE ls_hxm2-rsnum.
            IF lt_comp IS NOT  INITIAL.
              LOOP AT lt_comp INTO ls_comp WHERE res_item = ls_hxm2-rspos.
    
                ls_com_change-component = ls_comp-component.
                ls_com_change-entry_quantity = ls_hxm2-menge.
                ls_com_change-price          = ls_hxm2-zyl-yl1.
                ls_com_change-req_date       = ls_hxm2-zyl-yl2. "需求日期20230306
                APPEND ls_com_change TO lt_com_change.
    
                ls_com_upd-component  = ls_comp-component.
                ls_com_upd-entry_quantity = 'X'.
                ls_com_upd-price = 'X'.
                ls_com_upd-req_date = 'X'.
                APPEND ls_com_upd TO lt_com_upd.
    
                CALL FUNCTION 'BAPI_NETWORK_COMP_CHANGE'
                  EXPORTING
                    number                     = i_number
    
  • IMPORTING

  •                 RETURN                     =
                  TABLES
                    i_components_change        = lt_com_change
                    i_components_change_update = lt_com_upd
                    e_message_table            = it_e_message_table.
                LOOP AT it_e_message_table INTO wa_e_message_table WHERE  message_type CA 'AE'.
                ENDLOOP.
                IF sy-subrc = 0.
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                  "错误反馈
                  ls_output_bd-msgid     = ls_hxm2-itemid.
                  ls_output_bd-itemid    = ls_input-itemid.
                  ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text..
                  ls_output_bd-retid     = '0'.
                  APPEND ls_output_bd TO  lt_output_bd.
                ELSE.
    
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                    EXPORTING
                      wait = 'X'.
                  "反馈
                  ls_output_bd-msgid     = ls_hxm2-itemid.
                  ls_output_bd-itemid    = ls_input-itemid.
                  ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text..
                  ls_output_bd-retid     = '1'.
                  APPEND ls_output_bd TO  lt_output_bd.
                ENDIF.
                CLEAR: ls_com_change,lt_com_change,ls_com_upd,lt_com_upd.
              ENDLOOP.
            ENDIF.
          ENDIF.
        ELSE.
          "错误反馈
          ls_output_bd-msgid     = ls_hxm2-itemid.
          ls_output_bd-itemid    = ls_input-itemid.
          ls_output_bd-rettxt    =  '预留不存在,请检查'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
        ENDIF.
      ENDLOOP.
    ENDIF.
    

修改结束**************************

删除**************************
IF ls_input-zflag = ‘D’.
LOOP AT ls_input-hxm INTO DATA(ls_hxm3).
IF ls_hxm3-rsnum IS INITIAL.
"错误反馈
ls_output_bd-msgid = ls_hxm3-itemid.
ls_output_bd-itemid = ls_input-itemid.

  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  '关键字段 预留 不能为空'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
          CONTINUE.
        ENDIF.
    
        IF ls_hxm3-rspos IS INITIAL.
          "错误反馈
          ls_output_bd-msgid     = ls_hxm3-itemid.
          ls_output_bd-itemid    = ls_input-itemid.
    
  •    ls_output_bd-order1    = ls_body-anln1.
          ls_output_bd-rettxt    =  '关键字段 预留行项目 不能为空'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
          CONTINUE.
        ENDIF.
    
        "获取网络号
        SELECT SINGLE aufnr INTO i_number FROM resb  WHERE rsnum = ls_hxm3-rsnum   AND  rspos = ls_hxm3-rspos   AND xloek  NE 'X'.
        IF sy-subrc = 0.
    
          CALL FUNCTION 'BAPI_NETWORK_COMP_GETDETAIL'
            EXPORTING
              number              = i_number
    
  •           MAX_ROWS            = 0
    
  •     IMPORTING
    
  •           RETURN              =
            TABLES
    
  •           I_ACTIVITY_RANGE    =
    
  •           I_COMPONENTS_ID     =
              e_components_detail = lt_comp.
    
          IF lt_comp  IS NOT  INITIAL.
    
            DELETE lt_comp  WHERE reserv_no  NE ls_hxm3-rsnum.
            IF lt_comp IS NOT  INITIAL.
              LOOP AT lt_comp INTO ls_comp WHERE res_item = ls_hxm3-rspos.
    
                ls_comp_id-component = ls_comp-component.
                APPEND ls_comp_id TO lt_comp_id.
    
    
                CALL FUNCTION 'BAPI_NETWORK_COMP_REMOVE'
                  EXPORTING
                    number              = i_number
                  TABLES
                    i_components_remove = lt_comp_id
                    e_message_table     = it_e_message_table.
    
                LOOP AT it_e_message_table INTO wa_e_message_table WHERE  message_type CA 'AE'.
                ENDLOOP.
                IF sy-subrc = 0.
    
                  CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    
                  "错误反馈
                  ls_output_bd-msgid     = ls_hxm3-itemid.
                  ls_output_bd-itemid    = ls_input-itemid.
                  ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text..
                  ls_output_bd-retid     = '0'.
                  APPEND ls_output_bd TO  lt_output_bd.
    
    
                  UPDATE zpspr SET zfkzt = '0' zfgtxt = wa_e_message_table-message_text WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
                  COMMIT WORK.
                ELSE.
    
                  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                    EXPORTING
                      wait = 'X'.
    
                  "反馈
                  ls_output_bd-msgid     = ls_hxm3-itemid.
                  ls_output_bd-itemid    = ls_input-itemid.
                  ls_output_bd-rettxt    =  wa_e_message_table-external_object_id && wa_e_message_table-message_text..
                  ls_output_bd-retid     = '1'.
                  APPEND ls_output_bd TO  lt_output_bd.
    
                  UPDATE zpspr SET zfkzt = '1' loekz = 'X' zfgtxt = wa_e_message_table-message_text WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
                  COMMIT WORK.
                ENDIF.
    
                CLEAR: ls_comp_id,lt_comp_id.
              ENDLOOP.
    
            ENDIF.
    
          ENDIF.
        ELSE.
          "错误反馈
          ls_output_bd-msgid     = ls_hxm3-itemid.
          ls_output_bd-itemid    = ls_input-itemid.
          ls_output_bd-rettxt    =  '预留不存在,请检查'.
          ls_output_bd-retid     = '0'.
          APPEND ls_output_bd TO  lt_output_bd.
    
          UPDATE zpspr SET zfkzt = '0' zfgtxt ='预留不存在,请检查' WHERE msgid = ls_input-itemid  AND  zflag = ls_input-zflag AND itemid = ls_hxm3-itemid..
          COMMIT WORK.
    
        ENDIF.
      ENDLOOP.
    ENDIF.
    

    ENDLOOP.

    "反馈头信息
    ls_output_hd-msgid = input-mt_xm_cgsq-msghd-msgid.
    ls_output_hd-tlgid = input-mt_xm_cgsq-msghd-tlgid.
    ls_output_hd-tlgname = input-mt_xm_cgsq-msghd-tlgname.
    ls_output_hd-dtsend = sy-datum && sy-uzeit.
    ls_output_hd-sender = ‘ERP’.
    ls_output_hd-receiver = input-mt_xm_cgsq-msghd-sender.
    ls_output_hd-freeuse = i_number.

    ls_output-mt_un_resp-msghd = ls_output_hd.
    ls_output-mt_un_resp-msgbd = lt_output_bd.

    "调用返回接口,同时获取发送数据的xml消息id.
    TRY .
    CREATE OBJECT lo_output.
    CALL METHOD lo_output->si_un_resp_out
    EXPORTING
    output = ls_output.

      COMMIT WORK AND WAIT.
      CALL FUNCTION 'ZFUN_PO_LOG'
        EXPORTING
          output1 = ls_output
    
  •       output2 = out.
        .
    CATCH cx_ai_system_fault.
    

    ENDTRY.

    ENDMETHOD.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值