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 - errors in flat file

Former Member
0 Likes
496

hi,

in BDC,

after uploading data from flat file,

how to find if there are any errors in flat file,

before starting the session.

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
434

Hi,

You have to create internal tables for all the mandatory fields. see the following code :

I am giving an example for XK01 Transaction.

TYPES:BEGIN OF TY_XK01,

LIFNR(10) TYPE C , "VENDOR'S ACCOUNT NUMBER

BUKRS(4) TYPE C , "COMPANY CODE

EKORG(4) TYPE C , "PURCHASING ORGANISATION

KTOKK(4) TYPE C , "VENDOR ACCOUNT GROUP

NAME1(35) TYPE C , "NAME1

SORTL(10) TYPE C , "SORT FIELD

STRAS(35) TYPE C , "STREET

PSTLZ(10) TYPE C , "POSTAL CODE

ORT01(35) TYPE C , "CITY

LAND1(3) TYPE C , "COUNTRY KEY

REGIO(3) TYPE C , "REGION

TIME_ZONE(6) TYPE C , "ADDRESS TIME ZONE

LANGU(1) TYPE C , "LANGUAGE KEY

TELF1(16) TYPE C , "TELEPHONE NUMBER

TELFX(31) TYPE C , "FAX NUMBER

SMTP_ADDR(241) TYPE C , "E-MAIL ADDRESS

URI_SCREEN(132) TYPE C , "UNIFORM RESOURCE LOCATOR

AKONT(10) TYPE C , "RECONCILITATION ACCOUNT

ZUAWA(3) TYPE C , "KEY FOR SORTING ACCORDING TO ASSIGNMENT NUMBERS

MINDK(3) TYPE C , "MINORITY INDICATORS

ALTKN(10) TYPE C , "PREVIOUS MASTER RECORD NUMBER

ZTERM(4) TYPE C , "TERMS OF PAYMENT KEY

ZWELS(10) TYPE C , "LIST OF THE PAYMENT METHODS

WAERS(5) TYPE C , "PURCHASE ORDER CURRENCY

END OF TY_XK01,

BEGIN OF TY_LIFNR,

LIFNR(10) TYPE C ,

END OF TY_LIFNR,

BEGIN OF TY_BUKRS,

BUKRS(4) TYPE C ,

END OF TY_BUKRS,

BEGIN OF TY_EKORG,

EKORG(4) TYPE C ,

END OF TY_EKORG,

BEGIN OF TY_KTOKK,

KTOKK(4) TYPE C ,

END OF TY_KTOKK,

BEGIN OF TY_LAND1,

LAND1(3) TYPE C ,

END OF TY_LAND1,

BEGIN OF TY_LANGU,

LANGU(1) TYPE C ,

END OF TY_LANGU,

BEGIN OF TY_AKONT,

AKONT(10) TYPE C ,

END OF TY_AKONT,

BEGIN OF TY_ZUAWA,

ZUAWA(3) TYPE C ,

END OF TY_ZUAWA,

BEGIN OF TY_MINDK,

MINDK(3) TYPE C ,

END OF TY_MINDK,

BEGIN OF TY_WAERS,

WAERS(5) TYPE C ,

END OF TY_WAERS.

DATA : I_XK01 TYPE TABLE OF TY_XK01, "FOR HOLDING DATA FROM FLAT FILE

I_SUCCMESG TYPE TABLE OF TY_MESG, "FOR SUCCESS RECORDS DETAILS

I_ERRMESG TYPE TABLE OF TY_MESG, "FOR ERROR RECORDS DETAILS

I_ERROR TYPE TABLE OF TY_ERROR,

I_LIFNR TYPE TABLE OF TY_LIFNR,

I_BUKRS TYPE TABLE OF TY_BUKRS,

I_EKORG TYPE TABLE OF TY_EKORG,

I_KTOKK TYPE TABLE OF TY_KTOKK,

I_LAND1 TYPE TABLE OF TY_LAND1,

I_LANGU TYPE TABLE OF TY_LANGU,

I_AKONT TYPE TABLE OF TY_AKONT,

I_ZUAWA TYPE TABLE OF TY_ZUAWA,

I_MINDK TYPE TABLE OF TY_MINDK,

I_WAERS TYPE TABLE OF TY_WAERS,

I_FINALMESG TYPE TABLE OF TY_ERROR,

I_MESG TYPE TABLE OF TY_MESG.

&----


*& WORK AREA DECLARATION

