项目服务采购申请采购订单批量创建

*&---------------------------------------------------------------------*
*& Report ZPS206
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zps206.
TABLES: sscrfields,proj.
TYPES: BEGIN OF ty_out,
         srvpos    TYPE srvpos, "服务编号
         ekgrp     TYPE ekgrp, "采购组
         ekorg     TYPE ekorg, "采购组织
         zsm       TYPE mwskz, "税码
         menge     TYPE string, "采购金额
         lifnr     TYPE lifnr, "供应商编码
         zsghtbh   TYPE ekko-zsghtbh, "合同号
         zsghtqdsj TYPE ekko-zsghtqdsj, "合同号
         zgcmc     TYPE ekko-zgcmc, "合同号
         zazsfzr   TYPE ekko-zsghtbh, "合同号
         banfn     TYPE banfn, "采购申请编码
         bnfpo     TYPE bnfpo, "采购申请行项目
         ebeln     TYPE ebeln, "采购订单号
         butxt     TYPE butxt, "校验消息
         ktext1    TYPE ktext1, "短文本
         name1     TYPE name1, "供应商名称
         butxt1    TYPE butxt, "导入信息
         type      TYPE bapi_mtype,
       END OF ty_out.
DATA: fieldcat  TYPE slis_t_fieldcat_alv,
      it_upload TYPE TABLE OF ty_out WITH HEADER LINE,
      return    TYPE TABLE OF bapireturn WITH HEADER LINE,
      return1   TYPE TABLE OF bapiret2 WITH HEADER LINE,
      functxt   TYPE smp_dyntxt.
DATA:msg TYPE bapi_msg.
DATA:ev_aufnr           TYPE aufnr,
     gs_net_bus2002_new TYPE bapi_bus2002_new,
     gt_bapiret2        TYPE TABLE OF bapiret2,
     gs_bapiret2        TYPE bapiret2,
     lv_sys_sta         TYPE bapi_system_status-system_status,
     lt_result          TYPE STANDARD TABLE OF bapi_status_result,
     ls_result          TYPE bapi_status_result,
     bdcdata            LIKE TABLE OF bdcdata WITH HEADER LINE,
     bdcreturn          TYPE TABLE OF bapiret2 WITH HEADER LINE.
DATA: poheader          TYPE bapimepoheader,
      poheaderx         TYPE bapimepoheaderx,
      wa_ext            TYPE bapi_te_mepoheader,
      wa_extx           TYPE bapi_te_mepoheaderx,
      exppurchaseorder  TYPE bapimepoheader-po_number,
      extensionin       TYPE TABLE OF bapiparex WITH HEADER LINE,
      pocomponents      TYPE TABLE OF bapimepocomponent WITH HEADER LINE,
      pocomponentsx     TYPE TABLE OF bapimepocomponentx WITH HEADER LINE,
      poitem            TYPE STANDARD TABLE OF bapimepoitem WITH HEADER LINE,
      poitemx           TYPE STANDARD TABLE OF bapimepoitemx WITH HEADER LINE,
      poschedule        TYPE STANDARD TABLE OF bapimeposchedule WITH HEADER LINE,
      poschedulex       TYPE STANDARD TABLE OF bapimeposchedulx WITH HEADER LINE,
      pocond            TYPE STANDARD TABLE OF bapimepocond WITH HEADER LINE,
      poservices        TYPE STANDARD TABLE OF bapiesllc WITH HEADER LINE,
      poaccount         TYPE STANDARD TABLE OF bapimepoaccount WITH HEADER LINE,
      poaccountx        TYPE STANDARD TABLE OF bapimepoaccountx WITH HEADER LINE,
      posrvaccessvalues TYPE STANDARD TABLE OF bapiesklc WITH HEADER LINE,
      potextitem        TYPE TABLE OF bapimepotext WITH HEADER LINE,
      "return           TYPE TABLE OF bapiret2 WITH HEADER LINE,
      pocondx           TYPE STANDARD TABLE OF bapimepocondx WITH HEADER LINE,
      potextheader      TYPE TABLE OF bapimepotextheader WITH HEADER LINE.
PARAMETERS: p_pspid LIKE proj-pspid OBLIGATORY.
SELECTION-SCREEN FUNCTION KEY :1.

INITIALIZATION.
  %_P_PSPID_%_app_%-text = '项目编码'.
  functxt = '@14@导出模板'.
  sscrfields-functxt_01 = functxt.

