Você está na página 1de 8

BDC Example: Using Table Control in BDC

Among beginners, using table control in BDC is always a puzzle.


Following is a sample code of handling table control in BDC.
REPORT Y730_BDC5 .
*HANDLING TABLE CONTROL IN BDC
DATA : BEGIN OF IT_DUMMY OCCURS 0,
DUMMY(100) TYPE C,
END OF IT_DUMMY.
DATA : BEGIN OF IT_XK01 OCCURS 0,
LIFNR(10) TYPE C,
BUKRS(4) TYPE C,
EKORG(4) TYPE C,
KTOKK(4) TYPE C,
NAME1(30) TYPE C,
SORTL(10) TYPE C,
LAND1(3) TYPE C,
SPRAS(2) TYPE C,
AKONT(6) TYPE C,
FDGRV(2) TYPE C,
WAERS(3) TYPE C,
END OF IT_XK01,
BEGIN OF IT_BANK OCCURS 0,
BANKS(3) TYPE C,
BANKL(10) TYPE C,
BANKN(10) TYPE C,
KOINH(30) TYPE C,
LIFNR(10) TYPE C,
END OF IT_BANK.
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE,
IT_BDCMSGCOLL LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
CALL FUNCTION 'WS_UPLOAD'
EXPORTING
FILENAME
FILETYPE
TABLES
DATA_TAB

= 'C:\VENDOR.TXT'
= 'ASC'
= IT_DUMMY.

LOOP AT IT_DUMMY.
IF IT_DUMMY-DUMMY+0(2) = '11'.
IT_XK01-LIFNR = IT_DUMMY-DUMMY+2(10).
IT_XK01-BUKRS = IT_DUMMY-DUMMY+12(4).
IT_XK01-EKORG = IT_DUMMY-DUMMY+16(4).
IT_XK01-KTOKK = IT_DUMMY-DUMMY+20(4).
IT_XK01-NAME1 = IT_DUMMY-DUMMY+24(30).
IT_XK01-SORTL = IT_DUMMY-DUMMY+54(10).
IT_XK01-LAND1 = IT_DUMMY-DUMMY+64(3).
IT_XK01-SPRAS = IT_DUMMY-DUMMY+67(2).
IT_XK01-AKONT = IT_DUMMY-DUMMY+69(6).
IT_XK01-FDGRV = IT_DUMMY-DUMMY+75(2).
IT_XK01-WAERS = IT_DUMMY-DUMMY+77(3).
APPEND IT_XK01.
ELSE.
IT_BANK-BANKS = IT_DUMMY-DUMMY+2(3).
IT_BANK-BANKL = IT_DUMMY-DUMMY+5(10).
IT_BANK-BANKN = IT_DUMMY-DUMMY+15(10).
IT_BANK-KOINH = IT_DUMMY-DUMMY+25(30).
IT_BANK-LIFNR = IT_DUMMY-DUMMY+55(10).

APPEND IT_BANK.
ENDIF.
ENDLOOP.
LOOP AT
REFRESH
perform
perform

IT_XK01.
IT_BDCDATA.
bdc_dynpro
bdc_field

perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field
perform bdc_dynpro
perform bdc_field
perform bdc_field

using 'SAPMF02K' '0100'.


using 'BDC_CURSOR'
'RF02K-REF_LIFNR'.
using 'BDC_OKCODE'
'/00'.
using 'RF02K-LIFNR'
IT_XK01-LIFNR.
using 'RF02K-BUKRS'
IT_XK01-BUKRS.
using 'RF02K-EKORG'
IT_XK01-EKORG.
using 'RF02K-KTOKK'
IT_XK01-KTOKK.
using 'SAPMF02K' '0110'.
using 'BDC_CURSOR'
'LFA1-TELX1'.
using 'BDC_OKCODE'
'/00'.
using 'LFA1-NAME1'
IT_XK01-NAME1.
using 'LFA1-SORTL'
IT_XK01-SORTL.
using 'LFA1-LAND1'
IT_XK01-LAND1.
using 'LFA1-SPRAS'
IT_XK01-SPRAS.
using 'SAPMF02K' '0120'.
using 'BDC_CURSOR'
'LFA1-KUNNR'.
using 'BDC_OKCODE'
'/00'.
using 'SAPMF02K' '0130'.
using 'BDC_CURSOR'
'LFBK-KOINH(02)'.
using 'BDC_OKCODE'
'=ENTR'.

DATA : FNAM(20) TYPE C,


IDX
TYPE C.
MOVE 1 TO IDX.
LOOP AT IT_BANK WHERE LIFNR = IT_XK01-LIFNR.
CONCATENATE 'LFBK-BANKS(' IDX ')' INTO FNAM.
perform bdc_field
using FNAM
IT_BANK-BANKS.
CONCATENATE 'LFBK-BANKL(' IDX ')' INTO FNAM.
perform bdc_field
using FNAM
IT_BANK-BANKL.
CONCATENATE 'LFBK-BANKN(' IDX ')' INTO FNAM.
perform bdc_field
using FNAM
IT_BANK-BANKN.
CONCATENATE 'LFBK-KOINH(' IDX ')' INTO FNAM.
perform bdc_field
using FNAM

