cancel
Showing results for 
Search instead for 
Did you mean: 

How to skip duplicate records in End Routine

Former Member
0 Kudos

Hi All,

I have written End routine in Transformation to lookup and  get "DOC_NUMBER" and "NETVAL_INV"  from /BIC/AZOFIBIS00 while loading data from DSO1  to DSO2. The number of records in "DSO1" say for example 14 records and no of records in "BIC/AZOFIBIS00" in 4 records .

"BILL_NUMBER" in <RESULT_FIELDS> have duplicate records , because of that KF "NETVAL_INV"  entered  multiple times  in DSO2 .How to skip duplicate records  while doing  lookup.


Please see code.

DATA : ITAB TYPE STANDARD TABLE OF /BIC/AZOFIBIS00.

DATA : WA_ITAB TYPE  /BIC/AZOFIBIS00.

LOOP AT RESULT_PACKAGE  ASSIGNING <RESULT_FIELDS>.

SELECT * FROM /BIC/AZOFIBIS00 INTO TABLE ITAB

WHERE /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO

and

DOC_type = <RESULT_FIELDS>-doc_type and

DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

READ TABLE ITAB INTO WA_ITAB WITH KEY

/BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO.

       IF SY-SUBRC = 0.

       MOVE WA_ITAB-BILL_NUM TO <RESULT_FIELDS>-DOC_NUMBER.

       MOVE WA_ITAB-NETVAL_INV TO <RESULT_FIELDS>-NETVAL_INV.

       ENDIF.

ENDLOOP.

Thanks

Hari

Accepted Solutions (1)

Accepted Solutions (1)

fcorodriguezl
Contributor
0 Kudos

Hi Hari!

Try something like this.

Regards.


DATA : ITAB TYPE STANDARD TABLE OF /BIC/AZOFIBIS00.

DATA : WA_ITAB TYPE  /BIC/AZOFIBIS00.

SELECT *

INTO TABLE ITAB

FROM /BIC/AZOFIBIS00

FOR ALL ENTRIES IN RESULT_FIELDS

WHERE /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO and

      DOC_type  = <RESULT_FIELDS>-doc_type and

      DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

IT_RESULT[] = RESULT_PACKAGE[].

LOOP AT RESULT_PACKAGE  ASSIGNING <RESULT_FIELDS>.

    READ TABLE ITAB INTO WA_ITAB

    WITH KEY /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO TRANSPORTING NO FIELDS.

    IF SY-SUBRC EQ 0.

      LOOP DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

            MOVE WA_ITAB-BILL_NUM   TO IT_RESULT-DOC_NUMBER.

            MOVE WA_ITAB-NETVAL_INV TO IT_RESULT-NETVAL_INV.

            DESCRIBE TABLE IT_RESULT LINES LV_LIN.

            IT_RESULT-DATAPACKID = <RESULT_FIELDS>-DATAPACKID.

            IT_RESULT-RECORD = LV_LIN.
            APPEND IT_RESULT.

      ENDIF.

ENDLOOP.

RESULT_PACKAGE[] = IT_RESULT[].

Former Member
0 Kudos

Hi Fancisco,

Thanks for your reply .

I have tried your code ,but I am getting following error message .

"The field "RESULT_FIELDS" is unknown, but there is a field with the similar name "<RESULT_FIELDS>". "<RESULT_FIELDS>".

If I add  <RESULT_FIELDS> system says "occurs n"  specification is missing .

Thanks

Hari

RafkeMagic
Active Contributor
0 Kudos

there are quite a few errors in that code... for starters


Francisco Rodríguez wrote:

DATA : ITAB TYPE STANDARD TABLE OF /BIC/AZOFIBIS00.

DATA : WA_ITAB TYPE  /BIC/AZOFIBIS00.

SELECT *

INTO TABLE ITAB

FROM /BIC/AZOFIBIS00

FOR ALL ENTRIES IN RESULT_FIELDS

WHERE /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO and

      DOC_type  = <RESULT_FIELDS>-doc_type and

      DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

should probably be (and this is only to correct the syntax... as you should not use "select *" and be carefull with "for all entries")

select *

into table itab

from /bic/azofibis

for all entries in result_package

where /bic/zsitsstno eq result_package-/bic/zsitsstno

and doc_type eq result_package-doc_type

and doc_number eq result_package-bill_num.

RamanKorrapati
Active Contributor
0 Kudos

from standard code it might be maintained.

please check at above declaration area.

Like   <RESULT_FIELDS>TYPE _ty_s_TG_1.

please check your endroutine whole code.

Former Member
0 Kudos

Hi Ram,

if I define  DATA: RESULT_PACKAGE TYPE  _ty_s_TG_1. system says "RESULT_PACKAGE " already defined , or if i define