AT SELECTION-SCREEN.
  CASE sscrfields-ucomm.
    WHEN 'FC01'.
      REFRESH fieldcat.
      PERFORM init_fieldcat(zpubform) TABLES fieldcat
    USING :'' '服务编号' '' '' '' '',
          '' '采购组' '' '' '' '',
          '' '采购组织' '' '' '' '',
          '' '税码' '' '' '' '',
          '' '采购金额' '' '' '' '',
          '' '供应商编码' '' '' '' '',
          '' '施工合同号' '' '' '' '',
          '' '施工合同签订时间' '' '' '' '',
          '' '工程名称' '' '' '' '',
          '' '安装商负责人' '' '' '' ''.
      PERFORM itabstructoclip(zpubform) USING fieldcat '' ''.
  ENDCASE.

START-OF-SELECTION.
  PERFORM cliptoitab(zpubform) TABLES it_upload.
  LOOP AT it_upload.
    "服务短文本
    PERFORM addzero(zpubform) CHANGING it_upload-srvpos.
    PERFORM addzero(zpubform) CHANGING it_upload-lifnr.
    IF it_upload-srvpos IS NOT INITIAL.
      SELECT SINGLE ktext1 INTO it_upload-ktext1
        FROM esll
        WHERE srvpos = it_upload-srvpos.
      IF sy-subrc NE 0.
        it_upload-type = 'E'.
        CONCATENATE '服务编号不存在' it_upload-butxt1 INTO it_upload-butxt1.
      ENDIF.
    ENDIF.

    "供应商编码
    IF it_upload-lifnr IS NOT INITIAL.
      SELECT SINGLE name1 INTO it_upload-name1
        FROM lfa1
        WHERE lifnr = it_upload-lifnr.
      IF sy-subrc NE 0.
        it_upload-type = 'E'.
        CONCATENATE '供应商不存在' it_upload-butxt1 INTO it_upload-butxt1.
      ENDIF.
    ENDIF.

    IF it_upload-ekgrp IS NOT INITIAL.
      SELECT SINGLE COUNT(*)
        FROM t024
        WHERE ekgrp = it_upload-ekgrp.
      IF sy-subrc NE 0.
        it_upload-type = 'E'.
        CONCATENATE '采购组不存在' it_upload-butxt1 INTO it_upload-butxt1.
      ENDIF.
    ENDIF.

    IF it_upload-ekorg IS NOT INITIAL.
      SELECT SINGLE COUNT(*)
        FROM t024e
        WHERE ekorg = it_upload-ekorg.
      IF sy-subrc NE 0.
        it_upload-type = 'E'.
        CONCATENATE '采购组织不存在' it_upload-butxt1 INTO it_upload-butxt1.
      ENDIF.
    ENDIF.
    IF it_upload-zsm IS NOT INITIAL.
      SELECT SINGLE COUNT(*)
        FROM t007a
        WHERE kalsm = 'TAXCN'
        AND   mwskz = it_upload-zsm.
      IF sy-subrc NE 0.
        it_upload-type = 'E'.
        CONCATENATE '税码不存在' it_upload-butxt1 INTO it_upload-butxt1.
      ENDIF.
    ENDIF.

    MODIFY it_upload.
  ENDLOOP.
  PERFORM alvshow.

FORM alvshow.
  REFRESH fieldcat.
  PERFORM init_fieldcat(zpubform) TABLES fieldcat USING :
        'SRVPOS' '服务编号' 'X' '' '' '',
        'KTEXT1' '短文本' '' '' '' '',
        'EKGRP' '采购组' '' '' '' '',
        'EKORG' '采购组织' '' '' '' '',
        'ZSM' '税码' '' '' '' '',
        'MENGE' '采购金额' '' '' '' '',
        'LIFNR' '供应商编码' 'X' '' '' '',
        'NAME1' '供应商名称' '' '' '' '',
        'ZSGHTBH' '施工合同号' '' '' '' '',
        'ZSGHTQDSJ' '施工合同签订时间' '' '' '' '',
        'ZGCMC' '工程名称' '' '' '' '',
        'ZAZSFZR' '安装商负责人' '' '' '' '',
        'BANFN' '采购申请号' '' '' '' '',
        'BNFPO' '采购申请行项目' '' '' '' '',
        'EBELN' '采购订单号' '' '' '' '',
        'BUTXT1' '校验信息' '' '' '' '',
        'BUTXT' '导入信息' '' '' '' ''.
  PERFORM alvfm(zpubform) TABLES it_upload fieldcat USING 'X' ''.
