BAPI_PO_CREATE1 创建的采购订单为何是PBXX,而不是PB00的代码

*&---------------------------------------------------------------------*
*& Report ZMM_CREAT_PO
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zmm_creat_po.

TABLES : ekko,ekpa,konv,ekpo.
*** 参数定义:
DATA :bdcdata_rfc LIKE       bdcdata  OCCURS 0 WITH HEADER   LINE,
      message_rfc LIKE       bdcmsgcoll OCCURS 0 WITH HEADER LINE,
      yy          TYPE       sy-subrc.
**** Purchase Order


DATA: BEGIN OF it_tab OCCURS 0,
*        po_number  TYPE ebeln,        "订单号
        bedat  TYPE ekko-bedat,  "订单日期
*        ebelno(12)," TYPE EKPO-EBELN,  "旧采购订单号
        ebelpo TYPE ekpo-ebelp,  "行项目
        bsart  TYPE ekko-bsart,  "订单类型
        lifnr  TYPE ekko-lifnr,  "供应商
        bukrs  TYPE ekko-bukrs,  "公司代码
        ekgrp  TYPE ekko-ekgrp,  "采购组
        ekorg  TYPE ekko-ekorg,  "采购组织
        knttp  TYPE ekpo-knttp,  "帐户类别
        pstyp  TYPE ekpo-pstyp,  "项目类别
        matnr  TYPE ekpo-matnr,  "物料编码
        txz01  TYPE ekpo-txz01,  "短文本
        menge  TYPE ekpo-menge,  "采购数量
*        MEINS  TYPE EKPO-MEINS,  "单位
*        EINDT  TYPE EKET-EINDT,  "交货日期
        netpr  TYPE ekpo-netpr,  "净价
*        WAERS  TYPE EKKO-WAERS,  "币别
        peinh  TYPE ekpo-peinh,  "价格单位数量
        bprme  TYPE ekpo-bprme,  "价格单位
*        MATKL  TYPE EKPO-MATKL,  "物料组
*        WERKS  TYPE EKPO-WERKS,  "工厂
*        LGORT  TYPE EKPO-LGORT,  "库位
        mwskz  TYPE ekpo-mwskz,  "税码
        kostl  TYPE ekkn-kostl,  "成本中心
        anln1  TYPE ekkn-anln1,  "固定资产号
        banfn  TYPE ekpo-banfn,  "采购申请
        bnfpo  TYPE ekpo-bnfpo,  "采购申请项目
        num    TYPE p, "用于排除重复的值
      END OF it_tab.
DATA:it_header LIKE TABLE OF it_tab WITH HEADER LINE.

DATA:ls_tab LIKE TABLE OF it_tab WITH HEADER LINE.

DATA: BEGIN OF it_tab1 OCCURS 0,


        s_0001 TYPE ekko-lifnr,   "供应商
        s_0002 TYPE ekpo-pstyp,   "项目类别
        s_0003 TYPE ekpo-matnr,   "物料编码
        s_0004 TYPE ekpo-menge,   "采购数量
        s_0005 TYPE ekpo-banfn,  "采购申请
        s_0006 TYPE ekpo-bnfpo,  "采购申请项目

**        s_0001     TYPE ebeln,
*        s_0001 TYPE ekko-bedat,   "订单日期
**        s_0002(12),"  TYPE EKPO-EBELN,   "旧采购订单号
*        s_0002 TYPE ekpo-ebelp,   "行项目
*        s_0003 TYPE ekko-bsart,   "订单类型
*        s_0004 TYPE ekko-lifnr,   "供应商
*        s_0005 TYPE ekko-bukrs,   "公司代码
*        s_0006 TYPE ekko-ekgrp,   "采购组
*        s_0007 TYPE ekko-ekorg,   "采购组织
*        s_0008 TYPE ekpo-knttp,   "科目分配类别
*        s_0009 TYPE ekpo-pstyp,   "项目类别
*        s_0010 TYPE ekpo-matnr,   "物料编码
*        s_0011 TYPE ekpo-txz01,   "短文本
*        s_0012 TYPE ekpo-menge,   "采购数量
**        S_0013 TYPE EKPO-MEINS,   "单位
**        S_0014 TYPE EKET-EINDT,   "交货日期
*        s_0013 TYPE ekpo-netpr,   "净价
**        S_0016 TYPE EKKO-WAERS,   "币别
*        s_0014 TYPE ekpo-peinh,   "价格单位数量
*        s_0015 TYPE ekpo-bprme,   "价格单位
**        S_0019 TYPE EKPO-MATKL,   "物料组
**        S_0020 TYPE EKPO-WERKS,   "工厂
**        S_0021 TYPE EKPO-LGORT,   "库位
*        s_0016 TYPE ekpo-mwskz,   "税码
*        s_0017 TYPE ekkn-kostl,   "成本中心
*        s_0018 TYPE ekkn-anln1,   "固定资产号
*        s_0019 TYPE ekpo-banfn,  "采购申请
*        s_0020 TYPE ekpo-bnfpo,  "采购申请项目
      END OF it_tab1.


*<-------pan-ADD
DATA: BEGIN OF it_tab2 OCCURS 0,



        s_0001 TYPE ekko-lifnr,   "供应商
        s_0002 TYPE ekpo-pstyp,   "项目类别
        s_0003 TYPE ekpo-matnr,   "物料编码
        s_0004 TYPE ekpo-menge,   "采购数量
        s_0005 TYPE ekpo-banfn,  "采购申请
        s_0006 TYPE ekpo-bnfpo,  "采购申请项目




