Application Development 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: 

GUI_UPLOAD problem if input data is using Excel

Former Member
0 Kudos

Hi , Some one can answer this quick question.

While i am using GUI_upload i am not able to recieve the data properly.

*************************

  • GUI UPLOAD From Data

*************************

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = lvs_filenm

FILETYPE = 'ASC'

  • HAS_FIELD_SEPARATOR = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

its not working properly . can i give any has field separtor like 'X'

And i copied the same data in excel to text file. GUI_upload is working fine and data is exactly coming in to the internal table.

*************************

  • GUI UPLOAD From Data

*************************

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

FILENAME = lvs_filenm

FILETYPE = 'DAT'

HAS_FIELD_SEPARATOR = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • CODEPAGE = ' '

  • IGNORE_CERR = ABAP_TRUE

  • REPLACEMENT = '#'

  • CHECK_BOM = ' '

  • VIRUS_SCAN_PROFILE =

  • NO_AUTH_CHECK = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

Any one can help me out in this regard. Client wants to use GUI_upload functional module only...

4 REPLIES 4

Former Member
0 Kudos

Hi vamsi,

I will send sample code along with flat file.I will attach flat file at the end of program check it once.This program works fine for me for XLS FILE.

&----


*& Report YBDC_UPLOAD_MM01_XLS *

*& *

&----


*& DEVELOPER : KIRAN KUMAR.G *

*& PURPOSE : MAKE CHANGES TO DOWNLOADED FILE AND UPLOAD THE FILE *

*& CREATION DT: 3/12/2007 *

*& REQUEST : ERPK900035 *

&----


REPORT YBDC_UPLOAD_MM01_XLS.

----


  • Tables

----


TABLES : mara. "General Material Data

----


  • Global BDCDATA Structure and MESSAGE Structure

----


DATA: gt_bdcdata LIKE bdcdata OCCURS 0 WITH HEADER LINE,

gt_msgtab LIKE bdcmsgcoll OCCURS 0 WITH HEADER LINE.

----


  • Global Variables

----


DATA: gv_infile TYPE string,

gv_msg TYPE string,

gv_update VALUE 'A'.

----


  • Internal Table

*----


DATA: BEGIN OF gt_data OCCURS 0,

matnr(20), "Material Number

mbrsh(20), "Account Group

mtart(20), "Material Type

meins(20), "Base Unit Of Measure

maktx(20), "Material Description

END OF gt_data.

----


  • Selection-screen

----


SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

PARAMETERS: p_file LIKE rlgrap-filename,

p_mode.

SELECTION-SCREEN : END OF BLOCK b1.

----


  • Select the File

----


AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_file.

PERFORM fetch_file.

START-OF-SELECTION.

----


  • Fetch Data From XLS File

----


PERFORM fetch_data.

----


  • Fetch Data From XLS File

----


PERFORM delete_headerinfo.

----


  • Fetch Data From XLS File

----


PERFORM place_data.

&----


*& Form fetch_file

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fetch_file .

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = syst-cprog

dynpro_number = syst-dynnr

  • FIELD_NAME = ' '

IMPORTING

file_name = p_file.

gv_infile = p_file.

ENDFORM. " fetch_file

&----


*& Form fetch_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM fetch_data .

refresh : gt_data. "Clear Body Of the Internal Table

clear : gt_data. "Clear Header Line

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = gv_infile

filetype = 'ASC'

has_field_separator = 'X'

  • HEADER_LENGTH = 0

  • READ_BY_LINE = 'X'

  • DAT_MODE = ' '

  • IMPORTING

  • FILELENGTH =

  • HEADER =

TABLES

data_tab = gt_data

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 place_data

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM place_data .

LOOP AT gt_data.

PERFORM bdc_dynpro USING 'SAPLMGMM' '0060'.

PERFORM bdc_field USING 'BDC_CURSOR'

'RMMG1-MATNR'.

PERFORM bdc_field USING 'BDC_OKCODE'

'=AUSW'.

PERFORM bdc_field USING 'RMMG1-MATNR'

gt_data-matnr.

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'

'=BU'.

PERFORM bdc_field USING 'BDC_CURSOR'

'MAKT-MAKTX'.

PERFORM bdc_field USING 'MAKT-MAKTX'

gt_data-maktx.

PERFORM bdc_field USING 'MARA-MTPOS_MARA'

'NORM'.

CALL TRANSACTION 'MM02' USING gt_bdcdata MODE p_mode

UPDATE gv_update

MESSAGES INTO gt_msgtab.

*For Error Messages Handling.

