Skip to Content
0
Former Member
Sep 16, 2011 at 04:32 AM

Collect statement not working properly

1086 Views

hi all,

in the below code i used collect statement to collect data from 3 differnet internal tables and then display in one final table.

but in the output i am getting wrong values.

 6609001
               10,000.00           23,819.04         23,819.04          2,601.00    " last 3 coloums are wrong values
 A5400   57,495.36           95,276.16         95,276.16         10,404.00    " last 3 coloums are wrong values
 28         67,495.36          119,095.20        119,095.20         13,005.00    " last 3 coloums are wrong values

here is the code

REPORT  ZTEMP13 no standard page heading LINE-SIZE 300.
  perform actual.
  CLEAR WA_BSEG.
  perform sply.
  CLEAR WA_BSEG1.
  perform lyac.
  CLEAR WA_BSEG2.
  perform TACT.
  CLEAR WA_BSEG3.
  perform pri_actual.
  perform final.
*&---------------------------------------------------------------------*
*&      Form  ACTUAL
FORM ACTUAL .
  SELECT hkont
  belnr
  gjahr
  KOSTL
  AUFNR
  BUKRS
  PSWBT
  WRBTR FROM BSEG
  INTO TABLE IT_BSEG
  WHERE GJAHR EQ S_GJAHR
  AND HKONT IN S_HKONT
  and kostl in s_kostl.
  IF not it_bseg[] IS INITIAL.
    SELECT belnr
    GJAHR
    MONAT
    BUKRS
    BUDAT FROM BKPF
    INTO TABLE IT_BKPF
    FOR ALL ENTRIES IN IT_BSEG
    WHERE MONAT eq s_monat
          AND belnr = it_BSEG-belnr
          AND GJAHR = it_BSEG-GJAHR
          AND BUKRS = it_BSEG-BUKRS.
  ENDIF.
ENDFORM.                    " ACTUAL
*&---------------------------------------------------------------------*
*&      Form  PRI_ACTUAL
FORM PRI_ACTUAL .
  sort it_bseg by hkont aufnr kostl pswbt.
  LOOP AT IT_BSEG INTO WA_BSEG.
    wa_coll-hkont = wa_bseg-hkont.
    wa_coll-aufnr = wa_bseg-aufnr.
    wa_coll-kostl = wa_bseg-kostl.
    wa_coll-pswbt = wa_bseg-pswbt.
    read table IT_BSEG1 INTO WA_BSEG1 with key hkont = wa_coll-hkont.
    wa_coll-hkont1 = wa_bseg1-hkont.
    wa_coll-aufnr1 = wa_bseg1-aufnr.
    wa_coll-kostl1 = wa_bseg1-kostl.
    wa_coll-pswbt1 = wa_bseg1-pswbt.
    read table IT_BSEG2 INTO WA_BSEG2 with key hkont = wa_coll-hkont.
    wa_coll-hkont2 = wa_bseg2-hkont.
    wa_coll-aufnr2 = wa_bseg2-aufnr.
    wa_coll-kostl2 = wa_bseg2-kostl.
    wa_coll-pswbt2 = wa_bseg2-pswbt.
    read table IT_BSEG3 INTO WA_BSEG3 with key hkont = wa_coll-hkont.
    wa_coll-hkont3 = wa_bseg3-hkont.
    wa_coll-aufnr3 = wa_bseg3-aufnr.
    wa_coll-kostl3 = wa_bseg3-kostl.
    wa_coll-pswbt3 = wa_bseg3-pswbt.
    collect wa_coll into it_coll.
    clear : wa_coll,wa_bseg3,wa_bseg2,wa_bseg1.
  endloop.
ENDFORM.                    " PRI_ACTUAL
*&---------------------------------------------------------------------*
*&      Form  SPLY
*&---------------------------------------------------------------------*
FORM SPLY .
  S_GJAHR1 = S_GJAHR - 1.
  SELECT hkont
  belnr
  gjahr
  KOSTL
  AUFNR
  BUKRS
  PSWBT
  WRBTR FROM BSEG
  INTO TABLE IT_BSEG1
  WHERE GJAHR EQ S_GJAHR1
  AND HKONT IN S_HKONT
  and kostl in s_kostl.
  IF not it_bseg1[] IS INITIAL.
    SELECT belnr
    GJAHR
    MONAT
    BUKRS
    BUDAT FROM BKPF
    INTO TABLE IT_BKPF1
    FOR ALL ENTRIES IN IT_BSEG1
    WHERE MONAT eq s_monat
          AND belnr = it_BSEG1-belnr
          AND GJAHR = it_BSEG1-GJAHR
          AND BUKRS = it_BSEG1-BUKRS.
  endif.
  clear s_gjahr1.
ENDFORM.                    " SPLY
*&---------------------------------------------------------------------*
*&      Form  LYAC
FORM LYAC .

  S_GJAHR1 = S_GJAHR - 1.

  SELECT gjahr
         hkont
         KOSTL
         AUFNR
         BUKRS
         PSWBT
         belnr
         WRBTR FROM BSEG
         INTO TABLE IT_BSEG2
         WHERE GJAHR EQ S_GJAHR1
         AND   HKONT IN S_HKONT
         and   kostl in s_kostl.
  clear s_gjahr1.
ENDFORM.                    " LYAC
*&---------------------------------------------------------------------*
*&      Form  TACT
FORM TACT .
  SELECT hkont
         belnr
         gjahr
         KOSTL
         AUFNR
         BUKRS
         PSWBT
         WRBTR FROM BSEG
         INTO TABLE IT_BSEG3
         WHERE GJAHR EQ S_GJAHR
         AND HKONT IN S_HKONT
         and kostl in s_kostl.

  IF not it_bseg3[] IS INITIAL.
    SELECT belnr
           GJAHR
           MONAT
           BUKRS
           BUDAT FROM BKPF
           INTO TABLE IT_BKPF3
           FOR ALL ENTRIES IN IT_BSEG3
           WHERE MONAT gt 0 and monat le s_monat
           AND belnr = it_BSEG3-belnr
           AND GJAHR = it_BSEG3-GJAHR
           AND BUKRS = it_BSEG3-BUKRS.
  ENDIF.
ENDFORM.                    " TACT

Moderator message : Duplicate post locked. Continue with Original thread : [collect statement not working properly |;

Edited by: Vinod Kumar on Sep 16, 2011 1:38 PM