&----


DATA: WA_XK01 TYPE TY_XK01, "FOR HOLDING DATA FROM FLAT FILE

WA_SUCCMESG TYPE TY_MESG, "FOR SUCCESS RECORDS DETAILS

WA_ERRMESG TYPE TY_MESG, "FOR ERROR RECORDS DETAILS

WA_ERROR TYPE TY_ERROR,

WA_LIFNR TYPE TY_LIFNR,

WA_BUKRS TYPE TY_BUKRS,

WA_EKORG TYPE TY_EKORG,

WA_KTOKK TYPE TY_KTOKK,

WA_LAND1 TYPE TY_LAND1,

WA_LANGU TYPE TY_LANGU,

WA_AKONT TYPE TY_AKONT,

WA_ZUAWA TYPE TY_ZUAWA,

WA_MINDK TYPE TY_MINDK,

WA_WAERS TYPE TY_WAERS,

WA_MESG TYPE TY_MESG,

WA_FINALMESG TYPE TY_ERROR.

INITIALIZATION.

SELECT LIFNR FROM LFA1 INTO TABLE I_LIFNR.

SELECT BUKRS FROM T001 INTO TABLE I_BUKRS .

SELECT EKORG FROM T024E INTO TABLE I_EKORG .

SELECT KTOKK FROM T077K INTO TABLE I_KTOKK .

SELECT LAND1 FROM T005 INTO TABLE I_LAND1.

SELECT SPRAS FROM T002 INTO TABLE I_LANGU.

SELECT SAKNR FROM SKA1 INTO TABLE I_AKONT .

SELECT ZUAWA FROM TZUN INTO TABLE I_ZUAWA .

SELECT MINDK FROM T059M INTO TABLE I_MINDK .

SELECT WAERS FROM TCURC INTO TABLE I_WAERS.

LOOP AT I_XK01 INTO WA_XK01.

TRANSLATE WA_XK01-LIFNR TO UPPER CASE.

READ TABLE I_LIFNR INTO WA_LIFNR WITH KEY LIFNR = WA_XK01-LIFNR.

IF SY-SUBRC = 0 .

CONCATENATE WA_MESG-MESG TEXT-100 WA_XK01-LIFNR TEXT-101 ' , ' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-BUKRS TO UPPER CASE.

READ TABLE I_BUKRS INTO WA_BUKRS WITH KEY BUKRS = WA_XK01-BUKRS.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-102 WA_XK01-BUKRS TEXT-103 ' , ' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-EKORG TO UPPER CASE.

READ TABLE I_EKORG INTO WA_EKORG WITH KEY EKORG = WA_XK01-EKORG.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-104 WA_XK01-EKORG TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-KTOKK TO UPPER CASE.

READ TABLE I_KTOKK INTO WA_KTOKK WITH KEY KTOKK = WA_XK01-KTOKK.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-105 WA_XK01-KTOKK TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-LAND1 TO UPPER CASE.

READ TABLE I_LAND1 INTO WA_LAND1 WITH KEY LAND1 = WA_XK01-LAND1.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-106 WA_XK01-LAND1 TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-LANGU TO UPPER CASE.

READ TABLE I_LANGU INTO WA_LANGU WITH KEY LANGU = WA_XK01-LANGU.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-107 WA_XK01-LANGU TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_AKONT INTO WA_AKONT WITH KEY AKONT = WA_XK01-AKONT.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-108 WA_XK01-AKONT TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_ZUAWA INTO WA_ZUAWA WITH KEY ZUAWA = WA_XK01-ZUAWA.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-109 WA_XK01-ZUAWA TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_MINDK INTO WA_MINDK WITH KEY MINDK = WA_XK01-MINDK.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-110 WA_XK01-MINDK TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-WAERS TO UPPER CASE.

READ TABLE I_WAERS INTO WA_WAERS WITH KEY WAERS = WA_XK01-WAERS.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-111 WA_XK01-WAERS TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

.

.

.

.

...

append wa_mesg to err_mesg.

endloop.

I am populating the error messages into workarea using concatenate statement.

Hope this solves the problem.

Reward points if helpful.

Thanks and Regards,

Narayana.

2 REPLIES 2
Read only

Former Member
0 Likes
435

Hi,

You have to create internal tables for all the mandatory fields. see the following code :

I am giving an example for XK01 Transaction.

TYPES:BEGIN OF TY_XK01,

LIFNR(10) TYPE C , "VENDOR'S ACCOUNT NUMBER

