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: 

BDC problem ?

Former Member
0 Kudos

Hello,

I want to uplaod the material master records. I was given EXCEL sheet, where my cells are Material Number, Industry sector, Material group, Material description and Unit.

Please copy paste the code it is sytactically correct but only my first record from the excel sheet is coming to material number field even then it is asking to enter material number.

This is my code please helpme with my mistake...

TYPES: BEGIN OF TY_TABDATA,

MANDT LIKE SY-MANDT, " Client

MATNR LIKE RMMG1-MATNR,

MBRSH LIKE RMMG1-MBRSH,

MTART LIKE RMMG1-MTART, "

MAKTX LIKE MAKT-MAKTX,

MEINS LIKE MARA-MEINS,

END OF TY_TABDATA.

DATA: IT_TABDATA TYPE STANDARD TABLE OF TY_TABDATA INITIAL SIZE 0,

WA_TABDATA TYPE TY_TABDATA,

IT_BDCDATA TYPE STANDARD TABLE OF BDCDATA INITIAL SIZE 0,

IT_BDCMSGCOLL TYPE STANDARD TABLE OF BDCMSGCOLL INITIAL SIZE 0.

DATA: G_MESSAGE(70) TYPE C,

BDCDATA TYPE BDCDATA,

W_BDCMSG TYPE BDCMSGCOLL.

*Declaration of the Internal Table with Header Line comprising of the

*uploaded data.

DATA: BEGIN OF IT_FILE_UPLOAD OCCURS 0.

INCLUDE STRUCTURE ALSMEX_TABLINE. " Rows for Table with Excel Data

DATA: END OF IT_FILE_UPLOAD.

*S E L E C T I O N - S C R E E N *

SELECTION-SCREEN: BEGIN OF BLOCK B1 WITH FRAME,

BEGIN OF BLOCK B2 WITH FRAME.

PARAMETERS: P_FNAME LIKE RLGRAP-FILENAME OBLIGATORY.

SELECTION-SCREEN: END OF BLOCK B2,

END OF BLOCK B1.

*E V E N T : AT S E L E C T I O N - S C R E E N *

AT SELECTION-SCREEN ON VALUE-REQUEST FOR P_FNAME.

CALL FUNCTION 'KD_GET_FILENAME_ON_F4'

EXPORTING

PROGRAM_NAME = SYST-REPID

DYNPRO_NUMBER = SYST-DYNNR

FIELD_NAME = ' '

STATIC = 'X'

MASK = '.'

CHANGING

FILE_NAME = P_FNAME

EXCEPTIONS

MASK_TOO_LONG = 1

OTHERS = 2

.

IF SY-SUBRC = 0.

ENDIF.

*S T A R T - O F - S E L E C T I O N

START-OF-SELECTION.

*Upload Excel file into Internal Table.

PERFORM UPLOAD_EXCEL_FILE.

*

*Organize the uploaded data into another Internal Table.

PERFORM ORGANIZE_UPLOADED_DATA.

POPULATE THE RECORDS IN WRITE STATEMENT

*PERFORM WRITE_RECORDS.

*E N D - O F - S E L E C T I O N

END-OF-SELECTION.

*&----


*& Form UPLOAD_EXCEL_FILE

*&----


*FORM UPLOAD_EXCEL_FILE .

CALL FUNCTION 'ALSM_EXCEL_TO_INTERNAL_TABLE'

EXPORTING

FILENAME = P_FNAME

I_BEGIN_COL = 1

I_BEGIN_ROW = 2

I_END_COL = 5

I_END_ROW = 32000

TABLES

INTERN = IT_FILE_UPLOAD

EXCEPTIONS

INCONSISTENT_PARAMETERS = 1

UPLOAD_OLE = 2

OTHERS = 3

.

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. " UPLOAD_EXCEL_FILE

*&----


*& Form ORGANIZE_UPLOADED_DATA

*&----


*FORM ORGANIZE_UPLOADED_DATA .

SORT IT_FILE_UPLOAD BY ROW COL.

LOOP AT IT_FILE_UPLOAD.

CASE IT_FILE_UPLOAD-COL.

WHEN 1.

WA_TABDATA-MATNR = IT_FILE_UPLOAD-VALUE.

WHEN 2.

WA_TABDATA-MBRSH = IT_FILE_UPLOAD-VALUE.

WHEN 3.

WA_TABDATA-MTART = IT_FILE_UPLOAD-VALUE.

WHEN 4.

WA_TABDATA-MAKTX = IT_FILE_UPLOAD-VALUE.

WHEN 5.

WA_TABDATA-MEINS = IT_FILE_UPLOAD-VALUE.

ENDCASE.

APPEND WA_TABDATA TO IT_TABDATA.

CLEAR: WA_TABDATA.

ENDLOOP.

*ENDFORM.

*perform open_group.

LOOP AT IT_TABDATA INTO WA_TABDATA.

perform bdc_dynpro using 'SAPLMGMM' '0060'.

perform bdc_field using 'BDC_CURSOR'

'RMMG1-MTART'.

perform bdc_field using 'BDC_OKCODE'

'/00'.

perform bdc_field using 'RMMG1-MATNR'

WA_TABDATA-MATNR. "'S1'.

perform bdc_field using 'RMMG1-MBRSH'

WA_TABDATA-MBRSH. "'M'.

perform bdc_field using 'RMMG1-MTART'

WA_TABDATA-MTART. "'VKHM'

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 'MAKT-MAKTX'

WA_TABDATA-MAKTX. " material

perform bdc_field using 'BDC_CURSOR'

'MARA-MEINS'.

perform bdc_field using 'MARA-MEINS'

WA_TABDATA-MEINS. "'KG'

.

perform bdc_field using 'MARA-MTPOS_MARA'