IT_BANK-KOINH.
IDX = IDX + 1.
ENDLOOP.
perform bdc_dynpro
perform bdc_field

using 'SAPMF02K' '0130'.


using 'BDC_CURSOR'
'LFBK-BANKS(01)'.
perform bdc_field
using 'BDC_OKCODE'
'=ENTR'.
perform bdc_dynpro
using 'SAPMF02K' '0210'.
perform bdc_field
using 'BDC_CURSOR'
'LFB1-FDGRV'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_field
using 'LFB1-AKONT'
IT_XK01-AKONT.
perform bdc_field
using 'LFB1-FDGRV'
IT_XK01-FDGRV.
perform bdc_dynpro
using 'SAPMF02K' '0215'.
perform bdc_field
using 'BDC_CURSOR'
'LFB1-ZTERM'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro
using 'SAPMF02K' '0220'.
perform bdc_field
using 'BDC_CURSOR'
'LFB5-MAHNA'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro
using 'SAPMF02K' '0310'.
perform bdc_field
using 'BDC_CURSOR'
'LFM1-WAERS'.
perform bdc_field
using 'BDC_OKCODE'
'/00'.
perform bdc_field
using 'LFM1-WAERS'
IT_XK01-WAERS.
perform bdc_dynpro
using 'SAPMF02K' '0320'.
perform bdc_field
using 'BDC_CURSOR'
'WYT3-PARVW(01)'.
perform bdc_field
using 'BDC_OKCODE'
'=ENTR'.
perform bdc_dynpro
using 'SAPLSPO1' '0300'.
perform bdc_field
using 'BDC_OKCODE'
'=YES'.
CALL TRANSACTION 'XK01' USING IT_BDCDATA
MODE 'A'
UPDATE 'S'
MESSAGES INTO IT_BDCMSGCOLL.
ENDLOOP.
FORM BDC_DYNPRO USING PROG SCR.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROG.
IT_BDCDATA-DYNPRO = SCR.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FNAM.

IT_BDCDATA-FVAL = FVAL.
APPEND IT_BDCDATA.
ENDFORM.

REPORT ZML_BDC_SO
NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE BDCRECX1.
*******************************************
*file format
********************************************
*HOR 10001000
*S2130
*IM-17
100012
*IM-18
100023
*I100-100
100040
*# " one record completed
************************************************
*
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
PARAMETERS :
P_FILE TYPE LOCALFILE.
SELECTION-SCREEN END OF BLOCK B1.
*
TYPES : BEGIN OF T_FILE,
*
LINE(150) TYPE C,
*
END
OF T_FILE,
TT_FILE TYPE STANDARD TABLE OF T_FILE.
*
DATA : LW_FILE TYPE T_FILE,
LT_FILE TYPE TT_FILE,
V_FLAG
TYPE C,
*
LW_BDCDATA TYPE BDCDATA,
LT_BDCDATA TYPE STANDARD TABLE OF BDCDATA.
*
*************************************
* AT SLECTION SCREEN
*************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
*
CALL FUNCTION 'F4_FILENAME'
EXPORTING
PROGRAM_NAME = SYST-CPROG
DYNPRO_NUMBER = SYST-DYNNR
FIELD_NAME
= ' '
IMPORTING
FILE_NAME
= P_FILE.
*
************************************************
* start-of-selection
***********************************************
START-OF-SELECTION.
PERFORM
FETCH_DATA
USING
P_FILE
CHANGING LT_FILE.
PERFORM OPEN_GROUP.

*
* for header data
*
LOOP AT LT_FILE INTO LW_FILE.
CASE LW_FILE-LINE+0(1).
WHEN 'H'.
PERFORM BDC_DYNPRO
USING 'SAPMV45A' '0101'.
PERFORM BDC_FIELD
USING 'BDC_CURSOR'
'VBAK-AUART'.
PERFORM BDC_FIELD
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD
USING 'VBAK-AUART'
LW_FILE-LINE+1(4).
PERFORM BDC_FIELD
USING 'VBAK-VKORG'
LW_FILE-LINE+5(4).
PERFORM BDC_FIELD
USING 'VBAK-VTWEG'
LW_FILE-LINE+9(2).
PERFORM BDC_FIELD
USING 'VBAK-SPART'
LW_FILE-LINE+11(2).
*
*for customer data
*
WHEN 'S'.
PERFORM BDC_DYNPRO
USING 'SAPMV45A' '4001'.
PERFORM BDC_FIELD
USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD
USING 'BDC_CURSOR'
'KUAGV-KUNNR'.
PERFORM BDC_FIELD
USING 'KUAGV-KUNNR'
LW_FILE-LINE+1(10).
PERFORM BDC_FIELD
USING 'RV45A-KETDAT'
'12.02.2010'.
PERFORM BDC_FIELD
USING 'RV45A-KPRGBZ'
'D'.
PERFORM BDC_FIELD
USING 'VBKD-PRSDT'
'03.02.2010'.
* for first item
WHEN 'I'.
PERFORM BDC_DYNPRO
PERFORM BDC_FIELD
CASE V_FLAG.
WHEN SPACE.
PERFORM BDC_FIELD
PERFORM BDC_FIELD
PERFORM BDC_FIELD
V_FLAG = 'X'.
WHEN 'X'.
PERFORM BDC_FIELD
PERFORM BDC_FIELD
PERFORM BDC_FIELD
ENDCASE.
*

