实现SE16的批量数据录入功能,为了方便起见 只添加了CARRID,CONNID两个字段,可直接使用输入数据为TXT文本格式。
*&---------------------------------------------------------------------*
*& Report Z_VERN_BDC_SPFLI
*&
*& 创建日期 程序员 创建请求号 业务顾问
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT Z_VERN_BDC_SPFLI.
*----------------------------------------------------------------------*
* Global Types ,Data Element, Statements,Ranges, Constants
*----------------------------------------------------------------------*
*-----------------------------------------------------------------------
* Tables
*-----------------------------------------------------------------------
TABLES:SPFLI.
*-----------------------------------------------------------------------
* Internal Tables and Work Areas
*-----------------------------------------------------------------------
DATA:BEGIN OF GT_SPFLI OCCURS 0,
CARRID LIKE SPFLI-CARRID,
CONNID LIKE SPFLI-CONNID,
END OF GT_SPFLI.
DATA:BEGIN OF GT_EXISTS OCCURS 0. ”数据存在处理内表
INCLUDE STRUCTURE GT_SPFLI.
DATA:END OF GT_EXISTS.
DATA:BEGIN OF GT_SUBMIT OCCURS 0. "添加成功处理内表
INCLUDE STRUCTURE GT_SPFLI.
DATA:END OF GT_SUBMIT.
DATA:BEGIN OF GT_BDCDATA OCCURS 0.
INCLUDE STRUCTURE BDCDATA.
DATA:END OF GT_BDCDATA.
DATA:BEGIN OF GT_MESSTAB OCCURS 0.
INCLUDE STRUCTURE BDCMSGCOLL.
DATA:END OF GT_MESSTAB.
DATA:GT_MESG LIKE MESG OCCURS 0 WITH HEADER LINE .
*-----------------------------------------------------------------------
* Variables
*-----------------------------------------------------------------------
DATA:GV_GROUP(12) TYPE C VALUE 'TEST'.
DATA:GV_USER(12) TYPE C.
DATA:GV_KEEP(1) TYPE C VALUE 'X'.
DATA:GV_HOLDDATE LIKE SY-DATUM.
DATA:GV_FLAG(1) TYPE C.
DATA:GV_LIN TYPE I.
DATA:GV_C170(170).
DATA:GV_C_ULINE(50) VALUE '__________________________________________'.
*---------------------------------------------------------------------*
* Selection Screen *
*---------------------------------------------------------------------*
SELECTION-SCREEN COMMENT 10(70) TEXT-001.
PARAMETERS:IN_FILE TYPE STRING DEFAULT 'C:\TEMP\*.txt'.
PARAMETERS:P_TABLE TYPE STRING DEFAULT 'SPFLI'.
SELECTION-SCREEN SKIP 1 .
*-----------------------------------------------------------------------
* At Selection Screen
*-----------------------------------------------------------------------
AT SELECTION-SCREEN ON VALUE-REQUEST FOR IN_FILE.
CALL FUNCTION 'TB_LIMIT_WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = '*.txt'
DEF_PATH = 'C:\DATA'
MASK = 'All Files,*.*,Text Files,*.txt;*.doc'
MODE = 'O'
TITLE = '选择要导入的数据文件'
IMPORTING
FILENAME = IN_FILE
EXCEPTIONS
SELECTION_CANCEL = 1
SELECTION_ERROR = 2
OTHERS = 3.
*-------------------------------------------------------------------*
* Main Program *
*-------------------------------------------------------------------*
*--------- START-OF-SELECTION ----------
START-OF-SELECTION.
REFRESH GT_SPFLI.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = IN_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = GT_SPFLI.
IF SY-SUBRC <> 0.
PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'
' Unable to upload input file'
IN_FILE ' ' ' '.
ENDIF.
PERFORM OPEN_GROUP.
PERFORM FILL_BDC_DATA.
PERFORM CLOSE_GROUP.
PERFORM WRITE_REPORT.
*&---------------------------------------------------------------------*
*& Form OPEN_GROUP
*&---------------------------------------------------------------------*
* create batchinput session
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM OPEN_GROUP . "Session 方法
GV_USER = SY-UNAME.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = GV_GROUP
HOLDDATE = GV_HOLDDATE
KEEP = GV_KEEP
USER = GV_USER.
ENDFORM. " OPEN_GROUP
*&---------------------------------------------------------------------*
*& Form FILL_BDC_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM FILL_BDC_DATA .
CLEAR GT_SPFLI.
LOOP AT GT_SPFLI.
CLEAR GT_MESSTAB.
CLEAR GT_BDCDATA.
REFRESH GT_BDCDATA.
REFRESH GT_MESSTAB.
GV_FLAG = ' '.
SELECT SINGLE * FROM SPFLI WHERE CARRID = GT_SPFLI-CARRID
AND CONNID = GT_SPFLI-CONNID.
IF SY-SUBRC = 0 .
CLEAR GT_EXISTS.
MOVE-CORRESPONDING GT_SPFLI TO GT_EXISTS.
APPEND GT_EXISTS.
GV_FLAG = 'X'.
ENDIF.
IF GV_FLAG <> 'X'.
PERFORM BDC_DYNPRO USING 'SAPLSETB' '0230'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'DATABROWSE-TABLENAME'.
PERFORM BDC_FIELD USING 'DATABROWSE-TABLENAME'
P_TABLE.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ANLE'.
PERFORM BDC_DYNPRO USING '/1BCDWB/DBSPFLI' '0101'.
PERFORM BDC_FIELD USING 'BDC_CURSOR' 'SPFLI-CARRID'.
PERFORM BDC_FIELD USING 'SPFLI-CARRID'
GT_SPFLI-CARRID.
PERFORM BDC_FIELD USING 'SPFLI-CONNID'
GT_SPFLI-CONNID.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=SAVE'.
PERFORM CALL_TRANSACTION USING 'SE16'. "CALL TRANSACTION 方法 不需要BDC_OPEN_GROUP方法
*PERFORM INSERT_DATA."SESSION 方法须创建GROUP USER
MOVE-CORRESPONDING GT_SPFLI TO GT_SUBMIT.
APPEND GT_SUBMIT.
ENDIF.
ENDLOOP.
ENDFORM. " FILL_BDC_DATA
*&---------------------------------------------------------------------*
*& Form CLOSE_GROUP
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CLOSE_GROUP .
CALL FUNCTION 'BDC_CLOSE_GROUP'
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM. " CLOSE_GROUP
*&---------------------------------------------------------------------*
*& Form WRITE_REPORT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM WRITE_REPORT .
DESCRIBE TABLE GT_EXISTS LINES GV_LIN.
IF GV_LIN >= 1.
PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'
'The following Internal Carrid already exist:' ' ' ' ' ' '.
LOOP AT GT_EXISTS.
PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'
GT_EXISTS-CARRID GT_EXISTS-CONNID '' ''.
ENDLOOP.
GV_LIN = 0.
ENDIF.
DESCRIBE TABLE GT_SUBMIT LINES GV_LIN.
IF GV_LIN >= 1 .
PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'
'BDC was created for the following Internal Orders.'
'' '' ''.
LOOP AT GT_SUBMIT.
PERFORM COLLECT_MESSAGES USING 'Z3' 'I' '000'
GT_SUBMIT-CARRID GT_SUBMIT-CONNID ' ' ' '.
ENDLOOP.
ENDIF.
ENDFORM. " WRITE_REPORT
*&---------------------------------------------------------------------*
*& Form COLLECT_MESSAGES
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0211 text
* -->P_0212 text
* -->P_0213 text
* -->P_0214 text
* -->P_IN_FILE text
*----------------------------------------------------------------------*
FORM COLLECT_MESSAGES USING P_MSGID
P_MSGTY
P_MSGNR
P_MSGV1
P_MSGV2
P_MSGV3
P_MSGV4.
CLEAR GT_MESG.
GT_MESG-ARBGB = P_MSGID.
GT_MESG-MSGTY = P_MSGTY.
GT_MESG-TXTNR = P_MSGNR.
GT_MESG-MSGV1+0(2) = '@ '.
GT_MESG-MSGV1+2(48) = P_MSGV1.
GT_MESG-MSGV2 = P_MSGV2.
GT_MESG-MSGV3 = P_MSGV3.
GT_MESG-MSGV4 = P_MSGV4.
APPEND GT_MESG.
CONCATENATE P_MSGV1 P_MSGV2 P_MSGV3 P_MSGV4
INTO GV_C170 SEPARATED BY SPACE.
WRITE:/ GV_C170.
ENDFORM. " COLLECT_MESSAGES
*&---------------------------------------------------------------------*
*& Form CALL_TRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CALL_TRANSACTION USING TCODE.
CALL TRANSACTION 'SE16' USING GT_BDCDATA
MODE 'N'
UPDATE 'A'
MESSAGES INTO GT_MESSTAB.
ENDFORM. " CALL_TRANSACTION
*&---------------------------------------------------------------------*
*& Form INSERT_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM INSERT_DATA .
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'SE16'
TABLES
DYNPROTAB = GT_BDCDATA.
ENDFORM. " INSERT_DATA
*&---------------------------------------------------------------------*
*& Form BDC_DYNPRO
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0292 text
* -->P_0293 text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM
DYNPRO.
CLEAR GT_BDCDATA.
GT_BDCDATA-PROGRAM = PROGRAM.
GT_BDCDATA-DYNPRO = DYNPRO.
GT_BDCDATA-DYNBEGIN = 'X'.
APPEND GT_BDCDATA.
ENDFORM. " BDC_DYNPRO
*&---------------------------------------------------------------------*
*& Form BDC_FIELD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0297 text
* -->P_0298 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FNAM
FVAL.
CLEAR GT_BDCDATA.
GT_BDCDATA-FNAM = FNAM.
GT_BDCDATA-FVAL = FVAL.
APPEND GT_BDCDATA.
ENDFORM. " BDC_FIELD
阅读(797) | 评论(0) | 转发(0) |