'NORM'.

*perform bdc_transaction using 'MM01'.

*

*ENDLOOP.

*

*perform close_group.

CALL TRANSACTION 'MM01' USING IT_BDCDATA MODE 'A' UPDATE 'S' MESSAGES

INTO IT_BDCMSGCOLL.

CLEAR W_BDCMSG.

READ TABLE IT_BDCMSGCOLL INTO W_BDCMSG INDEX 1.

CALL FUNCTION 'FORMAT_MESSAGE'

EXPORTING

ID = SY-MSGID

LANG = '-D'(001)

NO = SY-MSGNO

V1 = SY-MSGV1

V2 = SY-MSGV2

V3 = SY-MSGV3

V4 = SY-MSGV4

IMPORTING

MSG = G_MESSAGE

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.

*WRITE : / W_UPLOAD-NEWBS ,'-----' , G_MESSAGE.

*REFRESH IT_BDCMSGCOLL.

ENDIF.

ENDLOOP.

*----


*

Start new screen

*

*----


*

FORM BDC_DYNPRO USING PROGRAM DYNPRO.

CLEAR BDCDATA.

BDCDATA-PROGRAM = PROGRAM.

BDCDATA-DYNPRO = DYNPRO.

BDCDATA-DYNBEGIN = 'X'.

APPEND BDCDATA TO IT_BDCDATA.

CLEAR BDCDATA.

ENDFORM.

*----


*

Insert field

*

*----


*

FORM BDC_FIELD USING FNAM FVAL.

IF FVAL NODATA.

CLEAR BDCDATA.

BDCDATA-FNAM = FNAM.

BDCDATA-FVAL = FVAL.

APPEND BDCDATA TO IT_BDCDATA.

CLEAR BDCDATA.

ENDIF.

ENDFORM.

Waiting for your answers.....

8 REPLIES 8

Former Member
0 Kudos

Hi,

Please check the following code in debugging mode

LOOP AT IT_FILE_UPLOAD.

CASE IT_FILE_UPLOAD-COL.

WHEN 1.

WA_TABDATA-MATNR = IT_FILE_UPLOAD-VALUE.

WHEN 2.

WA_TABDATA-MBRSH = IT_FILE_UPLOAD-VALUE.

WHEN 3.

WA_TABDATA-MTART = IT_FILE_UPLOAD-VALUE.

WHEN 4.

WA_TABDATA-MAKTX = IT_FILE_UPLOAD-VALUE.

WHEN 5.

WA_TABDATA-MEINS = IT_FILE_UPLOAD-VALUE.

ENDCASE.

APPEND WA_TABDATA TO IT_TABDATA.

CLEAR: WA_TABDATA.

ENDLOOP.

See, usually if you use alsm_excel .... fm it will give you the each column in a row in excel sheet as different rows.

I mean if you have 4 columns, and 4 rows, then it will be 16 rows in the internal table filled from the excel sheet.

So you need to change the logic above. Every time you are appending new records. Instead of it do the appending after end of each row ( i mean at end of row )

try using this.. you can solve your problem.

Regards,

Venkatesh

0 Kudos

hi Venkatesh,

I have tried to debugg but i am not getting the exact mistake which i have to correct. please copy paste my code and if possible please help me in identifying my error.

Thks

Former Member
0 Kudos

HI,

Actually I dont have SAP in my machine as i am in home.

So what you need to do is

sort it_file_upload by row.

LOOP AT IT_FILE_UPLOAD.

CASE IT_FILE_UPLOAD-COL.

WHEN 1.

WA_TABDATA-MATNR = IT_FILE_UPLOAD-VALUE.

WHEN 2.

WA_TABDATA-MBRSH = IT_FILE_UPLOAD-VALUE.

WHEN 3.

WA_TABDATA-MTART = IT_FILE_UPLOAD-VALUE.

WHEN 4.

WA_TABDATA-MAKTX = IT_FILE_UPLOAD-VALUE.

WHEN 5.

WA_TABDATA-MEINS = IT_FILE_UPLOAD-VALUE.

ENDCASE.

at end of row.

APPEND WA_TABDATA TO IT_TABDATA.

CLEAR: WA_TABDATA.

end at.

ENDLOOP.

after this see the internal table it_tabdata.

and check the data should match with the excel sheet data.

Regards,

Venkatesh

0 Kudos

Hi Venkatesh,

Thanks a lot for your help.

It helped me a lot to understand how actually the data is being uploaded through EXCEL sheet.

I have used At end syntax and my code worked fine and i can see that all my data is been transfered to screen fields correctly, but one thing have stopped it is DATE, i mean my application server date is like MMDDYYYY there by i have given in my EXCEL sheet date as 09132008, and when i am excecuting BDC program in screen field date field is seen as 9132008 but still error is displayed when i am trying to upload like ERROR message is throwing saying ENTER DATE IN __/__/____ format, I am unable to resolve this error. Please help to resolve this error to.

Thanks

Mohamed_Mukhtar
Active Contributor
0 Kudos

Hi Balu ,

Go through the below link , it may help you to convert the date format.

[Convert Date|]

Regards,

0 Kudos

Hi thks for responding me in crucial time of my task, to be more precise of my problem, from my EXCEL sheet i am getting 9132008 rather i should get as 09132008.

Thats the problem write now i am struked up with.

0 Kudos

hi,

that problem is in excel not in sap.

do this.

open ur excel sheet right click on top left side of ur excel sheet,there select FORMAT CELLS and inside select TEXT.

now u can get 09132008

instead of 9132008.

0 Kudos

Hi,

My problem is solve with your answer.

And when i am trying to upload my first record is successfully entering into all my fields and saving but my next record from the EXCEL sheet is not uploading.

WHere i would have been wrong, i am unable to understand where to loop my fields.