BUKRS(4) TYPE C , "COMPANY CODE

EKORG(4) TYPE C , "PURCHASING ORGANISATION

KTOKK(4) TYPE C , "VENDOR ACCOUNT GROUP

NAME1(35) TYPE C , "NAME1

SORTL(10) TYPE C , "SORT FIELD

STRAS(35) TYPE C , "STREET

PSTLZ(10) TYPE C , "POSTAL CODE

ORT01(35) TYPE C , "CITY

LAND1(3) TYPE C , "COUNTRY KEY

REGIO(3) TYPE C , "REGION

TIME_ZONE(6) TYPE C , "ADDRESS TIME ZONE

LANGU(1) TYPE C , "LANGUAGE KEY

TELF1(16) TYPE C , "TELEPHONE NUMBER

TELFX(31) TYPE C , "FAX NUMBER

SMTP_ADDR(241) TYPE C , "E-MAIL ADDRESS

URI_SCREEN(132) TYPE C , "UNIFORM RESOURCE LOCATOR

AKONT(10) TYPE C , "RECONCILITATION ACCOUNT

ZUAWA(3) TYPE C , "KEY FOR SORTING ACCORDING TO ASSIGNMENT NUMBERS

MINDK(3) TYPE C , "MINORITY INDICATORS

ALTKN(10) TYPE C , "PREVIOUS MASTER RECORD NUMBER

ZTERM(4) TYPE C , "TERMS OF PAYMENT KEY

ZWELS(10) TYPE C , "LIST OF THE PAYMENT METHODS

WAERS(5) TYPE C , "PURCHASE ORDER CURRENCY

END OF TY_XK01,

BEGIN OF TY_LIFNR,

LIFNR(10) TYPE C ,

END OF TY_LIFNR,

BEGIN OF TY_BUKRS,

BUKRS(4) TYPE C ,

END OF TY_BUKRS,

BEGIN OF TY_EKORG,

EKORG(4) TYPE C ,

END OF TY_EKORG,

BEGIN OF TY_KTOKK,

KTOKK(4) TYPE C ,

END OF TY_KTOKK,

BEGIN OF TY_LAND1,

LAND1(3) TYPE C ,

END OF TY_LAND1,

BEGIN OF TY_LANGU,

LANGU(1) TYPE C ,

END OF TY_LANGU,

BEGIN OF TY_AKONT,

AKONT(10) TYPE C ,

END OF TY_AKONT,

BEGIN OF TY_ZUAWA,

ZUAWA(3) TYPE C ,

END OF TY_ZUAWA,

BEGIN OF TY_MINDK,

MINDK(3) TYPE C ,

END OF TY_MINDK,

BEGIN OF TY_WAERS,

WAERS(5) TYPE C ,

END OF TY_WAERS.

DATA : I_XK01 TYPE TABLE OF TY_XK01, "FOR HOLDING DATA FROM FLAT FILE

I_SUCCMESG TYPE TABLE OF TY_MESG, "FOR SUCCESS RECORDS DETAILS

I_ERRMESG TYPE TABLE OF TY_MESG, "FOR ERROR RECORDS DETAILS

I_ERROR TYPE TABLE OF TY_ERROR,

I_LIFNR TYPE TABLE OF TY_LIFNR,

I_BUKRS TYPE TABLE OF TY_BUKRS,

I_EKORG TYPE TABLE OF TY_EKORG,

I_KTOKK TYPE TABLE OF TY_KTOKK,

I_LAND1 TYPE TABLE OF TY_LAND1,

I_LANGU TYPE TABLE OF TY_LANGU,

I_AKONT TYPE TABLE OF TY_AKONT,

I_ZUAWA TYPE TABLE OF TY_ZUAWA,

I_MINDK TYPE TABLE OF TY_MINDK,

I_WAERS TYPE TABLE OF TY_WAERS,

I_FINALMESG TYPE TABLE OF TY_ERROR,

I_MESG TYPE TABLE OF TY_MESG.

&----


*& WORK AREA DECLARATION

&----


DATA: WA_XK01 TYPE TY_XK01, "FOR HOLDING DATA FROM FLAT FILE

WA_SUCCMESG TYPE TY_MESG, "FOR SUCCESS RECORDS DETAILS

WA_ERRMESG TYPE TY_MESG, "FOR ERROR RECORDS DETAILS

WA_ERROR TYPE TY_ERROR,