**        s_0001     TYPE ebeln,
*        s_0001 TYPE ekko-bedat,   "订单日期
**        s_0002(12),"  TYPE EKPO-EBELN,   "旧采购订单号
*        s_0002 TYPE ekpo-ebelp,   "行项目
*        s_0003 TYPE ekko-bsart,   "订单类型
*        s_0004 TYPE ekko-lifnr,   "供应商
*        s_0005 TYPE ekko-bukrs,   "公司代码
*        s_0006 TYPE ekko-ekgrp,   "采购组
*        s_0007 TYPE ekko-ekorg,   "采购组织
*        s_0008 TYPE ekpo-knttp,   "科目分配类别
*        s_0009 TYPE ekpo-pstyp,   "项目类别
*        s_0010 TYPE ekpo-matnr,   "物料编码
*        s_0011 TYPE ekpo-txz01,   "短文本
*        s_0012 TYPE ekpo-menge,   "采购数量
**        S_0013 TYPE EKPO-MEINS,   "单位
**        S_0014 TYPE EKET-EINDT,   "交货日期
*        s_0013 TYPE ekpo-netpr,   "净价
**        S_0016 TYPE EKKO-WAERS,   "币别
*        s_0014 TYPE ekpo-peinh,   "价格单位数量
*        s_0015 TYPE ekpo-bprme,   "价格单位
**        S_0019 TYPE EKPO-MATKL,   "物料组
**        S_0020 TYPE EKPO-WERKS,   "工厂
**        S_0021 TYPE EKPO-LGORT,   "库位
*        s_0016 TYPE ekpo-mwskz,   "税码
*        s_0017 TYPE ekkn-kostl,   "成本中心
*        s_0018 TYPE ekkn-anln1,   "固定资产号
*        s_0019 TYPE ekpo-banfn,  "采购申请
*        s_0020 TYPE ekpo-bnfpo,  "采购申请项目
      END OF it_tab2.


*---------------------------end



DATA :num_type TYPE p.

FIELD-SYMBOLS: <fs1>.
DATA :v_symbol_1(50) TYPE c.

DATA: e_count(5) TYPE n VALUE 0,
      s_count(5) TYPE n VALUE 0,
      e_countc   TYPE c LENGTH 15 VALUE '错误条数:',
      s_countc   TYPE c LENGTH 15 VALUE '成功条数:',
      result(70) TYPE c.

*《------------------IT023-ADD 替换下载摸板
DATA: co_objid    TYPE wwwdatatab-objid,
      gv_fullpath TYPE string.
*end

DATA : BEGIN OF it_tab_out OCCURS 0,
         ebelno       TYPE ekpo-ebeln,   "旧采购订单号
         ebelpo       TYPE ekpo-ebelp,   "旧采购订单行号
         ebeln        TYPE ekpo-ebeln,   "新采购订单号
         bukrs        TYPE ekko-bukrs,   "公司代码
         ekgrp        TYPE ekko-ekorg,   "采购组织
         lx           TYPE c,            "类型
         mess(200),                      "信息
         linecolor(4),
       END OF it_tab_out.

*********
************* 调BAPI执行.
DATA: ls_poheader  LIKE bapimepoheader,
      ls_poheaderx LIKE bapimepoheaderx.
DATA: lv_exponumber LIKE bapimepoheader-po_number.
DATA:
  lt_return       LIKE bapiret2 OCCURS 0 WITH HEADER LINE,
  lt_poitem       LIKE bapimepoitem OCCURS 0 WITH HEADER LINE,
  lt_poitemx      LIKE bapimepoitemx OCCURS 0 WITH HEADER LINE,
  lt_poschedule   LIKE bapimeposchedule OCCURS 0 WITH HEADER LINE,
  lt_poschedulex  LIKE bapimeposchedulx OCCURS 0 WITH HEADER LINE,
  lt_poaccount    LIKE bapimepoaccount OCCURS 0 WITH HEADER LINE,
  lt_poaccountx   LIKE bapimepoaccountx OCCURS 0 WITH HEADER LINE,
  lt_potextheader LIKE bapimepotextheader OCCURS 0 WITH HEADER LINE,
  lt_potextitem   LIKE bapimepotext OCCURS 0 WITH HEADER LINE,
  lt_pocond       LIKE bapimepocond   OCCURS 0 WITH HEADER LINE,
  lt_pocondx      LIKE bapimepocondx  OCCURS 0 WITH HEADER LINE,
  lt_pocond1      LIKE bapimepocond   OCCURS 0 WITH HEADER LINE,
  lt_popartner    LIKE bapiekkop OCCURS 0 WITH HEADER LINE.
DATA:message(128).

DATA: ld_item TYPE i VALUE 10. "自动获取项目号的初始赋值-PAN -2023年12月5日

****ALV参数定义:
TYPE-POOLS: slis.
DATA: it_fieldcat TYPE slis_t_fieldcat_alv,
      it_layout   TYPE slis_layout_alv.
DATA:   lv_repid LIKE sy-repid.
DATA:   it_ls_fieldcat TYPE slis_fieldcat_alv.
DATA:   lv_pos TYPE i VALUE 1.

****  屏幕
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT-001.
PARAMETERS:p_file TYPE rlgrap-filename
OBLIGATORY DEFAULT 'D:\采购订单导入模板.xls' .
PARAMETERS:p_col(3) TYPE i OBLIGATORY DEFAULT 1,
           p_row(3) TYPE i OBLIGATORY DEFAULT 2.

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK bk2 WITH FRAME TITLE TEXT-002.

SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN PUSHBUTTON 1(8) but USER-COMMAND export.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK bk2.

INITIALIZATION.
  but =  'EXCEL模板'.



AT SELECTION-SCREEN .
  CASE sy-ucomm.

    WHEN 'EXPORT'.
      PERFORM fm_downm.
  ENDCASE.

*********  屏幕事件
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

  PERFORM frm_get_file USING p_file.
