*&---------------------------------------------------------------------*
*& 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(寄售)