WA_LIFNR TYPE TY_LIFNR,

WA_BUKRS TYPE TY_BUKRS,

WA_EKORG TYPE TY_EKORG,

WA_KTOKK TYPE TY_KTOKK,

WA_LAND1 TYPE TY_LAND1,

WA_LANGU TYPE TY_LANGU,

WA_AKONT TYPE TY_AKONT,

WA_ZUAWA TYPE TY_ZUAWA,

WA_MINDK TYPE TY_MINDK,

WA_WAERS TYPE TY_WAERS,

WA_MESG TYPE TY_MESG,

WA_FINALMESG TYPE TY_ERROR.

INITIALIZATION.

SELECT LIFNR FROM LFA1 INTO TABLE I_LIFNR.

SELECT BUKRS FROM T001 INTO TABLE I_BUKRS .

SELECT EKORG FROM T024E INTO TABLE I_EKORG .

SELECT KTOKK FROM T077K INTO TABLE I_KTOKK .

SELECT LAND1 FROM T005 INTO TABLE I_LAND1.

SELECT SPRAS FROM T002 INTO TABLE I_LANGU.

SELECT SAKNR FROM SKA1 INTO TABLE I_AKONT .

SELECT ZUAWA FROM TZUN INTO TABLE I_ZUAWA .

SELECT MINDK FROM T059M INTO TABLE I_MINDK .

SELECT WAERS FROM TCURC INTO TABLE I_WAERS.

LOOP AT I_XK01 INTO WA_XK01.

TRANSLATE WA_XK01-LIFNR TO UPPER CASE.

READ TABLE I_LIFNR INTO WA_LIFNR WITH KEY LIFNR = WA_XK01-LIFNR.

IF SY-SUBRC = 0 .

CONCATENATE WA_MESG-MESG TEXT-100 WA_XK01-LIFNR TEXT-101 ' , ' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-BUKRS TO UPPER CASE.

READ TABLE I_BUKRS INTO WA_BUKRS WITH KEY BUKRS = WA_XK01-BUKRS.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-102 WA_XK01-BUKRS TEXT-103 ' , ' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-EKORG TO UPPER CASE.

READ TABLE I_EKORG INTO WA_EKORG WITH KEY EKORG = WA_XK01-EKORG.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-104 WA_XK01-EKORG TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-KTOKK TO UPPER CASE.

READ TABLE I_KTOKK INTO WA_KTOKK WITH KEY KTOKK = WA_XK01-KTOKK.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-105 WA_XK01-KTOKK TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-LAND1 TO UPPER CASE.

READ TABLE I_LAND1 INTO WA_LAND1 WITH KEY LAND1 = WA_XK01-LAND1.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-106 WA_XK01-LAND1 TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-LANGU TO UPPER CASE.

READ TABLE I_LANGU INTO WA_LANGU WITH KEY LANGU = WA_XK01-LANGU.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-107 WA_XK01-LANGU TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_AKONT INTO WA_AKONT WITH KEY AKONT = WA_XK01-AKONT.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-108 WA_XK01-AKONT TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_ZUAWA INTO WA_ZUAWA WITH KEY ZUAWA = WA_XK01-ZUAWA.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-109 WA_XK01-ZUAWA TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

READ TABLE I_MINDK INTO WA_MINDK WITH KEY MINDK = WA_XK01-MINDK.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-110 WA_XK01-MINDK TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

TRANSLATE WA_XK01-WAERS TO UPPER CASE.

READ TABLE I_WAERS INTO WA_WAERS WITH KEY WAERS = WA_XK01-WAERS.

IF SY-SUBRC <> 0 .

CONCATENATE WA_MESG-MESG TEXT-111 WA_XK01-WAERS TEXT-103 ',' INTO WA_MESG-MESG.

ENDIF.

.

.

.

.

...

append wa_mesg to err_mesg.

endloop.

I am populating the error messages into workarea using concatenate statement.

Hope this solves the problem.

Reward points if helpful.

Thanks and Regards,

Narayana.

Read only

Former Member
0 Likes
434

Hi Saritha,

After uploading the data from flat file into internal tables, you check that data with values in database.

If that matches you can decide that it is valid.

for example you have uploaded material numbers from flat file to internal table.

let us suppose itab1 contains material numbers but at this stage we cannot say that they are valid.

for that you can use

select single matnr from mara into table itab2 for all entries of itab1 where matnr EQ itab1-matnr.

now you can work with this table for validating the data