2007 Jul 12 10:16 AM
2007 Jul 12 10:21 AM
Hi,
this below program is for tcode me21n(purchase order).it will contain a table control.
check this code and flat file.
report ZBH_PURORDER no standard page heading line-size 255.
PARAMETERS:P_FILE LIKE IBIPPARMS-PATH.
DATA FILENAME TYPE STRING.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
CALL FUNCTION 'F4_FILENAME'
EXPORTING
program_name = sy-cprog
dynpro_number = sy-dynnr
IMPORTING
file_name = P_FILE.
START-OF-SELECTION.
FILENAME = P_FILE.
DATA:BEGIN OF XTAB OCCURS 0,
TYP,
DES(255) TYPE C,
END OF XTAB.
DATA:BEGIN OF ITAB OCCURS 0,
SUPERFIELD LIKE MEPO_TOPLINE-SUPERFIELD,
EKORG LIKE MEPO1222-EKORG,
EKGRP LIKE MEPO1222-EKGRP,
BUKRS LIKE MEPO1222-BUKRS,
END OF ITAB.
DATA:BEGIN OF JTAB OCCURS 0,
N(4) TYPE C,
EMATN LIKE MEPO1211-EMATN,
MENGE(13) TYPE C,
NETPR(13) TYPE C,
NAME1 LIKE MEPO1211-NAME1,
END OF JTAB.
DATA:BDCTAB LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA:DELIMITER VALUE '*'.
DATA A TYPE I.
DATA M(4) TYPE N.
DATA L_FNAM(30) TYPE C.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = FILENAME
FILETYPE = 'ASC'
TABLES
DATA_TAB = XTAB.
LOOP AT XTAB.
IF XTAB-TYP = 'H'.
SPLIT XTAB-DES AT DELIMITER INTO ITAB-SUPERFIELD ITAB-EKORG ITAB-EKGRP
ITAB-BUKRS.
JTAB-N = JTAB-N + 1.
APPEND ITAB.
ELSEIF XTAB-TYP = 'I'.
SPLIT XTAB-DES AT DELIMITER INTO JTAB-EMATN JTAB-MENGE JTAB-NETPR
JTAB-NAME1.
APPEND JTAB.
ENDIF.
ENDLOOP.
CALL FUNCTION 'BDC_OPEN_GROUP'
EXPORTING
CLIENT = SY-MANDT
GROUP = 'PORDER'
KEEP = 'X'
USER = SY-UNAME.
LOOP AT ITAB.
A = SY-TABIX.
REFRESH BDCTAB.
perform bdc_dynpro using 'SAPLMEGUI' '0014'.
perform bdc_field using 'BDC_CURSOR'
'MEPO_TOPLINE-SUPERFIELD'.
perform bdc_field using 'MEPO_TOPLINE-BSART'
'NB'.
perform bdc_field using 'MEPO_TOPLINE-SUPERFIELD'
ITAB-SUPERFIELD.
perform bdc_field using 'MEPO_TOPLINE-BEDAT'
'09.02.2007'.
perform bdc_field using 'DYN_6000-LIST'
' 1'.
perform bdc_field using 'BDC_OKCODE'
'=MEV4000BUTTON'.
perform bdc_dynpro using 'SAPLMEGUI' '0014'.
perform bdc_field using 'MEPO_TOPLINE-BSART'
'NB'.
perform bdc_field using 'MEPO_TOPLINE-SUPERFIELD'
ITAB-SUPERFIELD.
perform bdc_field using 'MEPO_TOPLINE-BEDAT'
'09.02.2007'.
perform bdc_field using 'BDC_CURSOR'
'MEPO1222-EKORG'.
perform bdc_field using 'MEPO1222-EKORG'
ITAB-EKORG.
perform bdc_field using 'MEPO1222-EKGRP'
ITAB-EKGRP.
perform bdc_field using 'MEPO1222-BUKRS'
ITAB-BUKRS.
perform bdc_field using 'DYN_6000-LIST'
' 1'.
perform bdc_field using 'BDC_OKCODE'
'=MEV4001BUTTON'.
perform bdc_dynpro using 'SAPLMEGUI' '0014'.
perform bdc_field using 'MEPO_TOPLINE-BSART'
'NB'.
perform bdc_field using 'MEPO_TOPLINE-SUPERFIELD'
ITAB-SUPERFIELD.
perform bdc_field using 'MEPO_TOPLINE-BEDAT'
'09.02.2007'.
perform bdc_field using 'MEPO1222-EKORG'
ITAB-EKORG.
perform bdc_field using 'MEPO1222-EKGRP'
ITAB-EKGRP.
perform bdc_field using 'MEPO1222-BUKRS'
ITAB-BUKRS.
M = 1.
LOOP AT JTAB.
IF JTAB-N = A.
WRITE:/ JTAB.
CONCATENATE 'MEPO1211-EMATN(' M ')' INTO L_FNAM.
perform bdc_field using 'BDC_CURSOR'
L_FNAM.
perform bdc_field using L_FNAM
JTAB-EMATN.
CONCATENATE 'MEPO1211-MENGE(' M ')' INTO L_FNAM.
perform bdc_field using L_FNAM
JTAB-MENGE.
CONCATENATE 'MEPO1211-NETPR(' M ')' INTO L_FNAM.
perform bdc_field using L_FNAM
JTAB-NETPR.
CONCATENATE 'MEPO1211-NAME1(' M ')' INTO L_FNAM.
perform bdc_field using L_FNAM
JTAB-NAME1.
M = M + 1.
ENDIF.
ENDLOOP.
perform bdc_field using 'DYN_6000-LIST'
' 1'.
perform bdc_field using 'BDC_OKCODE'
'/00'.
perform bdc_dynpro using 'SAPLMEGUI' '0014'.
perform bdc_field using 'MEPO_TOPLINE-BSART'
'NB'.
perform bdc_field using 'MEPO_TOPLINE-SUPERFIELD'
ITAB-SUPERFIELD.
perform bdc_field using 'MEPO_TOPLINE-BEDAT'
'09.02.2007'.
perform bdc_field using 'MEPO1222-EKORG'
ITAB-EKORG.
perform bdc_field using 'MEPO1222-EKGRP'
ITAB-EKGRP.
perform bdc_field using 'MEPO1222-BUKRS'
ITAB-BUKRS.
perform bdc_field using 'DYN_6000-LIST'
' 1'.
perform bdc_field using 'BDC_CURSOR'
'MEPO1319-MATKL'.
perform bdc_field using 'MEPO1319-SPINF'
'X'.
perform bdc_field using 'BDC_OKCODE'
'=MESAVE'.
CALL FUNCTION 'BDC_INSERT'
EXPORTING
TCODE = 'ME21N'
TABLES
DYNPROTAB = BDCTAB.
ENDLOOP.
CALL FUNCTION 'BDC_CLOSE_GROUP'.
FORM BDC_DYNPRO USING PROGRAM DYNPRO.
CLEAR BDCTAB.
BDCTAB-PROGRAM = PROGRAM.
BDCTAB-DYNPRO = DYNPRO.
BDCTAB-DYNBEGIN = 'X'.
APPEND BDCTAB.
ENDFORM.
FORM BDC_FIELD USING FNAM FVAL.
CLEAR BDCTAB.
BDCTAB-FNAM = FNAM.
BDCTAB-FVAL = FVAL.
APPEND BDCTAB.
ENDFORM.
FLAT FILE:
H1171611000001*1000
ICPU116000*1000
ILEY BOARD1010000*1000
IMOUSE66000*1000
H1171711000001*1000
ICPU580000*1000
H1171701000001*1000
IMOUSE33000*1000
ILEY BOARD1010000*1000
Look at the below links for example programs
http://www.sap-basis-abap.com/abap/handling-table-control-in-bdc.htm
http://www.sap-img.com/abap/bdc-example-using-table-control-in-bdc.htm
<b>Reward points if helpful</b>
Regards
Ashu
2007 Jul 12 10:21 AM
Hi,
While recording there must be column name and row indices.
like field_col1 (index 1.....n)
field_col2 (index 1.....n)
Likewise you have to fill the data.
Keep scrolling logic also in mind.
Reward if useful!
2007 Jul 12 10:26 AM
Check this link..
http://sap.niraj.tripod.com/id29.html
Also,
<b>Data Transfer</b>
During the process of data transfer, data is transferred into the SAP R/3 System. This transfer is from an external system to SAP R/3 system. Whenever you transfer data from an external system into an R/3 System, you can use data transfer because it is installed and regularly transfers data from an external system into an R/3 System.
As discussed, with the help of BDC, you can transfer the required data from a non-SAP system to an SAP system. For this kind of data transfer you are required to write an ABAP program. This ABAP program would help to export the concerned data to a sequential dataset file. The data in this file has to be stored. This should be stored in a format, which is acceptable to SAP batch input program. But, to transfer data from a SAP system to another SAP system, you can take the aid of RFC or CPI-C.
SAP application supports the data transfer of numerous SAP business objects. The said data transfer program specifies the data format definition, which is necessary to import the data into the R/3 System. There are three methods available for transferring data:
Direct Input: In this method the SAP function modules execute the consistency checks. However, there are other means of checking with the help of screens. The Direct Input Method has considerable performance advantages.
Call Transaction: In this method you can check the data consistency with the help of screen logic.
Batch Input Session: In this method data consistency is checked with the help of screen logic.
Regards,
Pavan
2007 Jul 12 10:40 AM
hi
what ever the data that u want to trnasfer to table ctrl, put it in a flat file.
create an internal able that can occupy those datas.
then transfer from internal table to table control.
ex: for me41/.
REPORT YELS_ME41_BDC_V NO STANDARD PAGE HEADING LINE-SIZE 255.
INCLUDE BDCRECX1.
INTERNAL TABLE DECLARATION.
DATA : BEGIN OF ITAB OCCURS 0,
V_NUM(3) TYPE C,"SERIAL NUMBER
EMATN LIKE EKPO-EMATN,
TXZ01 LIKE EKPO-TXZ01,
ANMNG(13) TYPE C,
MEINS(3) TYPE C,
LPEIN LIKE RM06E-LPEIN,
EEIND LIKE RM06E-EEIND,
MATKL LIKE EKPO-MATKL,
END OF ITAB.
VARIABLE DECLARATION
DATA : V_LASTNUM(3) TYPE C,
V_TEMPVAR(15),
V_PAGES(3) TYPE C VALUE '10',
V_COUNT TYPE I,
V_CTR TYPE I,
V_TCTR(2) TYPE C,
V_TEST TYPE C VALUE 0,
ITEM LIKE RM06E-EBELP.
*DATA: BDCDATA TYPE BDCDATA OCCURS 0 WITH HEADER LINE.
BEGIN OF PROGRAM.
START-OF-SELECTION.
PERFORM GET-DATA.
SORT ITAB BY NUM EEIND.
PERFORM OPEN_GROUP.
*DATA TRANSFERRED FROM INTERNAL TABLE TO IST 2ND SCREEN FIELDS(HEADER
*DATA)
LOOP AT ITAB.
IF ITAB-V_NUM NE V_LASTNUM.
" HEADER DATA EXECUTES FOR ONLY ONE TIME FOR ONE RFQ GENERATION
WHEN SNO IS NOT EQUAL TO LASTNUMBER. THEN PROCEED.
V_TEST = 0.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0300'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-ANGDT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'RM06E-ASART'
'AN'. "RFQ TYPE.
PERFORM BDC_FIELD USING 'EKKO-SPRAS'
'EN'. " LANGUAGE KEY.
PERFORM BDC_FIELD USING 'RM06E-ANFDT'
'19.07.2007'."RFQ DATE.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'."QUOTATION DEAD LINE.
PERFORM BDC_FIELD USING 'EKKO-EKORG'
'3000'."PURCHASE ORGANISATION.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
'003'."PURCHASE GROUP.
PERFORM BDC_FIELD USING 'RM06E-LPEIN'
'T'.
IIND SCREEN.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0301'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-SUBMI'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'BU'.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
'003'.
PERFORM BDC_FIELD USING 'EKKO-PINCR'
'10'." ITEM INTERVAL.
PERFORM BDC_FIELD USING 'EKKO-SUBMI'
'1'." COLL NO.
PERFORM BDC_FIELD USING 'EKKO-SPRAS'
'EN'.
PERFORM BDC_FIELD USING 'EKKO-UPINC'
'1'." SUB ITEM INTERVAL.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0301'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-EKGRP'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-EKGRP'
'003'.
PERFORM BDC_FIELD USING 'EKKO-PINCR'
'10'.
PERFORM BDC_FIELD USING 'EKKO-SUBMI'
'1'.
PERFORM BDC_FIELD USING 'EKKO-UPINC'
'1'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
**********tab ctrl*********************************************
IIIRD SCREEN
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-EEIND(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
DATA MOVED FROM INTERNAL TABLE TO TABLE CONTROL
*
V_CTR = 0.
"FOR ONE RFQ , MORE ITEMS WILL BE THERE. COUNT STARTS HERE.
LOOP AT ITAB WHERE V_NUM = ITAB-V_NUM." CHECK THE SNO IS EQUAL .
V_CTR = V_CTR + 1." COUNT IS INCREMENTED BY 1.
MY TAB CTRL CAN HAVE ONLY 20 RECORDS.
IF COUNT IS LESS THAN OR EQUAL TO 20 ASSIGN THIS VALUE TO TCTR VAR
IF V_CTR <= 20.
V_TCTR = V_CTR.
ENDIF.
*IF COUNT IS GREATER THAN 20 ASSIGN THIS VALUE TO TCTR VAR
IF V_CTR > 20.
V_TCTR = '20'.
ENDIF.
IF COUNT IS LESS THAN OR EQUAL TO 10 BLANK SPACE IS ALLOTTED TO TEST
VAR.
IF V_CTR >= 10.
V_TEST = ''.
ENDIF.
WHEN COUNT IS LESS THAN 20 THEN ITEM (PAGES) WILL BE 10.
IF V_CTR < 20.
V_PAGES = 10.
PERFORM BDC_FIELD USING 'RM06E-EBELP'
V_PAGES.
ENDIF.
WHEN COUNT IS GREATER THAN 20 THEN ITEM (PAGES) WILL BE INCREMENTED BY
10 FOR EVERY ENTRY..
IF V_CTR >= 20.
V_PAGES = V_PAGES + 10.
PERFORM BDC_FIELD USING 'RM06E-EBELP'
V_PAGES.
ENDIF.
CONCTAENATION IS DONE TO GET A PATTERN LIKE EKPO-EMATN(01).
UPLOAD EMATN FIELD INTO TABLE CONTROL
CONCATENATE 'ekpo-ematn(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-EMATN.
UPLOAD SHORT TEXT FIELD INTO TABLE CONTROL
CONCATENATE 'ekpo-txz01(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-TXZ01.
UPLOAD QUANTITY FIELD INTO TABLE CONTROL
CONCATENATE 'rm06e-anmng(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-ANMNG.
UPLOAD UNIT OF MEASURE FIELD INTO TABLE CONTROL
CONCATENATE 'ekpo-meins(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-MEINS.
UPLOAD DATE FORMAT FIELD INTO TABLE CONTROL
CONCATENATE 'rm06e-lpein(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-LPEIN.
UPLOAD DATE FIELD INTO TABLE CONTROL
CONCATENATE 'rm06e-eeind(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-EEIND.
UPLOAD MATERIAL GROUP FIELD INTO TABLE CONTROL
CONCATENATE 'EKPO-MATKL(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING V_TEMPVAR ITAB-MATKL.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0320'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-ANGDT'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=LS'.
PERFORM BDC_FIELD USING 'EKKO-ANGDT'
'29.07.2007'.
*AFTER INSERTING ONE ROW OF DATA PRESS ENTER .CURSOR SHOULD BE AT DEAD
*LINE DATE.
CONCATENATE 'ekpo-ematn(' V_TEST V_TCTR ')' INTO V_TEMPVAR.
CONDENSE V_TEMPVAR NO-GAPS.
PERFORM BDC_FIELD USING 'BDC_CURSOR' V_TEMPVAR.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
ENDLOOP.
*************************vendor addr*******************
V_LASTNUM = ITAB-V_NUM.
*******ENTER VENDOR NUMBER AND SAVE.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR'
'9054'." VENDOR NUMBER.
PERFORM BDC_DYNPRO USING 'SAPLMEXF' '0100'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTE'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RM06E-SPRAS'.
PERFORM BDC_FIELD USING 'BUTTON_INIT'
'X'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_DYNPRO USING 'SAPMM06E' '0140'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'EKKO-LIFNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=BU'.
PERFORM BDC_FIELD USING 'EKKO-LIFNR'
'9054'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-NAME1'
'tttt'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-SORT1'
'TT'.
PERFORM BDC_FIELD USING 'ADDR1_DATA-COUNTRY'
'AZ'.
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=YES'.
PERFORM BDC_TRANSACTION USING 'ME41'.
REFRESH BDCDATA.
ENDIF.
ENDLOOP.
PERFORM CLOSE_GROUP.
&----
*& Form get-data
&----
UPLOAD FLAT FILES TO INTERNAL TABLE.
----
FORM GET-DATA.
*TRANSFER DATA FROM FLAT FILE TO INTERNAL TABLE.
CALL FUNCTION 'UPLOAD'
EXPORTING
CODEPAGE = ' '
FILENAME = ' '
FILETYPE = ' '
ITEM = ' '
FILEMASK_MASK = ' '
FILEMASK_TEXT = ' '
FILETYPE_NO_CHANGE = ' '
FILEMASK_ALL = ' '
FILETYPE_NO_SHOW = ' '
LINE_EXIT = ' '
USER_FORM = ' '
USER_PROG = ' '
SILENT = 'S'
IMPORTING
FILESIZE =
CANCEL =
ACT_FILENAME =
ACT_FILETYPE =
TABLES
DATA_TAB = ITAB
EXCEPTIONS
CONVERSION_ERROR = 1
INVALID_TABLE_WIDTH = 2
INVALID_TYPE = 3
NO_BATCH = 4
UNKNOWN_ERROR = 5
GUI_REFUSE_FILETRANSFER = 6
OTHERS = 7
.
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. "get-data
reward if useful