USING 'SAPMV45A' '4001'.


USING 'BDC_OKCODE'
'/00'.
USING 'RV45A-MABNR(01)'
LW_FILE-LINE+1(18).
USING 'RV45A-KWMENG(01)'
LW_FILE-LINE+23(13).
USING 'VBAP-WERKS(01)'
LW_FILE-LINE+19(4).
USING 'RV45A-MABNR(02)'
LW_FILE-LINE+1(18).
USING 'RV45A-KWMENG(02)'
LW_FILE-LINE+23(13).
USING 'VBAP-WERKS(02)'
LW_FILE-LINE+19(4).

**
*before going to save
WHEN '#'.
PERFORM BDC_DYNPRO
PERFORM BDC_FIELD

USING 'SAPMV45A' '4001'.


USING 'BDC_OKCODE'
'=SICH'. " this is "okcode" for save butt

on
CLEAR V_FLAG.
*
*now save
*
PERFORM BDC_TRANSACTION USING 'VA01'.
ENDCASE.
ENDLOOP.
PERFORM CLOSE_GROUP.
*&---------------------------------------------------------------------*
*&
Form FETCH_DATA
*&---------------------------------------------------------------------*
*
text
*----------------------------------------------------------------------*
*
-->P_P_FILE text
*
<--P_LT_FILE text
*----------------------------------------------------------------------*
FORM FETCH_DATA USING
P_FILE
CHANGING LT_FILE TYPE TT_FILE.
*
REFRESH LT_FILE.
*
DATA : V_FILE TYPE STRING.
*
MOVE P_FILE TO V_FILE.
*
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME
= V_FILE
FILETYPE
= 'ASC'
TABLES
DATA_TAB
= LT_FILE
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.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO


WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
ENDFORM.

" FETCH_DATA

**&--------------------------------------------------------------------*
**&
Form BDC_DYNPRO
**&--------------------------------------------------------------------*
**
text
**---------------------------------------------------------------------*
**
-->PROGRAM
text
**
-->DYNNR
text
**---------------------------------------------------------------------*
*FORM BDC_DYNPRO USING PROGRAM
*
DYNNR.
* LW_BDCDATA-PROGRAM
= PROGRAM.
* LW_BDCDATA-DYNNR
= DYNNR.
* LW_BDCDATA-DYNBEGIN = 'X'.
* APPEND LW_BDCDATA TO LT_BDCDATA.
* CLEAR LW_BDCDATA.
*
*
*ENDFORM.
" BDC_DYNPRO
*
*
**&--------------------------------------------------------------------*
**&
Form BDC_FIELD
**&--------------------------------------------------------------------*
**
text
**---------------------------------------------------------------------*
**
-->FNAM
text
**
-->FVAL
text
**---------------------------------------------------------------------*
*FORM BDC_FIELD USING FNAM
*
FVAL.
* LW_BDCDATA-FNAM = FNAM.
* LW_BDCDATA-FVAL = FVAL.
* APPEND LW_BDCDATA TO LT_BDCDATA.
* CLEAR LW_BDCDATA.
*ENDFORM.
" BDC_FIELD
*
**&--------------------------------------------------------------------*
**&
Form OPEN_GROUP
**&--------------------------------------------------------------------*
**
text
**---------------------------------------------------------------------*
*FORM OPEN_GROUP .
* CALL FUNCTION 'BDC_OPEN_GROUP'
*
EXPORTING
*
CLIENT
= SY-MANDT
*
GROUP
= FILLER12 " session name
*
KEEP
= FILLER1
" always x
*
USER
= SY-UNAME
*
EXCEPTIONS
*
CLIENT_INVALID
= 1
*
DESTINATION_INVALID = 2
*
GROUP_INVALID
= 3
*
GROUP_IS_LOCKED
= 4
*
HOLDDATE_INVALID
= 5

*
INTERNAL_ERROR
= 6
*
QUEUE_ERROR
= 7
*
RUNNING
= 8
*
SYSTEM_LOCK_ERROR = 9
*
USER_INVALID
= 10
*
OTHERS
= 11.
* 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.
" OPEN_GROUP

Você também pode gostar