Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

BDC upload

Former Member
0 Likes
469

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

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
437

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

2 REPLIES 2
Read only

Former Member
0 Likes
438

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

Read only

Former Member
0 Likes
437

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_UPLOAD

This 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_OUTPUT

Thanks

Vikranth Khimavath