ENDFORM.
FORM set_status USING rt_extab TYPE slis_t_extab.
  DATA: lt_exfcode TYPE TABLE OF sy-ucomm.
  SET PF-STATUS 'STANDARD1' EXCLUDING lt_exfcode.
ENDFORM. "set_status
FORM user_command USING r_ucomm LIKE sy-ucomm
                        rs_selfield TYPE slis_selfield.

  CASE r_ucomm.
    WHEN '&BUT80'.
      READ TABLE it_upload WITH KEY type = 'E'.
      IF sy-subrc EQ 0.
        MESSAGE e000(oo) WITH '上传数据存在错误,请重新填写'.
      ENDIF.
      PERFORM but80."再次推送
  ENDCASE.
  rs_selfield-row_stable = 'X'.
  rs_selfield-col_stable = 'X'.
  rs_selfield-refresh = 'X'.
ENDFORM.

FORM but80.
  "项目描述
  SELECT SINGLE post1,prctr,werks,vbukr,vernr,kalid,profl INTO
  ( @DATA(ls_post1), @DATA(ls_PRCTR),@DATA(ls_werks),
   @DATA(ls_vbukr), @DATA(ls_vernr),@DATA(ls_kalid),@DATA(ls_profl) )
  FROM proj
  WHERE pspid = @p_pspid.
  "利润中心
  DATA: ps_post1 TYPE prps-post1,
        ps_poski TYPE prps-poski,
        ps_vernr TYPE prps-vernr,
        ps_belkz TYPE prps-belkz,
        ps_fakkz TYPE prps-fakkz.
  DATA(ps_posid) = |{ p_pspid }-{ ls_werks }|.
  SELECT  SINGLE post1,poski,vernr,belkz,fakkz
  INTO (@ps_post1,@ps_poski,@ps_vernr,@ps_belkz,@ps_fakkz )
  FROM prps
  WHERE posid = @ps_posid.
  SELECT SINGLE stspd
  INTO @DATA(tc_stspd)
  FROM tcj41
  WHERE profidproj = @ls_profl.
  SELECT SINGLE auart
  INTO @DATA(tc_auart)
  FROM tcn41
  WHERE profidnetz = @ls_profl.

  LOOP AT it_upload.
