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: 

Search for records logic doesn't seem to work

Former Member
0 Kudos

Hi,

I am not sure why my logic finds a record in table itab_kna1 but then also add records to the table error: How would I code the logic to loop through table itab_data and do a lookup to itab_kna1 to see if there is a records. If not found then enter in the error table itab_error. It's entering some records found in the error table and the results table.

Thanks

SELECT SORTL KUNNR KTOKD

INTO CORRESPONDING FIELDS OF TABLE ITAB_KNA1

FROM KNA1

WHERE KTOKD = 'ZC01'.

SORT: ITAB_KNA1 BY SORTL,

ITAB_DATA BY CUST_NO.

LOOP AT ITAB_DATA.

READ TABLE ITAB_KNA1 WITH KEY SORTL = ITAB_DATA-CUST_NO

BINARY SEARCH.

IF SY-SUBRC = 0.

ITAB_RESULTS-KUNNR = ITAB_KNA1-KUNNR.

ITAB_RESULTS-CUST_NO = ITAB_KNA1-SORTL.

ITAB_RESULTS-SYEAR = ITAB_DATA-SALES_YEAR.

ITAB_RESULTS-CALMONTH = ITAB_DATA-SALES_MONTH.

APPEND ITAB_RESULTS.

ELSE.

ITAB_ERROR-KUNNR = ITAB_KNA1-KUNNR.

ITAB_ERROR-CUST_NO = ITAB_KNA1-SORTL.

ITAB_ERROR-SYEAR = ITAB_DATA-SALES_YEAR.

ITAB_ERROR-CALMONTH = ITAB_DATA-SALES_MONTH.

APPEND ITAB_ERROR.

ENDIF.

ENDLOOP.

1 ACCEPTED SOLUTION

ferry_lianto
Active Contributor
0 Kudos

Hi Will,

Please try this.


SELECT SORTL KUNNR KTOKD
INTO CORRESPONDING FIELDS OF TABLE ITAB_KNA1
FROM KNA1
WHERE KTOKD = 'ZC01'.

SORT: ITAB_KNA1 BY SORTL,
ITAB_DATA BY CUST_NO.

LOOP AT ITAB_DATA.
READ TABLE ITAB_KNA1 WITH KEY SORTL = ITAB_DATA-CUST_NO
BINARY SEARCH.

IF SY-SUBRC = 0.
ITAB_RESULTS-KUNNR = ITAB_KNA1-KUNNR.
ITAB_RESULTS-CUST_NO = ITAB_KNA1-SORTL.
ITAB_RESULTS-SYEAR = ITAB_DATA-SALES_YEAR.
ITAB_RESULTS-CALMONTH = ITAB_DATA-SALES_MONTH. 
APPEND ITAB_RESULTS.
CLEAR ITAB_RESULTS                  <---  add this line
ELSE.
ITAB_ERROR-KUNNR = ITAB_DATA-CUST_NO.  <--- Change this line
ITAB_ERROR-CUST_NO = ITAB_DATA-SORTL.  <--- Change this line
ITAB_ERROR-SYEAR = ITAB_DATA-SALES_YEAR.
ITAB_ERROR-CALMONTH = ITAB_DATA-SALES_MONTH.
APPEND ITAB_ERROR.
CLEAR ITAB_ERROR.                   <---  add this line

ENDIF.
ENDLOOP.

Regards,

Ferry Lianto

2 REPLIES 2

ferry_lianto
Active Contributor
0 Kudos

Hi Will,

Please try this.


SELECT SORTL KUNNR KTOKD
INTO CORRESPONDING FIELDS OF TABLE ITAB_KNA1
FROM KNA1
WHERE KTOKD = 'ZC01'.

SORT: ITAB_KNA1 BY SORTL,
ITAB_DATA BY CUST_NO.

LOOP AT ITAB_DATA.
READ TABLE ITAB_KNA1 WITH KEY SORTL = ITAB_DATA-CUST_NO
BINARY SEARCH.

IF SY-SUBRC = 0.
ITAB_RESULTS-KUNNR = ITAB_KNA1-KUNNR.
ITAB_RESULTS-CUST_NO = ITAB_KNA1-SORTL.
ITAB_RESULTS-SYEAR = ITAB_DATA-SALES_YEAR.
ITAB_RESULTS-CALMONTH = ITAB_DATA-SALES_MONTH. 
APPEND ITAB_RESULTS.
CLEAR ITAB_RESULTS                  <---  add this line
ELSE.
ITAB_ERROR-KUNNR = ITAB_DATA-CUST_NO.  <--- Change this line
ITAB_ERROR-CUST_NO = ITAB_DATA-SORTL.  <--- Change this line
ITAB_ERROR-SYEAR = ITAB_DATA-SALES_YEAR.
ITAB_ERROR-CALMONTH = ITAB_DATA-SALES_MONTH.
APPEND ITAB_ERROR.
CLEAR ITAB_ERROR.                   <---  add this line

ENDIF.
ENDLOOP.

Regards,

Ferry Lianto

0 Kudos

Hi Ferry,

Your suggestions worked like a charm.

Thanks and regards

Will