‎2007 Aug 11 10:04 AM
hi friends,
I hav to transfer data from excel file to MIGO(materials) and complete the
transaction i.e Goods Receipt. Can anybody tell me about the BDC code to upload the data.
regards.
kamal
‎2007 Aug 11 10:10 AM
Hi Kamal,
use this code for how to upload file into internal table
data: L_FILETABLE TYPE FILETABLE,
L_FILETAB_H TYPE FILETABLE WITH HEADER LINE.
data: begin of itab_string occurs 0,
record type char255,
end of itab_string.
data: p_file1 type string.
selection screen .
PARAMETERS: P_FILE TYPE LOCALFILE.
at selection-screen on value-request for P_FILE.
IF THE USER SELECT EXTENTION BUTTON IT WILL OPEN THE LOCAL DIRECTORY FOR SELECTING THE FILE LOCATION.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE =
DEFAULT_EXTENSION = 'CSV'
DEFAULT_FILENAME = 'C:\Documents and Settings\kiran\Desktop\STATUS.csv'
FILE_FILTER =
INITIAL_DIRECTORY = 'C:\Documents and Settings\kiran\Desktop\'
MULTISELECTION =
WITH_ENCODING =
CHANGING
FILE_TABLE = L_FILETABLE
RC = RC
USER_ACTION =
FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
others = 5
.
IF SY-SUBRC <> 0.
ELSE.
LOOP AT l_filetable INTO L_FILETAB_H.
P_FILE = L_FILETAB_H-FILENAME.
move p_file to p_file1.
EXIT.
ENDLOOP.
ENDIF.
passing the selected file name to gui_upload for loading the data
into internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = p_file1
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = ' '
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
NO_AUTH_CHECK = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
DATA_TAB = itab_string
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 I000(Z00) WITH 'PLEASE PROVIDE CORRECT FILE NAME'.
ENDIF.
Reward points
kiran.M
‎2007 Aug 11 10:10 AM
Hi Kamal,
use this code for how to upload file into internal table
data: L_FILETABLE TYPE FILETABLE,
L_FILETAB_H TYPE FILETABLE WITH HEADER LINE.
data: begin of itab_string occurs 0,
record type char255,
end of itab_string.
data: p_file1 type string.
selection screen .
PARAMETERS: P_FILE TYPE LOCALFILE.
at selection-screen on value-request for P_FILE.
IF THE USER SELECT EXTENTION BUTTON IT WILL OPEN THE LOCAL DIRECTORY FOR SELECTING THE FILE LOCATION.
CALL METHOD CL_GUI_FRONTEND_SERVICES=>FILE_OPEN_DIALOG
EXPORTING
WINDOW_TITLE =
DEFAULT_EXTENSION = 'CSV'
DEFAULT_FILENAME = 'C:\Documents and Settings\kiran\Desktop\STATUS.csv'
FILE_FILTER =
INITIAL_DIRECTORY = 'C:\Documents and Settings\kiran\Desktop\'
MULTISELECTION =
WITH_ENCODING =
CHANGING
FILE_TABLE = L_FILETABLE
RC = RC
USER_ACTION =
FILE_ENCODING =
EXCEPTIONS
FILE_OPEN_DIALOG_FAILED = 1
CNTL_ERROR = 2
ERROR_NO_GUI = 3
NOT_SUPPORTED_BY_GUI = 4
others = 5
.
IF SY-SUBRC <> 0.
ELSE.
LOOP AT l_filetable INTO L_FILETAB_H.
P_FILE = L_FILETAB_H-FILENAME.
move p_file to p_file1.
EXIT.
ENDLOOP.
ENDIF.
passing the selected file name to gui_upload for loading the data
into internal table
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = p_file1
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = ' '
HEADER_LENGTH = 0
READ_BY_LINE = 'X'
DAT_MODE = ' '
CODEPAGE = ' '
IGNORE_CERR = ABAP_TRUE
REPLACEMENT = '#'
CHECK_BOM = ' '
NO_AUTH_CHECK = ' '
IMPORTING
FILELENGTH =
HEADER =
TABLES
DATA_TAB = itab_string
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 I000(Z00) WITH 'PLEASE PROVIDE CORRECT FILE NAME'.
ENDIF.
Reward points
kiran.M
‎2007 Aug 11 10:19 AM
Hi Kamal,
reward points if it is useful
For uploading the data you have to use GUI_UPLOAD i.e upload data from excel sheet into internal table.below GUI_UPLOAD code.
*&---------------------------------------------------------------------*
*& Form GET_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_UPLOAD .
*--here p_file is the selection screen file type rlgrap-filename.
when you are passing in GUI_UPLOAD you have to declear a type as string and then pass the p_file into the string like this
V_FILE = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = IT_BDC
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 = 1.
MESSAGE E000 WITH 'File Open Error'.
ELSEIF SY-SUBRC = 2.
MESSAGE E000 WITH 'File Read Error'.
ELSEIF SY-SUBRC = '0'.
ELSE.
MESSAGE E000 WITH 'Other Errors'.
ENDIF.
ENDFORM. " GET_UPLOADThis is the sample code and try to execuate the code in your system.you will understand better.
REPORT Z_BDC_13053 MESSAGE-ID ZZ
NO STANDARD PAGE HEADING.
************************************************************************
* T A B L E D E F I N I T I O N S
************************************************************************
TYPES: BEGIN OF TY_BDC,
MAKTX LIKE MAKT-MAKTX,
MEINS LIKE MARA-MEINS,
END OF TY_BDC.
TYPES : BEGIN OF TY_SUCESS,
MATNR TYPE MARA-MATNR,
END OF TY_SUCESS.
DATA : IT_BDC TYPE STANDARD TABLE OF TY_BDC WITH HEADER LINE.
DATA : IT_BDCDATA LIKE BDCDATA OCCURS 0 WITH HEADER LINE.
DATA : IT_MESSAGES LIKE BDCMSGCOLL OCCURS 0 WITH HEADER LINE.
DATA : IT_FAIL TYPE STANDARD TABLE OF TY_SUCESS WITH HEADER LINE.
DATA : IT_SUCESS TYPE STANDARD TABLE OF TY_SUCESS WITH HEADER LINE.
************************************************************************
* GLOBAL VARIABLES
************************************************************************
DATA : GV_REPID LIKE SY-REPID.
DATA : V_FILE TYPE STRING.
************************************************************************
* SELECTION SCREEN
************************************************************************
SELECTION-SCREEN : BEGIN OF BLOCK BLK WITH FRAME TITLE TEXT-001.
PARAMETERS : P_FILE TYPE RLGRAP-FILENAME,
P_MODE OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 10(79) TEXT-002.
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN : END OF BLOCK BLK.
************************************************************************
* AT SELECTION-SCREEN
************************************************************************
AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FILE.
GV_REPID = SY-REPID.
*--Get F4 Help for file name
CALL FUNCTION 'KD_GET_FILENAME_ON_F4'
EXPORTING
PROGRAM_NAME = GV_REPID
CHANGING
FILE_NAME = P_FILE
EXCEPTIONS
MASK_TOO_LONG = 1
OTHERS = 2.
IF SY-SUBRC <> 0.
MESSAGE E000 WITH 'File Not Found'.
ENDIF.
************************************************************************
* START OF SELECTION
************************************************************************
START-OF-SELECTION.
*-- Get Uploaded Data
PERFORM GET_UPLOAD.
*--Populate the data
PERFORM POPULATE_DATA.
*--Final output
PERFORM GET_OUTPUT.
*&---------------------------------------------------------------------*
*& Form GET_UPLOAD
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_UPLOAD .
V_FILE = P_FILE.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = V_FILE
FILETYPE = 'ASC'
HAS_FIELD_SEPARATOR = '#'
TABLES
DATA_TAB = IT_BDC
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 = 1.
MESSAGE E000 WITH 'File Open Error'.
ELSEIF SY-SUBRC = 2.
MESSAGE E000 WITH 'File Read Error'.
ELSEIF SY-SUBRC = '0'.
ELSE.
MESSAGE E000 WITH 'Other Errors'.
ENDIF.
ENDFORM. " GET_UPLOAD
*&---------------------------------------------------------------------*
*& Form POPULATE_DATA
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM POPULATE_DATA .
LOOP AT IT_BDC.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0060'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'RMMG1-MATNR'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=AUSW'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '0070'.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MSICHTAUSW-DYTXT(01)'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=ENTR'.
PERFORM BDC_FIELD USING 'MSICHTAUSW-KZSEL(01)'
'X'.
PERFORM BDC_DYNPRO USING 'SAPLMGMM' '4004'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'/00'.
PERFORM BDC_FIELD USING 'MAKT-MAKTX'
IT_BDC-MAKTX.
PERFORM BDC_FIELD USING 'BDC_CURSOR'
'MARA-MEINS'.
PERFORM BDC_FIELD USING 'MARA-MEINS'
IT_BDC-MEINS.
PERFORM BDC_DYNPRO USING 'SAPLSPO1' '0300'.
PERFORM BDC_FIELD USING 'BDC_OKCODE'
'=YES'.
PERFORM BDC_TRANSACTION USING 'MM01'.
ENDLOOP.
ENDFORM. " POPULATE_DATA
*&---------------------------------------------------------------------*
*& Form bdc_dynpro
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_DYNPRO USING PROGRAM
SCREEN.
CLEAR IT_BDCDATA.
IT_BDCDATA-PROGRAM = PROGRAM.
IT_BDCDATA-DYNPRO = SCREEN.
IT_BDCDATA-DYNBEGIN = 'X'.
APPEND IT_BDCDATA.
ENDFORM. " bdc_dynpro
*&---------------------------------------------------------------------*
*& Form bdc_field
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0240 text
* -->P_0241 text
*----------------------------------------------------------------------*
FORM BDC_FIELD USING FIELD
VALUE.
CLEAR IT_BDCDATA.
IT_BDCDATA-FNAM = FIELD.
IT_BDCDATA-FVAL = VALUE.
APPEND IT_BDCDATA.
ENDFORM. " bdc_field
*&---------------------------------------------------------------------*
*& Form BDC_TRANSACTION
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM BDC_TRANSACTION USING TCODE.
CALL TRANSACTION TCODE USING IT_BDCDATA
MODE P_MODE
UPDATE 'S'
MESSAGES INTO IT_MESSAGES.
ENDFORM. " BDC_TRANSACTION
*&---------------------------------------------------------------------*
*& Form GET_OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM GET_OUTPUT .
LOOP AT IT_MESSAGES.
IF IT_MESSAGES-MSGTYP = 'E'.
IT_FAIL-MATNR = IT_MESSAGES-MSGV1.
APPEND IT_FAIL.
CLEAR IT_FAIL.
ELSE.
IT_SUCESS-MATNR = IT_MESSAGES-MSGV1.
APPEND IT_SUCESS.
CLEAR IT_SUCESS.
ENDIF.
ENDLOOP.
*--For Failure messages
IF IT_FAIL[] IS INITIAL.
WRITE: /40 'RECORDS CREATED SUCESSFULLY'.
WRITE :/ SY-ULINE+40(27).
SKIP 2.
LOOP AT IT_SUCESS.
WRITE: / IT_SUCESS-MATNR.
ENDLOOP.
ELSE.
*--Sucess Records
SKIP 5.
WRITE: /40 'ERROR IN CREATING RECORDS'.
WRITE :/ SY-ULINE+40(27).
SKIP 2.
LOOP AT IT_FAIL.
WRITE: / IT_FAIL-MATNR.
ENDLOOP.
ENDIF.
ENDFORM. " GET_OUTPUTThanks
Vikranth Khimavath