If I define as DATA: <RESULT_PACKAGE> TYPE  _ty_s_TG_1. system says Names may only consist of the characters "A-Z", "0-9" and "_".

I have coped total code.

Thanks

Hari

RamanKorrapati
Active Contributor
0 Kudos

Hi ,

You don't need to declare Result_package or Result_fields.

Those are standard structures.

You just define one structure and internal table(which already done on your code)

in Franc's reply, just replace Result_fields with result_package and do the syntax check.

If there is an ABAPer, please take his help.

Thanks

fcorodriguezl
Contributor
0 Kudos

Hi!

Raf are right!

You need apply a little change.

SELECT *

INTO TABLE ITAB

FOR ALL ENTRIES IN RESULT_PACKAGE

WHERE /BIC/ZSITSSTNO =<result_fields>-/BIC/ZSITSSTNO and

      DOC_type   =<result_fields>-doc_type and

      DOC_NUMBER =<result_fields>-BILL_NUM.

Regards.

Former Member
0 Kudos

Hi Francisco,

Thanks for your reply.

I am getting following errors with Francisco code.

I m getting following error after correct it as RESULT_PACKAGE.

SELECT *

INTO TABLE ITAB

FROM /BIC/AZOFIBIS00

FOR ALL ENTRIES IN RESULT_PACKAGE

WHERE /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO and

      DOC_type  = <RESULT_FIELDS>-doc_type and

      DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

Error:- The WHERE condition does not refer to the FOR ALL ENTRIES table

IT_RESULT[] = RESULT_PACKAGE[].

LOOP AT RESULT_PACKAGE  ASSIGNING <RESULT_FIELDS>.

    READ TABLE ITAB INTO WA_ITAB

    WITH KEY /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO

    TRANSPORTING NO FIELDS.

    IF SY-SUBRC EQ 0.

.

Error : "TRANSPORTING NO FIELDS"will not fill the output area. The addition des not make sense here.


IF SY-SUBRC EQ 0.

      LOOP

      DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

            MOVE WA_ITAB-BILL_NUM   TO IT_RESULT-DOC_NUMBER.

            MOVE WA_ITAB-NETVAL_INV TO IT_RESULT-NETVAL_INV.

            DESCRIBE TABLE IT_RESULT LINES LV_LIN.

            IT_RESULT-DATAPACKID = <RESULT_FIELDS>-DATAPACKID.

            IT_RESULT-RECORD = LV_LIN.

            APPEND IT_RESULT.

      ENDIF.

ENDLOOP.

RESULT_PACKAGE[] = IT_RESULT[].

Error : Loop at or . expected after Loop.


Thanks

Hari .

anshu_lilhori
Active Contributor
0 Kudos

for first error replace <RESULT_FIELDS> with  RESULT_PACKAGE.

Remove transporting no fields lines.

Remove the third loop syntax.I assume it was typed by mistake in original code.

See if it gives other syntax error or not.

Regards,

AL

Former Member
0 Kudos

Hi Anshu,

Code looks like this

DATA : ITAB TYPE STANDARD TABLE OF /BIC/AZOFIBIS00.

DATA : WA_ITAB TYPE  /BIC/AZOFIBIS00.

DATA : IT_RESULT TYPE _ty_t_TG_1.

SELECT *

INTO TABLE ITAB

FROM /BIC/AZOFIBIS00

*FOR ALL ENTRIES IN RESULT_PACKAGE

WHERE /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO and

      DOC_type  = <RESULT_FIELDS>-doc_type and

      DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

IT_RESULT[] = RESULT_PACKAGE[].

LOOP AT RESULT_PACKAGE  ASSIGNING <RESULT_FIELDS>.

    READ TABLE ITAB INTO WA_ITAB

    WITH KEY /BIC/ZSITSSTNO = <RESULT_FIELDS>-/BIC/ZSITSSTNO.

*TRANSPORTING NO FIELDS.

    IF SY-SUBRC EQ 0.

*LOOP

            DOC_NUMBER = <RESULT_FIELDS>-BILL_NUM.

            MOVE WA_ITAB-BILL_NUM   TO IT_RESULT-DOC_NUMBER.

            MOVE WA_ITAB-NETVAL_INV TO IT_RESULT-NETVAL_INV.

            DESCRIBE TABLE IT_RESULT LINES LV_LIN.

            IT_RESULT-DATAPACKID = <RESULT_FIELDS>-DATAPACKID.

            IT_RESULT-RECORD = LV_LIN.

            APPEND IT_RESULT.

      ENDIF.

ENDLOOP.

RESULT_PACKAGE[] = IT_RESULT[].

ERROR : Field "DOC_NUMBER" is unknown. It is neither in one of the specified tables nor defined by a "DATA" statement. "DATA" statement.

I do not know why we need to define "DOC_NUMBER".

Thanks

hari

Answers (0)