MM 批量创建采购申请
测试函数:BAPI_REQUISITION_CREATE
测试实现:通过BAPI函数创建非服务PR,并用下载模板上传数据实现批量创建
测试参数:
IMP:
SKIP_ITEMS_WITH_ERROR 运行错误行项目自动跳出
AUTOMATIC_SOURCE
EXP:
NUMBER EBAN-BANFN (PR NO)
TABLES:
REQUISITION_ITEMS EBAN (PR主数据)
REQUISITION_ACCOUNT_ASSIGNMENT EBKN (PR账户数据)
REQUISITION_ITEM_TEXT (PR行项目文本)
REQUISITION_LIMITS ESUC (PR限制数据)
REQUISITION_CONTRACT_LIMITS (PR合同限制数据)
REQUISITION_SERVICES ESLL (PR服务数据)
REQUISITION_SRV_ACCASS_VALUES (PR服务账户数据)
RETURN
REQUISITION_SERVICES_TEXT (PR服务行文本)
REQUISITION_ADDRDELIVERY (PR地址数据)
EXTENSIONIN
测试程序:
1 只激活ITEM 和ITEM TEXT两部分创建简单的PR
2 运用GUI_DOWNLOAD和GUI_UPLOAD函数下载模板批量上传准备数据
3 运用WS_FILENAME_GET函数可添加文件路径F4帮助并获取本地上传文件
************************************************************
TABLES: EBAN,
EBKN.
*数据内表
DATA: BEGIN OF TAB_G_HEADER OCCURS 0,
BANFN(10) TYPE C, "采购申请号
BSART(8) TYPE C, "凭证类型
AFNAM(6) TYPE C, "申请者
MATNR(4) TYPE C, "物料
MENGE(13) TYPE C, "数量
EEIND(8) TYPE C, "交货日期
WERKS(4) TYPE C, "工厂
EKORG(8) TYPE C, "采购组织
EKGRP(6) TYPE C, "采购组
B01(8) TYPE C, "表头文本
END OF TAB_G_HEADER.
DATA: BEGIN OF TAB_G_ITEM OCCURS 0,
BANFN TYPE STRING, "采购申请号
BSART TYPE STRING, "凭证类型
AFNAM TYPE STRING, "申请者
MATNR TYPE STRING, "物料
MENGE TYPE STRING, "数量
EEIND TYPE STRING, "交货日期
WERKS TYPE STRING, "工厂
EKORG TYPE STRING, "采购组织
EKGRP TYPE STRING, "采购组
B01 TYPE STRING, "表头文本
END OF TAB_G_ITEM.
*BAPI定义
DATA: TAB_G_PRITEM TYPE TABLE OF BAPIEBANC WITH HEADER LINE,
TAB_G_PRTEXT TYPE TABLE OF BAPIEBANTX WITH HEADER LINE,
TAB_G_RETURN TYPE TABLE OF BAPIRETURN WITH HEADER LINE.
DATA: G_FILENAME TYPE STRING,
G_BNFPO TYPE BNFPO,
G_BANFN TYPE BAPIEBANC-PREQ_NO,
G_MESSAGE(200).
DATA: BEGIN OF TAB_G_MESSAGE OCCURS 0,
TEXT(200),
END OF TAB_G_MESSAGE.
*---------------------------------------------------------------------*
* SELECTION-SCREEN
*---------------------------------------------------------------------*
SELECTION-SCREEN BEGIN OF BLOCK A WITH FRAME TITLE TEXT-001.
PARAMETERS: P_FILE(128),
P_RADIO1 RADIOBUTTON GROUP A,
P_RADIO2 RADIOBUTTON GROUP A.
SELECTION-SCREEN END OF BLOCK A.
*---------------------------------------------------------------------*
* SELECT-OF-SELECTION
*---------------------------------------------------------------------*
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
PERFORM GET_FILE.
START-OF-SELECTION.
G_FILENAME = P_FILE.
IF P_RADIO1 = 'X'.
PERFORM FRM_DOWNLOAD.
ELSE.
PERFORM FRM_UPLOAD.
PERFORM FRM_CREATE_PR.
PERFORM FRM_WRITE_OUT.
ENDIF.
*&---------------------------------------------------------------------*
*& Form GET_FILE
*&---------------------------------------------------------------------*
FORM GET_FILE.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = P_FILE
MASK = ',*.xls,*.XLS.'
MODE = 'O'
TITLE = 'File Name'
IMPORTING
FILENAME = P_FILE
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM. " GET_FILE
*&---------------------------------------------------------------------*
*& Form FRM_DOWNLOAD
*&---------------------------------------------------------------------*
FORM FRM_DOWNLOAD.
CLEAR: TAB_G_HEADER,
TAB_G_HEADER[].
TAB_G_HEADER-BANFN = '采购申请号'.
TAB_G_HEADER-BSART = '凭证类型'.
TAB_G_HEADER-AFNAM = '申请者'.
TAB_G_HEADER-MATNR = '物料'.
TAB_G_HEADER-WERKS = '工厂'.
TAB_G_HEADER-MENGE = '数量'.
TAB_G_HEADER-EEIND = '交货日期'.
TAB_G_HEADER-EKORG = '采购组织'.
TAB_G_HEADER-EKGRP = '采购组'.
TAB_G_HEADER-B01 = '表头文本'.
APPEND TAB_G_HEADER.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = G_FILENAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = TAB_G_HEADER[]
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
ENDFORM. " FRM_DOWNLOAD
*&---------------------------------------------------------------------*
*& Form FRM_UPLOAD
*&---------------------------------------------------------------------*
FORM FRM_UPLOAD.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = G_FILENAME
FILETYPE = 'DAT'
TABLES
DATA_TAB = TAB_G_ITEM
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7
BAD_DATA_FORMAT = 8
HEADER_NOT_ALLOWED = 9
SEPARATOR_NOT_ALLOWED = 10
HEADER_TOO_LONG = 11
UNKNOWN_DP_ERROR = 12
ACCESS_DENIED = 13
DP_OUT_OF_MEMORY = 14
DISK_FULL = 15
DP_TIMEOUT = 16
OTHERS = 17.
IF SY-SUBRC <> 0.
CASE SY-SUBRC.
WHEN 1. MESSAGE 'FILE_OPEN_ERROR' TYPE 'E'.
WHEN 2. MESSAGE 'FILE_READ_ERROR' TYPE 'E'.
WHEN 3. MESSAGE 'NO_BATCH' TYPE 'E'.
WHEN 4. MESSAGE 'GUI_REFUSE_FILETRANSFER' TYPE 'E'.
WHEN 5. MESSAGE 'INVALID_TYPE' TYPE 'E'.
WHEN 6. MESSAGE 'NO_AUTHORITY' TYPE 'E'.
WHEN 7. MESSAGE 'UNKNOWN_ERROR' TYPE 'E'.
WHEN 8. MESSAGE 'BAD_DATA_FORMAT' TYPE 'E'.
WHEN 9. MESSAGE 'HEADER_NOT_ALLOWED' TYPE 'E'.
WHEN 10.MESSAGE 'SEPARATOR_NOT_ALLOWED' TYPE 'E'.
WHEN 11.MESSAGE 'HEADER_TOO_LONG' TYPE 'E'.
WHEN 12.MESSAGE 'UNKNOWN_DP_ERROR' TYPE 'E'.
WHEN 13.MESSAGE 'ACCESS_DENIED' TYPE 'E'.
WHEN 14.MESSAGE 'DP_OUT_OF_MEMORY' TYPE 'E'.
WHEN 15.MESSAGE 'DISK_FULL' TYPE 'E'.
WHEN 16.MESSAGE 'DP_TIMEOUT' TYPE 'E'.
WHEN 17.MESSAGE 'OTHERS' TYPE 'E'.
ENDCASE.
ENDIF.
DELETE TAB_G_ITEM INDEX 1.
SORT TAB_G_ITEM BY BANFN.
ENDFORM. " FRM_UPLOAD
*&---------------------------------------------------------------------*
*& Form FRM_CREATE_PR
*&---------------------------------------------------------------------*
FORM FRM_CREATE_PR.
LOOP AT TAB_G_ITEM.
G_BNFPO = G_BNFPO + 1.
CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
EXPORTING
INPUT = G_BNFPO
IMPORTING
OUTPUT = G_BNFPO.
TAB_G_PRITEM-DOC_TYPE = TAB_G_ITEM-BSART. "凭证类型
TAB_G_PRITEM-PREQ_ITEM = G_BNFPO. "项目编号
TAB_G_PRITEM-PREQ_NAME = TAB_G_ITEM-AFNAM. "申请者
TAB_G_PRITEM-MATERIAL = TAB_G_ITEM-MATNR. "物料
TAB_G_PRITEM-QUANTITY = TAB_G_ITEM-MENGE. "数量
TAB_G_PRITEM-DELIV_DATE = TAB_G_ITEM-EEIND. "交货日期
TAB_G_PRITEM-PLANT = TAB_G_ITEM-WERKS. "工厂
TAB_G_PRITEM-PURCH_ORG = TAB_G_ITEM-EKORG. "采购组织
TAB_G_PRITEM-PUR_GROUP = TAB_G_ITEM-EKGRP. "采购组
APPEND TAB_G_PRITEM.
TAB_G_PRTEXT-PREQ_ITEM = G_BNFPO.
TAB_G_PRTEXT-TEXT_ID = 'B01'.
TAB_G_PRTEXT-TEXT_LINE = TAB_G_ITEM-B01.
APPEND TAB_G_PRTEXT.
AT END OF BANFN.
CALL FUNCTION 'BAPI_REQUISITION_CRE
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22764754/viewspace-1028178/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22764754/viewspace-1028178/