LOOP AT gt_msgtab.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

id = sy-msgid

lang = sy-langu

no = sy-msgno

v1 = sy-msgv1

v2 = sy-msgv2

v3 = sy-msgv3

v4 = sy-msgv4

IMPORTING

msg = gv_msg

EXCEPTIONS

not_found = 1

OTHERS = 2.

IF sy-subrc <> 0.

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

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

IF sy-tabix = 1.

WRITE: / 'Process Log' COLOR 3.

ENDIF.

WRITE:/ gv_msg.

ENDLOOP.

REFRESH gt_msgtab.

REFRESH gt_bdcdata.

ENDLOOP.

ENDFORM. " place_data

----


  • Start new screen *

----


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

----


  • Insert field *

----


FORM bdc_field USING fnam fval.

CLEAR gt_bdcdata.

gt_bdcdata-fnam = fnam.

gt_bdcdata-fval = fval.

APPEND gt_bdcdata.

ENDFORM. "BDC_FIELD

&----


*& Form delete_headerinfo

&----


  • text

----


  • --> p1 text

  • <-- p2 text

----


FORM delete_headerinfo .

DELETE gt_data INDEX 1.

ENDFORM. " delete_headerinfo

----


  • FLAT FILE

----


*MATERIAL NUMBER INDUSTRY SECTOR MATERIAL TYPE BASE UNIT OF

*MEASURE MATERIAL DESCRIPTION

*806 M FERT CM IRON

*807 M HALB KG STEEL

*808 M HAWA KG IRON

----


Award points if helpful.

Kiran Kumar.G.A

Former Member
0 Kudos

hi vamsi,

check this link,hope it may be helpful

regards,

sravanthi

Former Member
0 Kudos

Hai,

Instead of using GUI_UPLOAD you can use 'TEXT_CONVERT_XLS_TO_SAP'.

If you have to upload either text file or excel file you can use both of the above.

Example Code:

DATA: BEGIN OF i_file_data OCCURS 0,

col1 TYPE text60,

col2 TYPE text60,

col3 TYPE text60,

col4 TYPE text60,

col5 TYPE text60,

col6 TYPE text60,

END OF i_file_data.

parameter: p_local TYPE rlgrap-filename MODIF ID m2.

AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_local.

*F4 help to browse file in local server

PERFORM select_local_file.

Start-of-selection.

*Get file extension

SPLIT p_local AT '.' INTO lv_file lv_ext.

TRANSLATE lv_ext TO UPPER CASE.

CLEAR i_file_data.

REFRESH i_file_data.

IF lv_ext = c_xls.

*IF file is excel get data from excel sheet

PERFORM get_xls_file.

ELSE.

*Else get file from gui download

PERFORM get_txt_file.

ENDIF. "lv_ext

FORM get_xls_file.

data: i_raw TYPE truxs_t_text_data.

CALL FUNCTION 'TEXT_CONVERT_XLS_TO_SAP'

EXPORTING

i_field_seperator = 'X'

i_tab_raw_data = i_raw

i_filename = p_local

TABLES

i_tab_converted_data = i_file_data[]

EXCEPTIONS

conversion_failed = 1

OTHERS = 2

.

IF sy-subrc 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF. " sy-subrc

ENDFORM. "get_xls_file

FORM get_txt_file.

DATA: lv_string TYPE string. " To get file path

CLEAR lv_string.

lv_string = p_local. " Get file path

CALL FUNCTION 'GUI_UPLOAD'

EXPORTING

filename = lv_string

filetype = 'ASC'

has_field_separator = 'X'

read_by_line = 'X'

TABLES

data_tab = i_file_data[]

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. " sy-subrc

ENDFORM. "get_txt_file

FORM select_local_file.

CALL FUNCTION 'F4_FILENAME'

EXPORTING

program_name = sy-cprog

dynpro_number = sy-dynnr

field_name = space

IMPORTING

file_name = p_local.

ENDFORM. "select_local_file

*****Now i_file_data contains the field values. You can move to your internal table which is declared according to the actual data types. For this, you need to loop thru i_file_data and move specific column values to the internal table.

Former Member
0 Kudos

It worked for me. Hope it does for you as well.

just simply create as excel sheet using SAP itself. Not through Microsoft Office. I believe SAP creates an older MS Office type excel file (which version I'm not sure) and that is from where the problem creeps in. Then you can paste all your data in the excel sheet generated by SAP.

And use this excel sheet in your ABAP code.

Ways to create excel sheet:

1) You can use gui_download

2) System>List>Save from any List and save it as spreadsheet.

Hope this helps.