*创建网络
    CLEAR : gs_net_bus2002_new.
    gs_net_bus2002_new-project_definition = p_pspid."is_network-pspid.       "项目定义
    gs_net_bus2002_new-wbs_element        = ps_posid."is_network-posid.       "工作分解结构元素 (WBS 元素)
    gs_net_bus2002_new-short_text         = ls_post1."is_network-ktext.       "描述
    gs_net_bus2002_new-plant              = ls_werks."is_network-werks.       "工厂
    gs_net_bus2002_new-mrp_controller     = 'PS1'."is_network-dispo.       "MRP控制者
    CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
    CALL FUNCTION 'BAPI_BUS2002_CREATE'
      EXPORTING
        i_network = gs_net_bus2002_new
      TABLES
        et_return = gt_bapiret2.
    LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AEX'.

    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 = gt_bapiret2.
    LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AEX'.

    ENDLOOP.
    IF sy-subrc EQ 0.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
        IMPORTING
          return = gs_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'
        IMPORTING
          return = gs_bapiret2.
      READ TABLE gt_bapiret2 INTO gs_bapiret2 WITH KEY id = 'CNIF_PI'
                                                       number = '003'.
      IF sy-subrc EQ 0.
        ev_aufnr = gs_bapiret2-message_v2.
      ENDIF.
      IF ev_aufnr IS NOT INITIAL.
        PERFORM bdc_dynpro      USING 'SAPLCOKO' '2000'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'CAUFVD-AUFNR'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=LIST'.
        PERFORM bdc_field       USING 'CAUFVD-AUFNR'
                                      ev_aufnr.
        PERFORM bdc_dynpro      USING 'SAPLCOVG' '2000'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=FRML'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'AFVGD-VORNR(01)'.
        PERFORM bdc_dynpro      USING 'SAPLCOVG' '2000'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'AFVGD-EKGRP(01)'.
        PERFORM bdc_field       USING 'AFVGD-MATKL(01)'
                                      'ZFW'.
        PERFORM bdc_field       USING 'AFVGD-EKGRP(01)'
                                      it_upload-ekgrp.
        PERFORM bdc_field       USING 'RC27X-FLG_SERV(01)'
                                      'X'.
        PERFORM bdc_field       USING 'AFVGD-LTXA1(01)'
                                      '服务采购'.
        PERFORM bdc_field       USING 'AFVGD-EKORG(01)'
                                      it_upload-ekorg.
        PERFORM bdc_dynpro      USING 'SAPLMLSP' '0200'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '/00'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'ESLL-TBTWR(01)'.
        PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                                      '10'.
        PERFORM bdc_field       USING 'ESLL-SRVPOS(01)'
                                      it_upload-srvpos.
        PERFORM bdc_field       USING 'ESLL-MENGE(01)'
                                      it_upload-menge.
        PERFORM bdc_field       USING 'ESLL-TBTWR(01)'
                                      '1'.
        PERFORM bdc_dynpro      USING 'SAPLMLSP' '0200'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=ESB'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'ESLL-KTEXT1(01)'.
        PERFORM bdc_field       USING 'RM11P-NEW_ROW'
                                      '10'.
        PERFORM bdc_dynpro      USING 'SAPLCOVG' '2000'.
        PERFORM bdc_field       USING 'BDC_OKCODE'
                                      '=BU'.
        PERFORM bdc_field       USING 'BDC_CURSOR'
                                      'AFVGD-EKGRP(01)'.
        SET UPDATE TASK LOCAL.
        PERFORM bdcfm(zpubform) TABLES bdcdata bdcreturn
         USING 'CN22' 'N'.    "BDC MODE A:调试模式
        LOOP AT bdcreturn WHERE type = 'S'.
          it_upload-butxt = '导入成功'.
        ENDLOOP.
        LOOP AT bdcreturn WHERE type CA 'AEX'.
          CONCATENATE bdcreturn-message msg INTO msg.
          it_upload-butxt = msg.
        ENDLOOP.
        IF it_upload-butxt = '导入成功'.
          lv_sys_sta = 'REL'.
          SET UPDATE TASK LOCAL.
          CALL FUNCTION 'BAPI_PS_INITIALIZATION'.
          SET UPDATE TASK LOCAL.
          CALL FUNCTION 'BAPI_BUS2002_SET_STATUS'   "释放网络
            EXPORTING
              number            = ev_aufnr
              set_system_status = 'REL'
            TABLES
              e_result          = lt_result.
          LOOP AT lt_result INTO ls_result WHERE message_id CA 'AE'.
            it_upload-butxt = it_upload-butxt && ls_result-message_text.
          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.
          SET UPDATE TASK LOCAL.
          CALL FUNCTION 'BAPI_PS_PRECOMMIT'
            TABLES
              et_return = gt_bapiret2.
          LOOP AT gt_bapiret2 INTO gs_bapiret2 WHERE type CA 'AE'.
            it_upload-butxt = gs_bapiret2-message && '&' && it_upload-butxt.
          ENDLOOP.
          IF sy-subrc EQ 0.
            SET UPDATE TASK LOCAL.
            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
              IMPORTING
                return = gs_bapiret2.
            CALL FUNCTION 'PS_FLAG_INIT_GLOBAL_FLAGS'.
            CALL FUNCTION 'PS_FLAG_SET_GLOBAL_FLAGS'
              EXPORTING
                i_precommit_ok = 'Y'.
          ELSE.
            SET UPDATE TASK LOCAL.
            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
              IMPORTING
                return = gs_bapiret2.
            IF sy-subrc = 0.
              SELECT
                 aufk~aufnr
                FROM aufk
                INNER JOIN prps ON prps~pspnr = aufk~pspel
                WHERE prps~posid = @ps_posid
                ORDER BY aufnr DESCENDING
                INTO TABLE @DATA(lt_aufnr)
                UP TO 1 ROWS.
              READ TABLE lt_aufnr INTO DATA(wa_aufnr) INDEX 1.
              DATA: ls_aufnr TYPE aufnr.
              ls_aufnr = wa_aufnr-aufnr.
              SELECT SINGLE
                ebkn~banfn
                FROM ebkn
                INNER JOIN aufk ON aufk~aufnr = ebkn~nplnr
                WHERE aufk~aufnr = @ls_aufnr
                INTO    @DATA(ls_BANFN).
              IF ls_BANFN IS NOT INITIAL.
                it_upload-banfn = ls_BANFN.
                it_upload-bnfpo = '10'.
                DATA: ls_frgco TYPE t16fc-frgco.
                CLEAR: ls_frgco .
                ls_frgco = 'Z1'.
                IF ls_frgco IS NOT INITIAL.
                  SET UPDATE TASK LOCAL.
                  CALL FUNCTION 'BAPI_REQUISITION_RELEASE'
                    EXPORTING
                      number                 = ls_BANFN
                      rel_code               = ls_frgco
                      item                   = '00010'
                    TABLES
                      return                 = return
                    EXCEPTIONS
                      authority_check_fail   = 1
                      requisition_not_found  = 2
                      enqueue_fail           = 3
                      prerequisite_fail      = 4
                      release_already_posted = 5
                      responsibility_fail    = 6
                      OTHERS                 = 7.
                  DATA(subrc) = sy-subrc.
                  LOOP AT return WHERE type CA 'AEX'.
                    CONCATENATE return-message it_upload-butxt INTO it_upload-butxt
                    SEPARATED BY '/'.
                  ENDLOOP.
                  IF sy-subrc EQ 0 OR subrc NE 0.
                    CONCATENATE 'E:' it_upload-butxt INTO it_upload-butxt.
                    SET UPDATE TASK LOCAL.
                    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                  ELSE.
                    SET UPDATE TASK LOCAL.
                    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                      EXPORTING
                        wait = 'X'.
                  ENDIF.
                  CLEAR: ls_frgco .
                  ls_frgco = 'Z2'.
                  SET UPDATE TASK LOCAL.
                  CALL FUNCTION 'BAPI_REQUISITION_RELEASE'
                    EXPORTING
                      number                 = ls_BANFN
                      rel_code               = ls_frgco
                      item                   = '00010'
                    TABLES
                      return                 = return
                    EXCEPTIONS
                      authority_check_fail   = 1
                      requisition_not_found  = 2
                      enqueue_fail           = 3
                      prerequisite_fail      = 4
                      release_already_posted = 5
                      responsibility_fail    = 6
                      OTHERS                 = 7.
                  subrc = sy-subrc.
                  LOOP AT return WHERE type CA 'AEX'.
                    CONCATENATE return-message it_upload-butxt INTO it_upload-butxt
                    SEPARATED BY '/'.
                  ENDLOOP.
                  IF sy-subrc EQ 0 OR subrc NE 0.
                    CONCATENATE 'E:' it_upload-butxt INTO it_upload-butxt.
                    SET UPDATE TASK LOCAL.
                    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                  ELSE.
                    SET UPDATE TASK LOCAL.
                    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                      EXPORTING
                        wait = 'X'.
                    IF sy-subrc = 0.
                      "抬头数据
                      poheader-doc_type = 'Z02'."凭证类型
                      poheader-comp_code = ls_vbukr."公司代码
                      poheader-vendor = it_upload-lifnr."供应商
                      PERFORM addzero(zpubform) CHANGING poheader-vendor.
                      poheader-purch_org = it_upload-ekorg."采购组织
                      poheader-pur_group = it_upload-ekgrp."采购组
                      poheader-currency = 'CNY'."货币
                      poheader-creat_date = sy-datum."PO创建日期,制单日期
                      poheader-doc_date = sy-datum."PO创建日期
                      PERFORM setbapix(zpubform) USING poheader CHANGING poheaderx.
                      "行项目
                      poitem-po_item = '10'."行项目
                      "poitem-material = it_upload-srvpos.":物料
                      poitem-short_text = it_upload-ktext1.
                      poitem-matl_group = 'ZFW'.
                      poitem-plant = ls_werks."工厂
                      poitem-quantity = it_upload-menge."数量
                      poitem-net_price = it_upload-menge."净价
                      poitem-price_unit = '1'."价格单位
                      poitem-po_unit = 'AU'."单位
                      poitem-tax_code = it_upload-zsm."税码
                      poitem-preq_no = ls_banfn."采购申请号
                      poitem-preq_item = '10'."采购申请行号
                      poitem-acctasscat = 'N'."科目分配类别
                      poitem-item_cat = 'D'."项目类别K
                      poitem-wbs_element = |{ p_pspid }{ ls_werks }|."wbs
                      poitem-pckg_no = '1'.
                      "计划行
                      poschedule-po_item = '10'."
                      poschedule-sched_line = 1."
                      poschedule-delivery_date = sy-datum."交货日期
                      poschedule-quantity = it_upload-menge."数量
                      PERFORM setbapix(zpubform) USING poitem CHANGING poitemx.
                      PERFORM setbapix(zpubform) USING poschedule CHANGING poschedulex.
                      APPEND:poitem,poitemx.
                      APPEND: poschedule,poschedulex.
                      "科目分配
                      poaccount-po_item = '10'.
                      poaccount-serial_no = '01'.
                      DATA: ls_saknr TYPE saknr.
                      CLEAR:ls_saknr.
                      SELECT SINGLE konts
                        INTO ls_saknr
                        FROM t030
                        INNER JOIN asmd ON asmd~bklas = t030~bklas
                        WHERE asmd~asnum = it_upload-srvpos
                        AND t030~ktopl = 'WISD'.
                      poaccount-gl_account = ls_saknr.
                      poaccount-network = ev_aufnr.
                      poaccount-activity = '0010'.
                      PERFORM setbapix(zpubform) USING poaccount CHANGING poaccountx.
                      APPEND: poaccount,poaccountx.
                      "服务
                      poservices-pckg_no = '1'.
                      poservices-line_no = '1'.
                      poservices-outl_level = '0'.
                      poservices-outl_ind = 'X'.
                      poservices-subpckg_no = '2'.
                      APPEND poservices.
                      poservices-pckg_no = '2'.
                      poservices-line_no = '2'.
                      poservices-ext_line = '10'.
                      poservices-outl_level = '0'.
                      poservices-service = it_upload-srvpos.
                      poservices-quantity = it_upload-menge.
                      poservices-base_uom = 'AU'.
                      poservices-gr_price = '1'.
                      poservices-short_text = it_upload-ktext1.
                      poservices-net_value = it_upload-menge.
                      poservices-pln_pckg = '1'.
                      poservices-pln_line = '2'.
                      APPEND poservices.
                      "服务值
                      posrvaccessvalues-pckg_no = '2'.
                      posrvaccessvalues-line_no = '2'.
                      posrvaccessvalues-serno_line = '1'.
                      posrvaccessvalues-percentage = '100'.
                      posrvaccessvalues-serial_no = '1'.
                      posrvaccessvalues-quantity = it_upload-menge.
                      posrvaccessvalues-net_value = it_upload-menge.
                      APPEND posrvaccessvalues.
                      "EDIT BY DONGPZ AT 28.11.2022 20:18:25增强字段写入
                      CLEAR:wa_ext,wa_extx.
                      wa_ext-zsghtbh   = it_upload-zsghtbh   .
                      wa_ext-zsghtqdsj = it_upload-zsghtqdsj .
                      wa_ext-zgcmc     = it_upload-zgcmc     .
                      wa_ext-zazsfzr   = it_upload-zazsfzr   .
                      wa_extx-zsghtbh   = 'X'.
                      wa_extx-zsghtqdsj = 'X'.
                      wa_extx-zgcmc     = 'X'.
                      wa_extx-zazsfzr   = 'X'.
                      CLEAR:extensionin.
                      extensionin-structure = 'BAPI_TE_MEPOHEADER'.
                      extensionin+30(960) = wa_ext.
                      APPEND extensionin.
                      CLEAR:extensionin.
                      extensionin-structure = 'BAPI_TE_MEPOHEADERX'.
                      extensionin-valuepart1 = wa_extx.
                      APPEND extensionin.
                      SET UPDATE TASK LOCAL.
                      CALL FUNCTION 'BAPI_PO_CREATE1'
                        EXPORTING
                          poheader          = poheader
                          poheaderx         = poheaderx
                          no_price_from_po  = 'X'
                        IMPORTING
                          exppurchaseorder  = exppurchaseorder
                        TABLES
                          return            = return1
                          pocond            = pocond
                          pocondx           = pocondx
                          poitem            = poitem
                          poitemx           = poitemx
                          poservices        = poservices
                          poaccount         = poaccount
                          poaccountx        = poaccountx
                          posrvaccessvalues = posrvaccessvalues
                          poschedule        = poschedule
                          poschedulex       = poschedulex
                          pocomponents      = pocomponents
                          pocomponentsx     = pocomponentsx
                          extensionin       = extensionin
                          potextheader      = potextheader
                        EXCEPTIONS
                          OTHERS            = 1.
                      subrc = sy-subrc.
                      LOOP AT return1 WHERE type CA 'AEX'.
                        CONCATENATE return1-message it_upload-butxt INTO it_upload-butxt
                        SEPARATED BY '/'.
                      ENDLOOP.
                      IF sy-subrc EQ 0 OR subrc NE 0.
                        CONCATENATE 'E:' it_upload-butxt INTO it_upload-butxt.
                        SET UPDATE TASK LOCAL.
                        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                      ELSE.
                        SET UPDATE TASK LOCAL.
                        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                          EXPORTING
                            wait = 'X'.