*  PERFORM fm_get_filepath.

END-OF-SELECTION.

************************************************************************
*    START-OF-SELECTION
************************************************************************
START-OF-SELECTION.
**** 数据上传
  PERFORM frm_upload_data.
***** 数据处理
  PERFORM frm_process_data.
***** 数据输出
  PERFORM frm_output_data.


***********************************************************************
***********************************************************************
***** 子程序:

*&--------------------------------------------------------------------*
*&      Form  FRM_UPLOAD_DATA
*&--------------------------------------------------------------------*
FORM frm_upload_data.

  DATA :tab LIKE alsmex_tabline OCCURS 0 WITH HEADER LINE.

  CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'
    EXPORTING
      filename                = p_file
      i_begin_col             = p_col
      i_begin_row             = p_row
      i_end_col               = 100
      i_end_row               = 30000
    TABLES
      intern                  = tab
    EXCEPTIONS
      inconsistent_parameters = 1
      upload_ole              = 2
      OTHERS                  = 3.

************把 表 TAB 的内容给到TAB

  CLEAR : it_tab,it_tab1. REFRESH :it_tab,it_tab1.

  LOOP AT tab.
    TRANSLATE  tab-value TO UPPER CASE.
    CONCATENATE 'IT_TAB1-S_' tab-col INTO v_symbol_1.
    ASSIGN (v_symbol_1) TO <fs1>.
    <fs1> = tab-value.
    AT END OF row.
      APPEND it_tab1.
      CLEAR :it_tab1.
    ENDAT.
  ENDLOOP.
  it_tab2[] = it_tab1[].



  LOOP AT it_tab2 ASSIGNING FIELD-SYMBOL(<fs_tab2>) .
*  it_tab-bedat =
    ls_tab-bsart = 'NB'.
    ls_tab-lifnr  =     <fs_tab2>-s_0001. "供应商
    ls_tab-pstyp  =     <fs_tab2>-s_0002. "项目类别
    ls_tab-matnr   =    <fs_tab2>-s_0003 . "物料编码
    ls_tab-menge   =    <fs_tab2>-s_0004 . "采购数量
    ls_tab-banfn    =   <fs_tab2>-s_0005 . "采购申请号
    ls_tab-bnfpo    =   <fs_tab2>-s_0006  . "采购申请项目

    APPEND  ls_tab TO it_tab.
    CLEAR:ls_tab.

  ENDLOOP.





  LOOP AT it_tab.
    PERFORM f_add_zero USING it_tab-ebelpo.
    PERFORM f_add_zero USING it_tab-anln1.
    PERFORM f_add_zero USING it_tab-kostl.
    TRANSLATE it_tab-bsart TO UPPER CASE.
    TRANSLATE it_tab-lifnr TO UPPER CASE.
    TRANSLATE it_tab-knttp TO UPPER CASE.
*    TRANSLATE IT_TAB-MEINS TO UPPER CASE.
*    TRANSLATE IT_TAB-WAERS TO UPPER CASE.
    TRANSLATE it_tab-bprme TO UPPER CASE.
    TRANSLATE it_tab-mwskz TO UPPER CASE.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = it_tab-bnfpo
      IMPORTING
        output = it_tab-bnfpo.
    MODIFY it_tab.
  ENDLOOP.
*  SORT IT_TAB BY EBELNO.
ENDFORM.                    "FRM_UPLOAD_DATA

*&---------------------------------------------------------------------*
*&      Form  frm_process_data
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM frm_process_data.
  CLEAR : ls_poheader,ls_poheaderx,lv_exponumber,lt_return,lt_poitem,lt_poitemx,
  lt_poschedule,lt_poschedulex,lt_poaccount,lt_poaccountx,lt_potextheader,
  lt_potextitem,lt_pocond,lt_pocondx,lt_popartner.
  REFRESH : lt_return,lt_poitem,lt_poitemx,
  lt_poschedule,lt_poschedulex,lt_poaccount,lt_poaccountx,lt_potextheader,
  lt_potextitem,lt_pocond,lt_pocondx,lt_popartner.
  REFRESH it_header.CLEAR it_header.

  APPEND LINES OF it_tab TO it_header.
*  DELETE ADJACENT DUPLICATES FROM it_header COMPARING ebelno.


  CLEAR : e_count,s_count.
*  num_type = 1.
*  -------------------通过标识符来鉴别该PR是否已经转单了
*  MODIFY  it_header  FROM  num_type TRANSPORTING num WHERE num IS INITIAL.
  SORT: it_header ,it_tab BY lifnr.

  LOOP AT it_header  WHERE num <> '1'  .
******** 抬头文本
*    CLEAR: LT_POTEXTHEADER.
*    LT_POTEXTHEADER-TEXT_ID   = 'F02'.
*    LT_POTEXTHEADER-TEXT_FORM = '*'.
*    LT_POTEXTHEADER-TEXT_LINE = IT_HEADER-EBELNO.
*    APPEND LT_POTEXTHEADER.

*    ls_poheader-po_number = it_header-ebelno."
*    ls_poheader-ref_1  = it_header-ebelno.    "旧采购订单号
    ls_poheader-doc_type   = it_header-bsart.    "采购订单类型
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = it_header-lifnr    "供应商
      IMPORTING
        output = ls_poheader-vendor.
