MM 批量创建采购申请

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帮助并获取本地上传文件

[@more@]

************************************************************
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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值