*更新增强字段
                        IF sy-subrc = 0.
                          it_upload-ebeln = exppurchaseorder.
                          CLEAR: ls_frgco.
                          ls_frgco = 'Z1'.
                          SET UPDATE TASK LOCAL.
                          CALL FUNCTION 'BAPI_PO_RELEASE'
                            EXPORTING
                              purchaseorder          = exppurchaseorder
                              po_rel_code            = ls_frgco
                            TABLES
                              return                 = return
                            EXCEPTIONS
                              authority_check_fail   = 1
                              document_not_found     = 2
                              enqueue_fail           = 3
                              prerequisite_fail      = 4
                              release_already_posted = 5
                              responsibility_fail    = 6
                              OTHERS                 = 7.
                          subrc = sy-subrc.
                          LOOP AT return WHERE type CA 'AEX'.
                            CONCATENATE return-message it_upload-butxt INTO it_upload-butxt
                            SEPARATED BY '/'.
                          ENDLOOP.
                          IF sy-subrc EQ 0 OR subrc NE 0.
                            CONCATENATE 'E:' it_upload-butxt INTO it_upload-butxt.
                            SET UPDATE TASK LOCAL.
                            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                          ELSE.
                            SET UPDATE TASK LOCAL.
                            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                              EXPORTING
                                wait = 'X'.
                            it_upload-butxt = '成功'.
                          ENDIF.
                          CLEAR: ls_frgco.
                          ls_frgco = 'Z2'.
                          SET UPDATE TASK LOCAL.
                          CALL FUNCTION 'BAPI_PO_RELEASE'
                            EXPORTING
                              purchaseorder          = exppurchaseorder
                              po_rel_code            = ls_frgco
                            TABLES
                              return                 = return
                            EXCEPTIONS
                              authority_check_fail   = 1
                              document_not_found     = 2
                              enqueue_fail           = 3
                              prerequisite_fail      = 4
                              release_already_posted = 5
                              responsibility_fail    = 6
                              OTHERS                 = 7.
                          subrc = sy-subrc.
                          LOOP AT return WHERE type CA 'AEX'.
                            CONCATENATE return-message it_upload-butxt INTO it_upload-butxt
                            SEPARATED BY '/'.
                          ENDLOOP.
                          IF sy-subrc EQ 0 OR subrc NE 0.
                            CONCATENATE 'E:' it_upload-butxt INTO it_upload-butxt.
                            SET UPDATE TASK LOCAL.
                            CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
                          ELSE.
                            SET UPDATE TASK LOCAL.
                            CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
                              EXPORTING
                                wait = 'X'.
                            it_upload-butxt = '成功'.
                          ENDIF.
                        ENDIF.
                      ENDIF.
                    ENDIF.
                  ENDIF.
                ENDIF.
              ENDIF.
            ENDIF.
          ENDIF.
        ENDIF.
      ENDIF.
    ENDIF.
    MODIFY it_upload.
    CLEAR it_upload.
    CLEAR ev_aufnr.
    CLEAR: bdcdata[], bdcreturn[].
    CLEAR:
   return1[],
   pocond[],
   pocondx[],
   poitem[],
   poitemx[],
   poservices[],
   poaccount[],
   poaccountx[],
   posrvaccessvalues[],
   poschedule[],
   poschedulex[],
   pocomponents[],
   pocomponentsx[],
   extensionin[],
   potextheader[].
  ENDLOOP.
ENDFORM.

FORM bdc_field USING fnam fval.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  CONDENSE bdcdata-fval.
  APPEND bdcdata.
ENDFORM.
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容