*    ls_poheader-comp_code  = it_header-bukrs.    "公司代码
*    ls_poheader-purch_org  = it_header-ekorg.    "采购组织
*    ls_poheader-pur_group  = it_header-ekgrp.    "采购组---PAN修改-改成自动获取
    ls_poheader-currency   = 'CNY'.    "币别
    ls_poheader-creat_date = sy-datum.           "采购订单创建日期
    ls_poheader-created_by = sy-uname.           "创建人
    ls_poheader-doc_date   = it_header-bedat.    "订单日期
    ls_poheader-langu      = sy-langu.           "语言
    ls_poheader-item_intvl = space.              "项目间隔

    ls_poheaderx-po_number  = 'X'.
    ls_poheaderx-doc_type   = 'X'.
    ls_poheaderx-vendor     = 'X'.
    ls_poheaderx-comp_code  = 'X'.
    ls_poheaderx-purch_org  = 'X'.
    ls_poheaderx-pur_group  = 'X'.
    ls_poheaderx-currency   = 'X'.
    ls_poheaderx-creat_date = 'X'.
    ls_poheaderx-created_by = 'X'.
    ls_poheaderx-doc_date   = 'X'.
    ls_poheaderx-langu      = 'X'.
    ls_poheaderx-item_intvl = 'X'. "自动编号
    ls_poheaderx-ref_1      = 'X'.    "旧采购订单号

    ld_item  =  10 .
    CLEAR:ls_tab.
    LOOP AT it_tab INTO ls_tab  WHERE lifnr = it_header-lifnr AND num <> '1'."WHERE ebelno = it_header-ebelno..

*        *----------------PAN-ADD 自动增加行号

      ls_tab-ebelpo  = ld_item.
      ld_item =  ld_item + 10.
*end

*      IF it_header-ebelpo = it_tab-ebelpo AND it_header-lifnr  = it_tab-lifnr AND  it_header-matnr  =  it_tab-matnr AND  it_header-banfn  =  it_tab-banfn AND  it_header-bnfpo  =  it_tab-bnfpo   .


      CLEAR: lt_poitem, lt_poitemx.
*------>PO item


      lt_poitem-po_item    = ls_tab-ebelpo.    "行项目
      lt_poitem-acctasscat = ls_tab-knttp.     "帐户类别
      lt_poitem-item_cat   = ls_tab-pstyp.     "项目类别

      CALL FUNCTION 'ZEXIT_MATN1_INPUT'
        EXPORTING
          i_matnr = ls_tab-matnr    "物料
        IMPORTING
          e_matnr = lt_poitem-material_long.

      IF it_tab-matnr IS NOT INITIAL. "物料描述
*        SELECT SINGLE maktx INTO lt_poitem-short_text FROM makt WHERE matnr = lt_poitem-material_long.
      ELSE.
        lt_poitem-short_text = ls_tab-txz01.
      ENDIF.

      "采购数量
      lt_poitem-quantity   = ls_tab-menge.


*      SELECT SINGLE meins FROM  eban INTO lt_poitem-po_unit WHERE banfn = ls_tab-banfn  AND  bnfpo = ls_tab-bnfpo .""单位.

      lt_poitem-preq_no = ls_tab-banfn. "采购申请号
      lt_poitem-preq_item = ls_tab-bnfpo."采购申请项目


