*&---------------------------------------------------------------------*
*& Report ZMM015
*&---------------------------------------------------------------------*
*& 抬头 : 采购凭证批导程序 *
*& 模块 : MM *
*& 作者 : ZHANGS *
*& 创建日期 : 2019/02/27 *
*& 修改记录 : *
*& 日期 修改人 修改内容 *
*& YYYY/MM/DD 修改人员名 说明 *
*&---------------------------------------------------------------------*
REPORT ZMM015.
TYPES: BEGIN OF TY_UPLOAD,
* TABIX TYPE STRING, "采购订单序号
EBELN TYPE STRING, " 采购订单号 及是 采购订单序号
PO_ITEM TYPE STRING, "行项目号
BSART TYPE STRING, " 采购凭证类型
KNTTP TYPE STRING, "科目分配类别
PSTYP TYPE STRING, "项目类别
BEDAT TYPE STRING, " 采购凭证日期
BUKRS TYPE STRING, " 公司代码
EKORG TYPE STRING, " 采购组织
EKGRP TYPE STRING, " 采购组
LIFNR TYPE STRING, " 供应商帐户号
EBELP TYPE STRING, " 采购订单的项目编号
MATNR TYPE STRING, " 物料编号
TXZ01 TYPE STRING, "短文本
WERKS TYPE STRING, " 工厂
SUPPL_STLOC TYPE STRING, "储存地点、库存地点
MATKL TYPE STRING, " 物料组
MENGE TYPE STRING, " 数量
MEINS TYPE STRING, " 订单单位
EINDT TYPE STRING, " 交货日期
SLFDT TYPE STRING, "交货日期的相关统计
WAERS TYPE STRING,
NETPR TYPE STRING, "单价
*EKPO-BRTWR/EKPO-MENGE " 价格(PBXX/PB00含税价)
PEINH TYPE STRING, " 价格单位
BPRME TYPE STRING, "订单价格单位(采购)
MWSKZ TYPE STRING, " 税码
BEDNR TYPE STRING, "需求跟踪号
FREE TYPE STRING, "免费 ----------
JHFLG TYPE STRING, "交货已完成 -----------------
RET_ITEM TYPE STRING, "退货
UEBTO TYPE STRING, " 过量交货限度(%)
UNTTO TYPE STRING, " 交货不足限度(%)
AUFNR TYPE STRING, " 生产订单
KOSTL TYPE STRING, "成本中心
GL_ACCOUNT TYPE STRING, "总账科目
ZBZXX TYPE STRING, "备注信息
END OF TY_UPLOAD.
DATA: GS_UPLOAD TYPE TY_UPLOAD,
GT_UPLOAD TYPE TABLE OF TY_UPLOAD.
TYPES: BEGIN OF TY_OUTPUT,
CHK_LIGHTS TYPE CHAR1, "-- 数据检查指示灯 -
* TABIX LIKE SYST-TABIX, "采购订单序号
EBELN TYPE EKKO-EBELN, " 采购订单号
PO_ITEM TYPE BAPIMEPOITEM-PO_ITEM, "行项目号
BSART TYPE EKKO-BSART, " 采购凭证类型
KNTTP TYPE EKPO-KNTTP, "科目分配类别
PSTYP TYPE EKPO-PSTYP, "项目类别
BEDAT TYPE EKKO-BEDAT, " 采购凭证日期
BUKRS TYPE EKKO-BUKRS, " 公司代码
EKORG TYPE EKKO-EKORG, " 采购组织
EKGRP TYPE EKKO-EKGRP, " 采购组
LIFNR TYPE EKKO-LIFNR, " 供应商帐户号
EBELP TYPE EKPO-EBELP, " 采购订单的项目编号
MATNR TYPE EKPO-MATNR, " 物料编号
TXZ01 TYPE EKPO-TXZ01, " 物料短描述
WERKS TYPE EKPO-WERKS, " 工厂
SUPPL_STLOC TYPE LGOBE, "储存地点、库存地点-------
MATKL TYPE EKPO-MATKL, " 物料组
MENGE TYPE EKPO-MENGE, " 数量
MEINS TYPE EKPO-MEINS, " 订单单位
EINDT TYPE EKET-EINDT, " 交货日期
SLFDT TYPE EKET-SLFDT, "交货日期的相关统计
WAERS TYPE EKKO-WAERS, "货币码
NETPR TYPE EKPO-NETPR, " 单价
*EKPO-BRTWR/EKPO-MENGE " 价格(PBXX/PB00含税价)
PEINH TYPE EKPO-PEINH, " 价格单位
BPRME TYPE EKPO-BPRME, "订单价格单位(采购)
MWSKZ TYPE EKPO-MWSKZ, " 税码
BEDNR TYPE EKPO-BEDNR, "需求跟踪号
FREE TYPE UMSON, "免费 ----------
JHFLG TYPE BAPIMEPOITEM-NO_MORE_GR, "交货完成标识----------
RET_ITEM TYPE BAPIMEPOITEM-RET_ITEM, "退货
UEBTO TYPE EKPO-UEBTO, " 过量交货限度(%)
UNTTO TYPE EKPO-UNTTO, " 交货不足限度(%)
AUFNR TYPE EBKN-AUFNR, " 生产订单
KOSTL TYPE EKKN-KOSTL, "成本中心
GL_ACCOUNT TYPE BAPIMEPOACCOUNT-GL_ACCOUNT, "总账科目
ZBZXX TYPE CHAR40, "备注信息
STATU TYPE BAPIRET2-TYPE,
MSG TYPE BAPIRET2-MESSAGE,
END OF TY_OUTPUT.
DATA: GS_OUTPUT TYPE TY_OUTPUT,
GT_OUTPUT TYPE TABLE OF TY_OUTPUT.
DATA: GT_FCAT TYPE LVC_T_FCAT,
GA_FCAT TYPE LVC_S_FCAT,
LC_GRID TYPE REF TO CL_GUI_ALV_GRID.
DEFINE ADD_FIELDS.
ga_fcat-fieldname = &1.
ga_fcat-scrtext_m = &2.
APPEND ga_fcat TO gt_fcat.
CLEAR ga_fcat.
END-OF-DEFINITION.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001 .
PARAMETERS : P_FILE LIKE RFPDO1-FEBUMSF .
SELECTION-SCREEN END OF BLOCK B1 .
SELECTION-SCREEN BEGIN OF BLOCK B3 WITH FRAME TITLE TEXT-002 .
PARAMETERS : R1 RADIOBUTTON GROUP RAD2,
R2 RADIOBUTTON GROUP RAD2.
SELECTION-SCREEN END OF BLOCK B3 .
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
"路径选择
DATA: L_FILES TYPE FILETABLE,
H_FILES TYPE FILE_TABLE,
L_RC LIKE SY-SUBRC.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
CHANGING
FILE_TABLE = L_FILES
RC = L_RC
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
OTHERS = 4.
IF SY-SUBRC <> 0 OR L_RC < 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
READ TABLE L_FILES INDEX 1 INTO H_FILES.
P_FILE = H_FILES-FILENAME.
START-OF-SELECTION .
CASE 'X' .
WHEN R1 .
IF P_FILE IS INITIAL .
MESSAGE '请选择导入文件路径' TYPE 'S' DISPLAY LIKE 'E' .
EXIT.
ENDIF .
PERFORM FRM_UPLOAD_DATA .
PERFORM FRM_CHECK_DATA .
PERFORM FRM_DISPLAY_ALV.
WHEN R2 .
PERFORM FRM_DOWNLOAD_TEMP .
ENDCASE.
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD_TEMP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DOWNLOAD_TEMP .
DATA : LC_FILE TYPE STRING , "rlgrap-filename,
LC_OBJID TYPE WWWDATATAB-OBJID VALUE 'ZMM015',
LC_KEY TYPE WWWDATATAB,
LC_DESC TYPE RLGRAP-FILENAME,
LC_SUBRC TYPE SY-SUBRC,
LC_TEMP TYPE C.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = '采购订单批量创建模板.xls' "设置前文件名
DEF_PATH = 'C:\' "设置前路径
MASK = ',Excel Files,*.xls;All Files,*.*.'
MODE = 'S' "S = 保存,O = 打开
TITLE = 'Save File'
IMPORTING
FILENAME = LC_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
IF SY-SUBRC = 0.
LC_DESC = LC_FILE.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF LC_KEY
FROM WWWDATA WHERE SRTF2 = 0 AND RELID = 'MI' AND OBJID = LC_OBJID .
CALL FUNCTION 'DOWNLOAD_WEB_OBJECT'
EXPORTING
KEY = LC_KEY
DESTINATION = LC_DESC
IMPORTING
RC = LC_SUBRC
CHANGING
TEMP = LC_TEMP.
IF LC_SUBRC <> 0 .
MESSAGE '没有相应的数据模板下载' TYPE 'E'.
LEAVE LIST-PROCESSING.
ENDIF.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_UPLOAD_DATA .
DATA: V_RAW(4096) OCCURS 0,
LV_FILE TYPE RLGRAP-FILENAME.
*&---------------------------------------------
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '正在打开EXCEL文件'.
CALL FUNCTION 'SAPGUI_PROGRESS_INDICATOR'
EXPORTING
TEXT = '数据上载中....'.
CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'
EXPORTING
I_LINE_HEADER = 'X'
I_TAB_RAW_DATA = V_RAW
I_FILENAME = P_FILE
TABLES
I_TAB_CONVERTED_DATA = GT_UPLOAD
EXCEPTIONS
CONVERSION_FAILED = 1
OTHERS = 2.
IF SY-SUBRC = 1.
MESSAGE E893(UX) WITH LV_FILE RAISING CONVERSION_FAILED.
ENDIF.
IF SY-SUBRC = 2.
* message e000 with '读取文件时发生错误!'.
ENDIF.
DELETE GT_UPLOAD INDEX 1.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_DISPLAY_ALV
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_DISPLAY_ALV .
DATA: LS_LAYOUT TYPE LVC_S_LAYO,
LS_REPID TYPE SY-REPID.
CLEAR:LS_LAYOUT.
LS_LAYOUT-ZEBRA = 'X'.
LS_LAYOUT-SEL_MODE = 'A'.
LS_LAYOUT-CWIDTH_OPT = 'X'.
LS_LAYOUT-EXCP_FNAME = 'CHK_LIGHTS'.
* ls_layout-box_fieldname = 'SEL'."不用做选中,直接点前面的行号就代表选中
* ls_repid = sy-repid.
PERFORM FRM_GET_FIELDCAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY_LVC'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
* i_grid_title = lv_grid_title
* I_BUFFER_ACTIVE = 'X'
I_DEFAULT = 'X'
I_SAVE = 'X'
I_CALLBACK_USER_COMMAND = 'USER_COMMAND'
I_CALLBACK_PF_STATUS_SET = 'SET_PF_STATUS'
IT_FIELDCAT_LVC = GT_FCAT[]
IS_LAYOUT_LVC = LS_LAYOUT
* it_events = lt_event
TABLES
T_OUTTAB = GT_OUTPUT
EXCEPTIONS
PROGRAM_ERROR = 1
OTHERS = 2.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_GET_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_GET_FIELDCAT .
* add_fields 'TABIX ' '序号 '.
ADD_FIELDS 'STATU' '状态'.
ADD_FIELDS 'MSG' '消息'.
ADD_FIELDS 'EBELN ' '采购订单号 '.
ADD_FIELDS 'PO_ITEM ' '行项目号'.
ADD_FIELDS 'BSART ' '采购订单类型'.
ADD_FIELDS 'KNTTP ' '科目分配类别'.
ADD_FIELDS 'PSTYP ' '项目类别'.
ADD_FIELDS 'BEDAT ' '采购凭证日期 '.
ADD_FIELDS 'BUKRS ' '公司代码 '.
ADD_FIELDS 'EKORG ' '采购组织 '.
ADD_FIELDS 'EKGRP ' '采购组 '.
ADD_FIELDS 'LIFNR ' '供应商帐户号 '.
ADD_FIELDS 'EBELP ' '采购订单行项'.
ADD_FIELDS 'MATNR ' '物料号 '.
ADD_FIELDS 'TXZ01 ' '物料短描述 '.
ADD_FIELDS 'WERKS ' '工厂 '.
ADD_FIELDS 'SUPPL_STLOC' '库存地点 '."-------------
ADD_FIELDS 'MATKL ' '物料组 '.
ADD_FIELDS 'MENGE ' '采购数量 '.
ADD_FIELDS 'MEINS ' '单位 '.
ADD_FIELDS 'EINDT ' '交货日期 '.
ADD_FIELDS 'SLFDT ' '统计交货日期 '.
ADD_FIELDS 'WAERS ' '货币码 '.
ADD_FIELDS 'NETPR ' '单价 '.
ADD_FIELDS 'PEINH ' '价格单位 '.
ADD_FIELDS 'BPRME ' '订单价格单位 '.
ADD_FIELDS 'MWSKZ ' '税码 '.
ADD_FIELDS 'BEDNR ' '跟踪编号'.
ADD_FIELDS 'NETPR ' '价格(PBXX/PB00含税价) '."--------------------
ADD_FIELDS 'FREE ' '免费'."--------------------
ADD_FIELDS 'JHFLG ' '交货已完成'."--------------------
ADD_FIELDS 'RET_ITEM ' '退货'."--------------------
ADD_FIELDS 'UEBTO ' '过量交货限度(%)'.
ADD_FIELDS 'UNTTO ' '交货不足限度(%)'.
ADD_FIELDS 'AUFNR ' '生产订单'.
ADD_FIELDS 'KOSTL ' '成本中心'.
ADD_FIELDS 'GL_ACCOUNT ' '总账科目'."---------
ADD_FIELDS 'ZBZXX ' '项目文本'.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CHECK_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CHECK_DATA .
CLEAR GS_UPLOAD.
LOOP AT GT_UPLOAD INTO GS_UPLOAD.
* GS_OUTPUT-TABIX = SY-TABIX.
MOVE-CORRESPONDING GS_UPLOAD TO GS_OUTPUT.
GS_OUTPUT-CHK_LIGHTS = 3.
APPEND GS_OUTPUT TO GT_OUTPUT.
ENDLOOP.
ENDFORM.
FORM SET_PF_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB."调用SAP标准功能的工具栏图标,例排序、筛选、小计等功能
SET PF-STATUS 'ZMM015'. "双击单引号里面的,新建一个同名的状态,也可以去在别的reportcopy一个标准的
" "再加上自己定义的按钮。比如program name : RM07MLBS
ENDFORM.
FORM USER_COMMAND USING R_UCOMM LIKE SY-UCOMM
RS_SELFIELD TYPE SLIS_SELFIELD.
DATA: LV_EBELN TYPE EBELN.
CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR'
IMPORTING
E_GRID = LC_GRID.
CALL METHOD LC_GRID->CHECK_CHANGED_DATA.
RS_SELFIELD-REFRESH = 'X'.
CASE R_UCOMM.
WHEN 'UPLOAD'.
PERFORM FRM_CREAT_CGDD.
WHEN 'BACK' OR 'CANCEL'.
LEAVE TO SCREEN 0.
WHEN 'EXIT'.
LEAVE PROGRAM.
* WHEN 'ALL'.
WHEN '&IC1'.
CASE RS_SELFIELD-FIELDNAME.
WHEN 'EBELN'.
LV_EBELN = RS_SELFIELD-VALUE.
SET PARAMETER ID 'BES' FIELD LV_EBELN.
CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDCASE.
* PERFORM frm_selectall.
* WHEN 'DLL'.
* PERFORM frm_selectdll.
ENDCASE.
ENDFORM.
*&---------------------------------------------------------------------*
*& Form FRM_CREAT_CGDD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FRM_CREAT_CGDD .
DATA: WA_OUTPUT TYPE TY_OUTPUT.
DATA: WA_POHEADER TYPE BAPIMEPOHEADER.
DATA: WA_POHEADERX TYPE BAPIMEPOHEADERX.
DATA: WA_RETURN TYPE BAPIRET2,
LT_RETURN TYPE TABLE OF BAPIRET2.
DATA: PO_NO TYPE EKKO-EBELN.
DATA: WA_MEPOHEADER TYPE BAPI_TE_MEPOHEADER.
DATA: WA_MEPOHEADERX TYPE BAPI_TE_MEPOHEADERX.
DATA: WA_EXTENSIONIN TYPE BAPIPAREX,
LT_EXTENSIONIN TYPE TABLE OF BAPIPAREX.
DATA:WA_POITEM TYPE BAPIMEPOITEM .
DATA:WA_POITEMX TYPE BAPIMEPOITEMX.
DATA:WA_POSCHEDULE TYPE BAPIMEPOSCHEDULE.
DATA:WA_POSCHEDULEX TYPE BAPIMEPOSCHEDULX.
DATA:WA_POCOND TYPE BAPIMEPOCOND.
DATA:WA_POCONDX TYPE BAPIMEPOCONDX.
DATA:WA_POSERVICE TYPE BAPIESLLC.
DATA:WA_POSRVVALUE TYPE BAPIESKLC.
DATA:WA_POLIMITS TYPE BAPIESUHC.
DATA:WA_POACCOUNT TYPE BAPIMEPOACCOUNT,
WA_POACCOUNTX TYPE BAPIMEPOACCOUNTX.
DATA:LT_POITEM TYPE TABLE OF BAPIMEPOITEM .
DATA:LT_POITEMX TYPE TABLE OF BAPIMEPOITEMX.
DATA:LT_POSCHEDULE TYPE TABLE OF BAPIMEPOSCHEDULE.
DATA:LT_POSCHEDULEX TYPE TABLE OF BAPIMEPOSCHEDULX.
DATA:LT_POCOND TYPE TABLE OF BAPIMEPOCOND.
DATA:LT_POCONDX TYPE TABLE OF BAPIMEPOCONDX.
DATA:LT_POSERVICE TYPE TABLE OF BAPIESLLC.
DATA:LT_POSRVVALUE TYPE TABLE OF BAPIESKLC.
DATA:LT_POLIMITS TYPE TABLE OF BAPIESUHC.
DATA:LT_POACCOUNT TYPE TABLE OF BAPIMEPOACCOUNT,
LT_POACCOUNTX TYPE TABLE OF BAPIMEPOACCOUNTX.
DATA: LT_POTEXTITEM TYPE TABLE OF BAPIMEPOTEXT,
WA_POTEXTITEM TYPE BAPIMEPOTEXT.
FIELD-SYMBOLS: <FS_OUTPUT> TYPE TY_OUTPUT.
DATA: LT_OUTPUT TYPE TABLE OF TY_OUTPUT WITH KEY EBELN.
DATA: LS_OUTPUT TYPE TY_OUTPUT.
DATA: L_ITEMNO TYPE BAPIMEPOITEM-PO_ITEM.
DATA: COUNT_TOTAL TYPE SY-TABIX.
DATA: LT_RETURN1 TYPE TABLE OF BAPIRETURN,
WA_RETURN1 TYPE BAPIRETURN.
LT_OUTPUT = GT_OUTPUT.
SORT LT_OUTPUT BY EBELN ASCENDING EBELP ASCENDING.
DELETE ADJACENT DUPLICATES FROM LT_OUTPUT COMPARING EBELN.
* DELETE LT_OUTPUT WHERE BSART IS INITIAL.
* DESCRIBE TABLE LT_OUTPUT LINES COUNT_TOTAL.
DATA: LC_TOTAL TYPE CHAR6.
MOVE COUNT_TOTAL TO LC_TOTAL.
DATA: L_COUNT TYPE SY-TABIX VALUE 0.
DATA: L_PER TYPE PERCENTAGE,
L_INDICATOR TYPE STRING.
* DATA: COUNT_LAST TYPE SYST-TABIX.
* DESCRIBE TABLE GT_OUTPUT LINES COUNT_LAST.
* CLEAR LT_OUTPUT.
DATA: L_PCKG_NO TYPE BAPIMEPOITEM-PCKG_NO.
DATA: L_TABIX LIKE SY-TABIX.
DATA: L_ACC_SN TYPE DZEKKN.
DATA:LV_FLAG TYPE C."标记是免费订单
LOOP AT LT_OUTPUT INTO WA_OUTPUT.
L_TABIX = 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_OUTPUT-LIFNR
IMPORTING
OUTPUT = WA_OUTPUT-LIFNR.
* APPEND WA_OUTPUT TO LT_OUTPUT.
IF WA_OUTPUT-BSART IS NOT INITIAL.
CLEAR WA_POHEADER.
* wa_poheader-po_number = wa_output-ebeln. "此处是外部给号,内部给号时删除此处
IF WA_OUTPUT-EBELN IS INITIAL.
ELSE.
WA_POHEADER-PO_NUMBER = WA_OUTPUT-EBELN. "此处是外部给号,内部给号时删除此处
ENDIF.
WA_POHEADER-DOC_TYPE = WA_OUTPUT-BSART.
WA_POHEADER-VENDOR = WA_OUTPUT-LIFNR.
WA_POHEADER-PURCH_ORG = WA_OUTPUT-EKORG.
WA_POHEADER-PUR_GROUP = WA_OUTPUT-EKGRP.
WA_POHEADER-COMP_CODE = WA_OUTPUT-BUKRS.
WA_POHEADER-DOC_DATE = WA_OUTPUT-BEDAT.
WA_POHEADER-CURRENCY = WA_OUTPUT-WAERS.
* WA_POHEADER-CREAT_DATE = WA_OUTPUT-BEDAT.
WA_POHEADER-ITEM_INTVL = SPACE."指定行项目编号
* IF WA_OUTPUT-BSART EQ 'ZPO1'.
* WA_POHEADER-PO_REL_IND = 'R'.
* WA_POHEADER-REL_STATUS = ''.
* ENDIF.
CLEAR WA_POHEADERX.
IF WA_POHEADER-PO_NUMBER IS NOT INITIAL. "此处是外部给号,内部给号时删除此处
WA_POHEADERX-PO_NUMBER = 'X'.
ENDIF.
WA_POHEADERX-DOC_TYPE = 'X'.
WA_POHEADERX-VENDOR = 'X'.
WA_POHEADERX-PURCH_ORG = 'X'.
WA_POHEADERX-PUR_GROUP = 'X'.
WA_POHEADERX-COMP_CODE = 'X'.
WA_POHEADERX-DOC_DATE = 'X'.
WA_POHEADERX-CURRENCY = 'X'.
* WA_POHEADERX-CREAT_DATE = 'X'.
WA_POHEADERX-ITEM_INTVL = 'X'."指定行项目编号
* IF WA_OUTPUT-BSART EQ 'ZPO1'.
* WA_POHEADERX-PO_REL_IND = 'X'.
* WA_POHEADERX-REL_STATUS = 'X'.
* ENDIF.
ENDIF.
CLEAR PO_NO.
* L_PCKG_NO = '0000000001'.
* L_ACC_SN = '01'.
LOOP AT GT_OUTPUT INTO LS_OUTPUT WHERE EBELN = WA_OUTPUT-EBELN.
* l_itemno = l_tabix * 10. 此处为内部给号
L_ITEMNO = LS_OUTPUT-PO_ITEM. "外部给号
IF LS_OUTPUT-MATNR IS NOT INITIAL .
CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
EXPORTING
INPUT = LS_OUTPUT-MATNR
IMPORTING
OUTPUT = LS_OUTPUT-MATNR.
ENDIF.
WA_POITEM-PO_ITEM = L_ITEMNO.
WA_POITEM-MATERIAL_LONG = LS_OUTPUT-MATNR .
WA_POITEM-SHORT_TEXT = LS_OUTPUT-TXZ01.
WA_POITEM-PLANT = LS_OUTPUT-WERKS .
WA_POITEM-STGE_LOC = LS_OUTPUT-SUPPL_STLOC ."-----------------库存地点
WA_POITEM-MATL_GROUP = LS_OUTPUT-MATKL .
WA_POITEM-TRACKINGNO = LS_OUTPUT-BEDNR . "需求跟踪号
WA_POITEM-QUANTITY = LS_OUTPUT-MENGE .
WA_POITEM-PO_UNIT = LS_OUTPUT-MEINS .
WA_POITEM-MATL_GROUP = LS_OUTPUT-MATKL.
WA_POITEM-NET_PRICE = LS_OUTPUT-NETPR.
WA_POITEM-PO_PRICE = '1'.
WA_POITEM-PRICE_UNIT = LS_OUTPUT-PEINH. "价格单位
WA_POITEM-ACCTASSCAT = LS_OUTPUT-KNTTP. "科目分配类别
WA_POITEM-ITEM_CAT = LS_OUTPUT-PSTYP. "项目类别
WA_POITEM-OVER_DLV_TOL = LS_OUTPUT-UEBTO."交货不足限度
WA_POITEM-UNDER_DLV_TOL = LS_OUTPUT-UNTTO."过量交货限度
WA_POITEM-TAX_CODE = LS_OUTPUT-MWSKZ."销售/购买税代码
WA_POITEM-NO_MORE_GR = LS_OUTPUT-JHFLG. "交货完成标识
WA_POITEM-FREE_ITEM = LS_OUTPUT-FREE. "免费项目
CLEAR LV_FLAG."标记是免费订单
IF WA_POITEM-FREE_ITEM IS NOT INITIAL.
LV_FLAG = 'X'."标记是免费订单
ENDIF.
WA_POITEM-RET_ITEM = LS_OUTPUT-RET_ITEM."退货
IF LV_FLAG NE 'X'."非免费订单
WA_POITEM-IR_IND = 'X'. "发票收据标识
ENDIF.
CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
EXPORTING
INPUT = LS_OUTPUT-MEINS
* LANGUAGE = SY-LANGU
IMPORTING
OUTPUT = WA_POITEM-PO_UNIT
EXCEPTIONS
UNIT_NOT_FOUND = 1
OTHERS = 2.
APPEND WA_POITEM TO LT_POITEM.
CLEAR WA_POITEMX.
WA_POITEMX-PO_ITEM = L_ITEMNO.
IF LV_FLAG = 'X'."标记是免费订单
WA_POITEMX-PO_ITEMX = 'X'.
ENDIF.
IF LS_OUTPUT-BEDNR IS NOT INITIAL.
WA_POITEMX-TRACKINGNO = 'X'.
ENDIF.
IF LS_OUTPUT-JHFLG IS NOT INITIAL.
WA_POITEMX-NO_MORE_GR = 'X'.
ENDIF.
IF LS_OUTPUT-FREE IS NOT INITIAL.
WA_POITEMX-FREE_ITEM = 'X'.
ENDIF.
IF LS_OUTPUT-SUPPL_STLOC IS NOT INITIAL. "库存地点
WA_POITEMX-STGE_LOC = 'X'.
ENDIF.
IF LS_OUTPUT-MATNR IS NOT INITIAL.
WA_POITEMX-MATERIAL_LONG = 'X'.
ENDIF.
IF WA_POITEM-SHORT_TEXT IS NOT INITIAL .
WA_POITEMX-SHORT_TEXT = 'X'.
ENDIF.
IF WA_POITEM-PLANT IS NOT INITIAL.
WA_POITEMX-PLANT = 'X'.
ENDIF.
IF WA_POITEM-MATL_GROUP IS NOT INITIAL.
WA_POITEMX-MATL_GROUP = 'X'.
ENDIF.
IF WA_POITEM-QUANTITY IS NOT INITIAL .
WA_POITEMX-QUANTITY = 'X'.
ENDIF.
IF WA_POITEM-PO_UNIT IS NOT INITIAL .
WA_POITEMX-PO_UNIT = 'X'.
ENDIF.
IF WA_POITEM-NET_PRICE IS NOT INITIAL.
WA_POITEMX-NET_PRICE = 'X'.
ENDIF.
IF WA_POITEM-PO_PRICE IS NOT INITIAL.
WA_POITEMX-PO_PRICE = 'X'.
ENDIF.
IF WA_POITEM-PRICE_UNIT IS NOT INITIAL.
WA_POITEMX-PRICE_UNIT = 'X'. "价格单位
ENDIF.
* WA_POITEMX-PRICE_UNIT = 'X'.
IF WA_POITEM-ACCTASSCAT IS NOT INITIAL.
WA_POITEMX-ACCTASSCAT = 'X'.
ENDIF.
IF WA_POITEM-ITEM_CAT IS NOT INITIAL.
WA_POITEMX-ITEM_CAT = 'X'.
ENDIF.
* WA_POITEMX-SHORT_TEXT = 'X'.
IF WA_POITEM-PO_UNIT IS NOT INITIAL.
WA_POITEMX-PO_UNIT = 'X'.
ENDIF.
IF WA_POITEM-OVER_DLV_TOL IS NOT INITIAL.
WA_POITEMX-OVER_DLV_TOL = 'X'.
ENDIF.
IF WA_POITEM-UNDER_DLV_TOL IS NOT INITIAL.
WA_POITEMX-UNDER_DLV_TOL = 'X'. "过量交货限度
ENDIF.
IF WA_POITEM-TAX_CODE IS NOT INITIAL.
WA_POITEMX-TAX_CODE = 'X'. "销售/购买税代码
ENDIF.
IF WA_POITEM-RET_ITEM IS NOT INITIAL. "退货
WA_POITEMX-RET_ITEM = 'X'.
ENDIF.
IF WA_POITEM-ACCTASSCAT IS NOT INITIAL.
WA_POITEMX-ACCTASSCAT = 'X'."科目分配类别
ENDIF.
IF LV_FLAG NE 'X'."非免费订单
WA_POITEMX-IR_IND = 'X'. "发票收据标识
ENDIF.
APPEND WA_POITEMX TO LT_POITEMX.
CLEAR: WA_POITEMX, WA_POITEM.
* IF LS_OUTPUT-KNTTP EQ 'F'.
IF LV_FLAG NE 'X'."非免费订单
WA_POACCOUNT-PO_ITEM = L_ITEMNO.
WA_POACCOUNT-ORDERID = LS_OUTPUT-AUFNR.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = LS_OUTPUT-KOSTL
IMPORTING
OUTPUT = WA_POACCOUNT-COSTCENTER.
"新增总账科目
WA_POACCOUNT-GL_ACCOUNT = LS_OUTPUT-GL_ACCOUNT.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = WA_POACCOUNT-GL_ACCOUNT
IMPORTING
OUTPUT = WA_POACCOUNT-GL_ACCOUNT.
* WA_POACCOUNT-COSTCENTER = LS_OUTPUT-KOSTL.
APPEND WA_POACCOUNT TO LT_POACCOUNT.
WA_POACCOUNTX-PO_ITEM = L_ITEMNO.
IF WA_POACCOUNT-ORDERID IS NOT INITIAL.
WA_POACCOUNTX-ORDERID = 'X'.
ENDIF.
IF WA_POACCOUNT-COSTCENTER IS NOT INITIAL.
WA_POACCOUNTX-COSTCENTER = 'X'.
ENDIF.
IF WA_POACCOUNT-GL_ACCOUNT IS NOT INITIAL.
WA_POACCOUNTX-GL_ACCOUNT = 'X'.
ENDIF.
APPEND WA_POACCOUNTX TO LT_POACCOUNTX.
CLEAR: WA_POACCOUNT, WA_POACCOUNTX.
ENDIF.
* ENDIF.
*
* IF LS_OUTPUT-BSART = 'Z03'.
* WA_POACCOUNT-PO_ITEM = L_ITEMNO.
** WA_POACCOUNT-SERIAL_NO = L_ACC_SN.
* WA_POACCOUNT-QUANTITY = LS_OUTPUT-MENGE.
* WA_POACCOUNT-ORDERID = LS_OUTPUT-AUFNR.
** WA_POACCOUNT-COSTCENTER = LS_OUTPUT-KOSTL.
** WA_POACCOUNT-ASSET_NO = LS_OUTPUT-ASSET.
* WA_POACCOUNT-GL_ACCOUNT = '5001030200'.
* APPEND WA_POACCOUNT TO LT_POACCOUNT.
* CLEAR WA_POACCOUNT.
*
* WA_POACCOUNTX-PO_ITEM = L_ITEMNO.
** WA_POACCOUNTX-SERIAL_NO = L_ACC_SN.
* WA_POACCOUNTX-PO_ITEMX = 'X'.
* WA_POACCOUNTX-SERIAL_NOX = 'X'.
* WA_POACCOUNTX-QUANTITY = 'X'.
* WA_POACCOUNTX-ORDERID = 'X'.
** WA_POACCOUNTX-COSTCENTER = 'X'.
** WA_POACCOUNTX-ASSET_NO = 'X'.
* WA_POACCOUNTX-GL_ACCOUNT = 'X'.
* APPEND WA_POACCOUNTX TO LT_POACCOUNTX.
* CLEAR WA_POACCOUNTX.
*
** L_ACC_SN = L_ACC_SN + 1.
* ENDIF.
WA_POSCHEDULE-PO_ITEM = L_ITEMNO.
WA_POSCHEDULE-SCHED_LINE = 1.
CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL'
EXPORTING
DATE_INTERNAL = LS_OUTPUT-EINDT
IMPORTING
DATE_EXTERNAL = WA_POSCHEDULE-DELIVERY_DATE. "交货日期
WA_POSCHEDULE-STAT_DATE = LS_OUTPUT-SLFDT. "交货日期的相关统计
WA_POSCHEDULE-DEL_DATCAT_EXT = 'D'. "交货类型
WA_POSCHEDULE-QUANTITY = LS_OUTPUT-MENGE. "数量
APPEND WA_POSCHEDULE TO LT_POSCHEDULE.
WA_POSCHEDULEX-PO_ITEM = L_ITEMNO.
IF LV_FLAG = 'X'."标记是免费订单
WA_POSCHEDULEX-PO_ITEMX = 'X'.
ENDIF.
WA_POSCHEDULEX-SCHED_LINE = WA_POSCHEDULE-SCHED_LINE.
WA_POSCHEDULEX-DELIVERY_DATE = 'X'.
IF WA_POSCHEDULE-STAT_DATE IS NOT INITIAL.
WA_POSCHEDULEX-STAT_DATE = 'X'.
ENDIF.
IF WA_POSCHEDULE-DEL_DATCAT_EXT IS NOT INITIAL.
WA_POSCHEDULEX-DEL_DATCAT_EXT = 'X'.
ENDIF.
IF WA_POSCHEDULE-QUANTITY IS NOT INITIAL.
WA_POSCHEDULEX-QUANTITY = 'X'.
ENDIF.
APPEND WA_POSCHEDULEX TO LT_POSCHEDULEX.
CLEAR WA_POSCHEDULEX.
CLEAR WA_POSCHEDULE.
"用于更新长文本
IF LS_OUTPUT-ZBZXX IS NOT INITIAL.
WA_POTEXTITEM-PO_ITEM = L_ITEMNO.
WA_POTEXTITEM-TEXT_ID = 'F01'.
* WA_POTEXTITEM-TEXT_FORM = L_ITEMNO.
WA_POTEXTITEM-TEXT_LINE = LS_OUTPUT-ZBZXX.
APPEND WA_POTEXTITEM TO LT_POTEXTITEM.
CLEAR WA_POTEXTITEM.
ENDIF.
L_TABIX = L_TABIX + 1.
ENDLOOP.
* BREAK-POINT.
SET UPDATE TASK LOCAL.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
POHEADER = WA_POHEADER
POHEADERX = WA_POHEADERX
* POADDRVENDOR =
* TESTRUN =
NO_PRICE_FROM_PO = 'X'
IMPORTING
EXPPURCHASEORDER = PO_NO
* EXPHEADER =
* EXPPOEXPIMPHEADER =
TABLES
RETURN = LT_RETURN
POITEM = LT_POITEM
POITEMX = LT_POITEMX
* POADDRDELIVERY =
POSCHEDULE = LT_POSCHEDULE
POSCHEDULEX = LT_POSCHEDULEX
* POSERVICES = LT_POSERVICE
* POSRVACCESSVALUES = LT_POSRVVALUE
* polimits = lt_polimits
POACCOUNT = LT_POACCOUNT
* POACCOUNTPROFITSEGMENT =
POACCOUNTX = LT_POACCOUNTX
* POCONDHEADER =
* POCONDHEADERX =
* POCOND = LT_POCOND
* POCONDX = LT_POCONDX.
POTEXTITEM = LT_POTEXTITEM.
IF PO_NO IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'
* IMPORTING
* RETURN =
.
DATA: L_MSG TYPE BAPIRET2-MESSAGE.
DATA: L_RESULT TYPE BAPIRET2-MESSAGE.
LOOP AT LT_RETURN INTO WA_RETURN WHERE TYPE EQ 'E' OR TYPE EQ 'A'.
MESSAGE ID WA_RETURN-ID TYPE WA_RETURN-TYPE NUMBER WA_RETURN-NUMBER
INTO L_MSG
WITH WA_RETURN-MESSAGE_V1 WA_RETURN-MESSAGE_V2 WA_RETURN-MESSAGE_V3 WA_RETURN-MESSAGE_V4.
IF L_RESULT IS INITIAL.
L_RESULT = L_MSG.
ELSE.
CONCATENATE L_RESULT L_MSG INTO L_RESULT SEPARATED BY ';'.
ENDIF.
ENDLOOP.
LOOP AT GT_OUTPUT ASSIGNING <FS_OUTPUT> WHERE EBELN = WA_OUTPUT-EBELN.
<FS_OUTPUT>-STATU = 'E'.
<FS_OUTPUT>-MSG = L_RESULT.
<FS_OUTPUT>-CHK_LIGHTS = 1.
ENDLOOP.
CLEAR: L_MSG, L_RESULT.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'
* IMPORTING
* RETURN =
.
IF WA_OUTPUT-BSART EQ 'ZPO1'.
CALL FUNCTION 'BAPI_PO_RELEASE'
EXPORTING
PURCHASEORDER = PO_NO
PO_REL_CODE = '10'
* USE_EXCEPTIONS = 'X'
* NO_COMMIT = ' '
* IMPORTING
* REL_STATUS_NEW =
* REL_INDICATOR_NEW =
* RET_CODE =
TABLES
RETURN = LT_RETURN1
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'
* IMPORTING
* RETURN =
.
ENDIF.
LOOP AT GT_OUTPUT ASSIGNING <FS_OUTPUT> WHERE EBELN = WA_OUTPUT-EBELN.
<FS_OUTPUT>-STATU = 'S'.
<FS_OUTPUT>-MSG = '采购订单创建成功!'.
<FS_OUTPUT>-EBELN = PO_NO.
<FS_OUTPUT>-CHK_LIGHTS = 3.
* PERFORM FRM_CERATE_TEXT USING <FS_OUTPUT>-EBELN <FS_OUTPUT>-EBELP 'F01' 'EKPO' CHANGING <FS_OUTPUT>-ZBZXX. "备注
IF SY-SUBRC EQ 0.
COMMIT WORK AND WAIT.
ENDIF.
ENDLOOP.
ENDIF.
CLEAR: LT_RETURN,
LT_POITEM,
LT_POITEMX,
LT_POSCHEDULE,
LT_POSCHEDULEX,
WA_POHEADER,
WA_POHEADERX,
WA_POTEXTITEM,
LT_POSRVVALUE,
LT_POLIMITS,
LT_POSERVICE,
LT_POACCOUNT,
LT_POACCOUNTX,
LT_POTEXTITEM.
ENDLOOP.
MESSAGE '导入完成!' TYPE 'S'.
ENDFORM.