Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92203
  • 博文数量: 39
  • 博客积分: 2000
  • 博客等级: 大尉
  • 技术积分: 420
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-30 17:39
文章分类

全部博文(39)

文章存档

2011年(1)

2009年(21)

2008年(17)

我的朋友

分类:

2008-11-04 14:15:23

实现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) |
给主人留下些什么吧!~~