*      SELECT SINGLE matkl FROM  eban INTO lt_poitem-matl_group WHERE banfn = ls_tab-banfn  AND  bnfpo = ls_tab-bnfpo .""物料组.
      SELECT SINGLE werks FROM  eban INTO lt_poitem-plant WHERE banfn = ls_tab-banfn  AND  bnfpo = ls_tab-bnfpo ."""工厂
*      SELECT SINGLE lgort FROM  eban INTO lt_poitem-stge_loc WHERE banfn = ls_tab-banfn  AND  bnfpo = ls_tab-bnfpo ."库存地点


*----------->PAN-ADD






      "采购组织
      SELECT SINGLE eine~ekorg AS purch_org
        FROM  eina
        JOIN eine ON eina~infnr = eine~infnr
        INTO ls_poheader-purch_org
        WHERE eina~matnr = lt_poitem-material_long
        AND  eina~lifnr = ls_poheader-vendor
.


      "公司代码
      SELECT SINGLE bukrs  AS comp_code
         FROM t001k
        JOIN t001w ON t001k~bwkey = t001w~bwkey
        INTO  ls_poheader-comp_code
        WHERE t001w~werks = lt_poitem-plant
        .


      "采购组
      SELECT SINGLE ekgrp  AS  pur_group
        FROM eban
        INTO   ls_poheader-pur_group
        WHERE banfn = ls_tab-banfn  AND  bnfpo = ls_tab-bnfpo  .    "采购组



*      2024年1月21日--测试传入价格为空,能否自动获取采购信息记录的数据
*      SELECT SINGLE eine~netpr AS net_price "净价
*        FROM  eina
*        JOIN eine ON eina~infnr = eine~infnr
*        INTO lt_poitem-net_price
*        WHERE eina~matnr = lt_poitem-material_long
*        AND  eina~lifnr = ls_poheader-vendor
      .


*      SELECT SINGLE eine~mwskz  AS tax_code"税码
*        FROM  eina
*        JOIN eine ON eina~infnr = eine~infnr
*        INTO lt_poitem-tax_code
*        WHERE eina~matnr = lt_poitem-material_long
*        AND  eina~lifnr = ls_poheader-vendor
*        AND  eine~ekorg  = ls_poheader-purch_org
*        AND eine~werks = lt_poitem-plant.

*      SELECT SINGLE eine~peinh AS price_unit "价格单位数量
*        FROM  eina
*        JOIN eine ON eina~infnr = eine~infnr
*        INTO lt_poitem-price_unit
*        WHERE eina~matnr = lt_poitem-material_long
*        AND  eina~lifnr = ls_poheader-vendor
*        AND  eine~ekorg  = ls_poheader-purch_org
**        AND eine~esokz = it_tab-esokz
*        AND eine~werks = lt_poitem-plant.

*      SELECT SINGLE eine~bprme  AS orderpr_un"价格单位
*        FROM  eina
*        JOIN eine ON eina~infnr = eine~infnr
*        INTO lt_poitem-orderpr_un
*        WHERE eina~matnr = lt_poitem-material_long
*        AND  eina~lifnr = ls_poheader-vendor
*        AND  eine~ekorg  = ls_poheader-purch_org
*        AND eine~werks = lt_poitem-plant.

*      lt_poitem-po_price  = ''."控制条件类型未PB00---IT023 2024年1月21日
*-------------end
*      lt_poitem-tax_code     = it_tab-mwskz.   "税码
*      lt_poitem-price_unit   = it_tab-peinh. "价格单位数量
*      lt_poitem-orderpr_un   = it_tab-bprme. "价格单位
      APPEND lt_poitem.

      lt_poitemx-po_item    = ls_tab-ebelpo. "行项目
      IF it_tab-knttp IS NOT INITIAL.
        lt_poitemx-acctasscat = 'X'.           "帐户类别
      ENDIF.
      IF  it_tab-matnr IS NOT INITIAL.
        lt_poitemx-material_long   = 'X'.         "物料
      ENDIF.

      lt_poitem-preq_no = 'X'.
      lt_poitem-preq_item = 'X'.
*      lt_poitemx-po_price  = 'X'."----IT023
*      lt_poitemx-short_text = 'X'.           "短文本
      lt_poitemx-quantity   = 'X'.           "数量
*      lt_poitemx-po_unit    = 'X'.           "单位
**      lt_poitemx-net_price  = 'X'.           "单价
*      lt_poitemx-matl_group = 'X'.           "物料组
      lt_poitemx-plant      = 'X'.           "工厂
*      lt_poitemx-stge_loc   = 'X'.           "库存地点
*      lt_poitemx-tax_code   = 'X'.           "税码
*      lt_poitemx-price_unit   = 'X'.         "价格单位数量
*      lt_poitemx-orderpr_un   = 'X'.         "价格单位
      IF it_tab-pstyp IS NOT INITIAL.
        lt_poitemx-item_cat    = 'X'.        "项目类别
      ENDIF.
      APPEND lt_poitemx.
*<------end

*------->条件单价
      IF it_tab-netpr IS INITIAL.
        lt_pocond-itm_number = it_tab-ebelpo.
        lt_pocond-change_id  = 'U'.
        lt_pocond-cond_type  = 'PB00'."2024年1月21日--IT023 原:PBXX
        lt_pocond-cond_value = ls_tab-netpr.
        lt_pocond-currency   = 'CNY'.
        lt_pocond-cond_p_unt = ls_tab-peinh. "价格单位数量
        APPEND lt_pocond.

        lt_pocondx-itm_number  = 'X'.
        lt_pocondx-itm_numberx = 'X'.
        lt_pocondx-change_id   = 'X'.
        lt_pocondx-cond_type   = 'X'.
        lt_pocondx-cond_value  = 'X'.
        lt_pocondx-currency    = 'X'.
        lt_pocondx-cond_p_unt  = 'X'.
        APPEND lt_pocondx.

      ENDIF.
*<------end

*------>账户分配
      CLEAR: lt_poaccount,lt_poaccountx.
      PERFORM f_add_zero  USING ls_tab-anln1.
      PERFORM f_add_zero  USING ls_tab-kostl. "成本中心
      lt_poaccount-po_item        = ls_tab-ebelpo.

      lt_poaccount-asset_no       = ls_tab-anln1. "资产号

      lt_poaccount-costcenter     = ls_tab-kostl. "成本中心
      APPEND lt_poaccount.



      lt_poaccountx-po_item        = ls_tab-ebelpo.
      IF it_tab-anln1 IS NOT INITIAL.
        lt_poaccountx-asset_no       =  'X'. "资产号
      ENDIF.
      IF it_tab-kostl IS NOT INITIAL.
        lt_poaccountx-costcenter     =  'X'. "成本中心
      ENDIF.
      APPEND lt_poaccountx.

*<------end

*------>set schdule line data
      CLEAR:lt_poschedule,lt_poschedulex.
      lt_poschedule-po_item = ls_tab-ebelpo.
*      SELECT SINGLE LFDAT FROM  EBAN INTO  LT_POSCHEDULE-DELIVERY_DATE WHERE BANFN = IT_TAB-BANFN  AND  BNFPO = IT_TAB-BNFPO .""交货日期.
*       LT_POSCHEDULE-DELIVERY_DATE =  '20170811'.
      lt_poschedule-quantity = ls_tab-menge. "数量
      lt_poschedule-sched_line = 1.
      lt_poschedule-preq_no = ls_tab-banfn.
      lt_poschedule-preq_item = ls_tab-bnfpo.
      APPEND lt_poschedule.
      lt_poschedulex-po_item = ls_tab-ebelpo.
      lt_poschedulex-delivery_date = 'X'.
      lt_poschedulex-sched_line = 1.
      lt_poschedulex-preq_no = 'X' .
      lt_poschedulex-preq_item = 'X'.
      APPEND lt_poschedulex.


      "增加校验标识
      ls_tab-num = '1'.
      MODIFY it_header FROM ls_tab TRANSPORTING num WHERE lifnr = ls_tab-lifnr .
      MODIFY it_tab FROM ls_tab TRANSPORTING num WHERE banfn = ls_tab-lifnr AND  bnfpo = ls_tab-bnfpo .

      CLEAR:ls_tab.
    ENDLOOP.


    DATA : pv_mesage TYPE sy-msgty.

    TRY .
        CALL FUNCTION 'BAPI_PO_CREATE1'
          EXPORTING
            poheader         = ls_poheader
            poheaderx        = ls_poheaderx
*           no_price_from_po = 'X'
          IMPORTING
            exppurchaseorder = lv_exponumber
          TABLES
            poitem           = lt_poitem[]
            poitemx          = lt_poitemx[]
            poschedule       = lt_poschedule[]
            poschedulex      = lt_poschedulex[]
            poaccount        = lt_poaccount[]
            poaccountx       = lt_poaccountx[]
            pocond           = lt_pocond[]
            pocondx          = lt_pocondx[]
            potextheader     = lt_potextheader
            return           = lt_return[].

      CATCH cx_ai_system_fault INTO DATA(ls_exc).
        pv_mesage = ls_exc->get_text( ).
    ENDTRY.
*    CALL FUNCTION 'BAPI_PO_CREATE1'
*      EXPORTING
*        poheader         = ls_poheader
*        poheaderx        = ls_poheaderx
*      IMPORTING
*        exppurchaseorder = lv_exponumber
*      TABLES
*        poitem           = lt_poitem[]
*        poitemx          = lt_poitemx[]
*        poschedule       = lt_poschedule[]
*        poschedulex      = lt_poschedulex[]
*        poaccount        = lt_poaccount[]
*        poaccountx       = lt_poaccountx[]
*        pocond           = lt_pocond[]
*        pocondx          = lt_pocondx[]
*        potextheader     = lt_potextheader
*        return           = lt_return[].
    IF lv_exponumber IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      CLEAR it_tab_out.
*     it_tab_out-ebelno =  it_header-ebelno.  "旧采购订单号
      it_tab_out-ebeln  =  lv_exponumber.     "新采购订单号
      it_tab_out-bukrs  =  it_header-bukrs.    "公司代码
      it_tab_out-ekgrp  =  it_header-ekorg.    "采购组织
      it_tab_out-lx     = 'S'.
      it_tab_out-mess   = '成功'.
      APPEND it_tab_out.
      s_count = s_count + 1.

      WAIT UP TO 2 SECONDS.

      DATA knumv LIKE ekko-knumv.
      CLEAR knumv.
      SELECT SINGLE knumv INTO knumv FROM ekko WHERE ebeln = lv_exponumber.
      DELETE FROM prcd_elements WHERE knumv = knumv AND kschl = 'PBXX' AND kinak <> ''.
      COMMIT WORK AND WAIT.

      ""审批
      "" ***先取批准代码
      DATA :tab_bapirlcopo LIKE TABLE OF bapirlcopo WITH HEADER LINE.

      CALL FUNCTION 'BAPI_PO_GETRELINFO'
        EXPORTING
          purchaseorder = lv_exponumber
        TABLES
          release_final = tab_bapirlcopo.

**审批采购订单
*      LOOP AT TAB_BAPIRLCOPO .
*
*        IF TAB_BAPIRLCOPO-REL_CODE1 <>'' .
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE1 .
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE2 <>''.
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE2 .
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE3 <>''.
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE3.
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE4 <>'' .
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE4.
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE5 <>''.
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE5.
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE6 <>''.
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE6.
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE7 <>'' .
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE7.
*        ENDIF.
*
*        IF TAB_BAPIRLCOPO-REL_CODE8 <>'' .
*          PERFORM PO_RELEASE USING LV_EXPONUMBER TAB_BAPIRLCOPO-REL_CODE8.
*        ENDIF.
*      ENDLOOP.

    ELSE.

      LOOP AT lt_return WHERE type = 'E' .
        IF lt_return-id <> 'BAPI' AND lt_return-id <> 'MEPO'.
          EXIT.
        ENDIF.
      ENDLOOP.
      CLEAR it_tab_out.
*      it_tab_out-ebelno =  it_header-ebelno.  "旧采购订单号
      it_tab_out-lx     = 'E'.
      it_tab_out-mess   = lt_return-message.
      APPEND it_tab_out.
      e_count = e_count + 1.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
    ENDIF.
    CLEAR:ls_poheader,ls_poheaderx,ls_poheader,lt_poitem,lt_poitemx,lt_poschedule,lt_poschedulex,lt_poaccount,lt_poaccountx,
    lt_pocond,lt_pocondx,lt_return,lt_potextheader,
    lt_poitem[],lt_poitemx[],lt_poschedule[],lt_poschedulex[],lt_poaccount[],lt_poaccountx[],
    lt_pocond[],lt_pocondx[],lt_return[],lt_potextheader[].
  ENDLOOP.
  CONCATENATE e_countc e_count s_countc s_count INTO result.
**********
ENDFORM.                    "frm_process_data
*&--------------------------------------------------------------------*
*&      Form  frm_get_file
*&--------------------------------------------------------------------*
FORM frm_get_file USING pr_file.
  CALL FUNCTION 'WS_FILENAME_GET'
    EXPORTING
      def_path         = 'C:\'
      mask             = '*.*'
      title            = 'Open File...'
    IMPORTING
      filename         = pr_file
    EXCEPTIONS
      inv_winsys       = 1
      no_batch         = 2
      selection_cancel = 3
      selection_error  = 4
      OTHERS           = 5.
ENDFORM.                    "frm_get_file

*&---------------------------------------------------------------------*
*&      Form  f_add_zero
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->VI_INPUT   text
*----------------------------------------------------------------------*
FORM f_add_zero  USING vi_input.
  CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
    EXPORTING
      input  = vi_input
    IMPORTING
      output = vi_input.

ENDFORM.                    " f_add_zero

***数据输出
**********
FORM frm_output_data.
  lv_repid = sy-repid.
  it_layout-detail_popup = 'X'.
  it_layout-info_fieldname = 'LINECOLOR'.
  REFRESH :it_fieldcat[].
  PERFORM frm_fieldcat_init.
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
    EXPORTING
      i_callback_program = lv_repid
      it_fieldcat        = it_fieldcat[]
      is_layout          = it_layout
      i_default          = 'X'
      i_save             = 'A'
      i_grid_title       = result
    TABLES
      t_outtab           = it_tab_out.
ENDFORM.                    "frm_output_data

*&--------------------------------------------------------------------*
*&      Form  frm_fieldcat_init
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM frm_fieldcat_init.
  DEFINE fieldcat.
    CLEAR  it_ls_fieldcat.
    it_ls_fieldcat-col_pos       =  1.
    it_ls_fieldcat-fieldname     = &1.
    it_ls_fieldcat-seltext_l     = &2.
    it_ls_fieldcat-outputlen     = &3.
    it_ls_fieldcat-key           = &4.

    it_ls_fieldcat-seltext_m = it_ls_fieldcat-seltext_l.
    it_ls_fieldcat-seltext_s = it_ls_fieldcat-seltext_l.

    APPEND it_ls_fieldcat TO it_fieldcat.
    CLEAR  it_ls_fieldcat.
  END-OF-DEFINITION.
  fieldcat          'EBELN'              '采购凭证号'                    '10'           'X'  .
  fieldcat          'BUKRS'              '公司代码'                      '10'           'X'  .
  fieldcat          'EKGRP'              '采购组织'                      '6'            'X'  .

  fieldcat          'LX'                '信息类型'                      '10'           ''  .
  fieldcat          'MESS'              '信息内容'                      '60'           ''  .
ENDFORM.                    "frm_fieldcat_init



*************************************************************
FORM  po_release USING po rel_code .

  CALL FUNCTION 'BAPI_PO_RELEASE'
    EXPORTING
      purchaseorder          = po
      po_rel_code            = rel_code
      use_exceptions         = 'X'
* IMPORTING
*     REL_STATUS_NEW         = REL_STATUS
*     REL_INDICATOR_NEW      = REL_IND
*     RET_CODE               = r_code
* TABLES
*     RETURN                 = return_message
    EXCEPTIONS
      authority_check_fail   = 1
      document_not_found     = 2
      enqueue_fail           = 3
      prerequisite_fail      = 4
      release_already_posted = 5
      responsibility_fail    = 6
      OTHERS                 = 7.

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
      wait = 'X'.

  WAIT UP TO 5 SECONDS.

ENDFORM.                    "po_RELEASE
*&---------------------------------------------------------------------*
*& Form FRM_MODULE_EXCEL
*&---------------------------------------------------------------------*
*& text
*&---------------------------------------------------------------------*
*& -->  p1        text
*& <--  p2        text
*&---------------------------------------------------------------------*

* 获取数据模板文件路径
FORM fm_get_filepath . "IT023-ADD-2023年12月18日



  DATA: lv_filename TYPE string,
        lv_path     TYPE string,
        lv_fullpath TYPE string,
        lv_title    TYPE string.


  co_objid = 'ZMMRP040'.

  CONCATENATE  co_objid '-' sy-datum  sy-uzeit INTO lv_title .
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '模板保存为EXCEL'
      default_extension    = 'xls'
      default_file_name    = lv_title
*     file_filter          = '.xls'
      file_filter          = 'Excel 文件 (*.XLS)'
      initial_directory    = 'D:/'
*     DEFAULT_FILE_NAME    = p_filename
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = gv_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    STOP .
  ENDIF.

ENDFORM.


FORM fm_downm ."IT023-ADD替换下载摸板--2023年12月18日

  DATA: ls_indcatortxt TYPE string,
        p_filename     TYPE sapb-sappfad.
  DATA: lo_objdata     LIKE wwwdatatab,
        lo_mime        LIKE w3mime,
        ls_destination LIKE rlgrap-filename,
        ls_objnam      TYPE string,
        li_rc          LIKE sy-subrc,
        ls_errtxt      TYPE string.




  DATA: lv_filename TYPE string,
        lv_path     TYPE string,
        lv_fullpath TYPE string,
        lv_title    TYPE string.


  co_objid = 'ZMMRP040'.

  CONCATENATE  co_objid '-' sy-datum  sy-uzeit INTO lv_title .
  CALL METHOD cl_gui_frontend_services=>file_save_dialog
    EXPORTING
      window_title         = '模板保存为EXCEL'
      default_extension    = 'xls'
      default_file_name    = lv_title
*     file_filter          = '.xls'
      file_filter          = 'Excel 文件 (*.XLS)'
      initial_directory    = 'D:/'
*     DEFAULT_FILE_NAME    = p_filename
    CHANGING
      filename             = lv_filename
      path                 = lv_path
      fullpath             = gv_fullpath
    EXCEPTIONS
      cntl_error           = 1
      error_no_gui         = 2
      not_supported_by_gui = 3
      OTHERS               = 4.
  IF sy-subrc <> 0.
    STOP .
  ENDIF.

  p_filename = gv_fullpath.
  ls_indcatortxt = '程序正在下载模板' .
  CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
    EXPORTING
      percentage = 0
      text       = ls_indcatortxt.
  CONCATENATE co_objid '.XLS' INTO ls_objnam.
  CONDENSE ls_objnam NO-GAPS.
  SELECT SINGLE relid objid FROM wwwdata
    INTO CORRESPONDING FIELDS OF lo_objdata
    WHERE srtf2    = 0
    AND relid    = 'MI'
    AND objid    = co_objid .
  IF sy-subrc NE 0 OR lo_objdata-objid EQ space .
    CONCATENATE '模板文件:' ls_objnam '不存在,请用TCODE:SMW0进行加载' INTO ls_errtxt.
    MESSAGE ls_errtxt  TYPE  'E' .
  ENDIF.

  ls_destination   = gv_fullpath.
  CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
    EXPORTING
      key         = lo_objdata
      destination = ls_destination
    IMPORTING
      rc          = li_rc.
  IF li_rc NE 0.
    CONCATENATE '模板文件:' ls_objnam '下载失败' INTO ls_errtxt.
    MESSAGE ls_errtxt TYPE 'E' .
  ENDIF.

ENDFORM.



FORM frm_module_excel.
  DATA:gt_images LIKE rlgrap-filename OCCURS 0 WITH HEADER LINE,
       return    TYPE c.

  DATA: d_file          TYPE rlgrap-filename,
        filename        TYPE rlgrap-filename,
        filename_delete TYPE string,
        zflag           TYPE c.

  DATA:ab TYPE string,
       cd TYPE c LENGTH 100.

  DATA:rc LIKE sy-subrc.

  CLEAR:filename_delete.


  DATA: BEGIN OF wa_export  OCCURS 0,
          fld2(20)  TYPE c,
          fld3(20)  TYPE c,
          fld4(20)  TYPE c,
          fld5(20)  TYPE c,
          fld6(20)  TYPE c,
          fld7(20)  TYPE c,
          fld8(20)  TYPE c,
          fld9(20)  TYPE c,
          fld10(20) TYPE c,
          fld11(20) TYPE c,
          fld12(20) TYPE c,
          fld13(20) TYPE c,
          fld14(20) TYPE c,
          fld15(20) TYPE c,
          fld16(20) TYPE c,
          fld17(20) TYPE c,
          fld18(20) TYPE c,
          fld19(20) TYPE c,
          fld20(20) TYPE c,
          fld21(20) TYPE c,
        END OF wa_export.

  CLEAR wa_export.
  wa_export-fld2 = '订单日期'.
  wa_export-fld3 = '行项目'.
  wa_export-fld4 = '订单类型'.
  wa_export-fld5 = '供应商'.
  wa_export-fld6 = '公司代码'.
  wa_export-fld7 = '采购组'.
  wa_export-fld8 = '采购组织'.
  wa_export-fld9 = '科目分配类别'.
  wa_export-fld10 = '项目类别'.
  wa_export-fld11 = '物料编码'.
  wa_export-fld12 = '短文本'.
  wa_export-fld13 = '采购数量'.
  wa_export-fld14 = '净价'.
  wa_export-fld15 = '价格数量'.
  wa_export-fld16 = '价格单位'.
  wa_export-fld17 = '税码'.
  wa_export-fld18 = '成本中心'.
  wa_export-fld19 = '固定资产号'.
  wa_export-fld20 = '采购申请号'.
  wa_export-fld21 = '采购申请项目'.
  APPEND wa_export.

  CALL FUNCTION 'TMP_GUI_BROWSE_FOR_FOLDER'
    EXPORTING
      window_title    = TEXT-003
      initial_folder  = ''
    IMPORTING
      selected_folder = d_file
    EXCEPTIONS
      cntl_error      = 1
      OTHERS          = 2.
  IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
  ENDIF.

  IF  d_file IS INITIAL.
    zflag = 'X'.
    message  = '操作取消'.
    MESSAGE message TYPE 'S'.
  ELSE.

    CALL FUNCTION 'WS_QUERY'
      EXPORTING
        filename = d_file
        query    = 'DE'
      IMPORTING
        return   = return.

    IF return = 0.
      message  = '文件路径不存在'.
      MESSAGE message TYPE 'S'.
    ENDIF.

    CALL FUNCTION 'KCD_FRONT_END_DIRECTORY_READ'
      EXPORTING
        i_path      = d_file
      TABLES
        e_directory = gt_images.

    LOOP AT gt_images.
      IF gt_images EQ '采购订单导入模板.xls'.
        CONCATENATE '路径下(' d_file ')已有相同名称的文件(采购订单导入模板),是否替换' INTO cd.
        CONDENSE cd NO-GAPS.
        CALL FUNCTION 'POPUP_TO_CONFIRM'
          EXPORTING
            text_question = cd
          IMPORTING
            answer        = ab.
        IF sy-subrc <> 0.
          MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
                  WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
        ENDIF.
        IF ab = '1'.

          CONCATENATE d_file '\' '采购订单导入模板.xls' INTO filename_delete.
          CONDENSE filename_delete NO-GAPS.

          CALL METHOD cl_gui_frontend_services=>file_delete
            EXPORTING
              filename = filename_delete
            CHANGING
              rc       = rc.
          IF sy-subrc <> 0.

          ENDIF.


        ELSE.
          zflag = 'X'.
          message  = '操作取消'.
          MESSAGE message TYPE 'S'.
        ENDIF.
      ENDIF.
      CLEAR  gt_images.
    ENDLOOP.

    IF zflag = 'X'.
    ELSE.
      CONCATENATE d_file '\' '采购订单导入模板.xls' INTO filename.
      CONDENSE filename NO-GAPS.


      CALL FUNCTION 'SAP_CONVERT_TO_XLS_FORMAT'
        EXPORTING
*         I_FIELD_SEPERATOR =
*         I_LINE_HEADER     =
          i_filename        = filename
*         I_APPL_KEEP       = ' '
        TABLES
          i_tab_sap_data    = wa_export
* CHANGING
*         I_TAB_CONVERTED_DATA       =
        EXCEPTIONS
          conversion_failed = 1
          OTHERS            = 2.
      IF sy-subrc <> 0.

      ENDIF.
      message  = '采购订单导入模板 已导出在指定目录下'.
      MESSAGE message TYPE 'S'.


    ENDIF.
  ENDIF.
ENDFORM.                    "FRM_XLS_MODULE

在这里插入图片描述上传模板如上:
项目类别:填写特殊类型 K(寄售)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值