2013 May 13 9:39 AM
Experts,
I am trying to use collect statement to get the sum of certain fields, but am only able to read the last record row instead of summing all the above lines.
Appending is my code, please guide me where am I wrong...
loop at it_fy into wa_fy.
*if count > 0 .
*
* WAIVED_PRIN = wa_final-WAIVED_PRIN + WA_ZCATR_DVBAR_VW-MIGPR.
* WAIVED_LPSC = wa_final-WAIVED_LPSC + WA_ZCATR_DVBAR_VW-MIGLP.
* WAIVEDACCRLP = wa_final-WAIVEDACCRLP + WA_ZCATR_DVBAR_VW-MIGAL.
* WAIVED_NTA_P = wa_final-WAIVED_NTA_P + WA_ZCATR_DVBAR_VW-MIGPRN.
* WAIVED_NTA_L = wa_final-WAIVED_NTA_L + WA_ZCATR_DVBAR_VW-MIGLPN.
* WAIVED_NTACRLP = wa_final-WAIVED_NTACRLP + WA_ZCATR_DVBAR_VW-MIGALN.
* RECOVERABLE_PRIN = wa_final-RECOVERABLE_PRIN + WA_ZCATR_DVBAR_VW-MIGPR.
* RECOVERABLE_LPSC = wa_final-RECOVERABLE_LPSC + WA_ZCATR_DVBAR_VW-MIGLP.
* RECOVERABLE_ACCRLP = wa_final-RECOVERABLE_ACCRLP + WA_ZCATR_DVBAR_VW-MIGAL.
* RECOVERABLE_NTA_P = wa_final-RECOVERABLE_NTA_P + WA_ZCATR_DVBAR_VW-MIGPRN.
* RECOVERABLE_NTA_L = wa_final-RECOVERABLE_NTA_L + WA_ZCATR_DVBAR_VW-MIGLPN.
* RECOVERABLE_NTACRLP = wa_final-RECOVERABLE_NTACRLP + WA_ZCATR_DVBAR_VW-MIGALN.
*
*
* ENDIF.
COLLECT wa_fy INTO it_fy .
endloop.
LOOP AT IT_ZCATR_DVBAR INTO WA_ZCATR_DVBAR.
WA_FINAL-VKONT = WA_ZCATR_DVBAR-VKONT.
WA_FINAL-DVBREF = WA_ZCATR_DVBAR-DVBDOC.
WA_FINAL-DVBST = WA_ZCATR_DVBAR-DVBST.
WA_FINAL-VKONA = WA_ZCATR_DVBAR-VKONA.
WA_FINAL-OLDKNO = WA_ZCATR_DVBAR-OLDKNO.
WA_FINAL-ERDAT = WA_ZCATR_DVBAR-ERDAT.
WA_FINAL-LEGAL = WA_ZCATR_DVBAR-LEGAL.
WA_FINAL-CSFNO = WA_ZCATR_DVBAR-CSFNO.
WA_FINAL-ORGPR = WA_ZCATR_DVBAR-ORGPR.
WA_FINAL-ORGLP = WA_ZCATR_DVBAR-ORGLP.
WA_FINAL-ORGPRN = WA_ZCATR_DVBAR-ORGPRN.
WA_FINAL-ORGLPN = WA_ZCATR_DVBAR-ORGLPN.
WA_FINAL-MIGPR = WA_ZCATR_DVBAR-MIGPR.
WA_FINAL-MIGLP = WA_ZCATR_DVBAR-MIGLP.
WA_FINAL-MIGAL = WA_ZCATR_DVBAR-MIGAL.
WA_FINAL-MIGPRN = WA_ZCATR_DVBAR-MIGPRN.
WA_FINAL-MIGLPN = WA_ZCATR_DVBAR-MIGLPN.
WA_FINAL-MIGALN = WA_ZCATR_DVBAR-MIGALN.
READ TABLE IT_FKKVKP INTO WA_FKKVKP WITH KEY VKONT = WA_ZCATR_DVBAR-VKONT BINARY SEARCH.
IF SY-SUBRC = 0.
WA_FINAL-GPART = WA_FKKVKP-GPART.
ENDIF.
READ TABLE IT_EKUN INTO WA_EKUN WITH KEY PARTNER = WA_FKKVKP-GPART BINARY SEARCH.
IF SY-SUBRC = 0.
WA_FINAL-CLASSIFICATION = WA_EKUN-CLASSIFICATION.
ENDIF.
COUNT = 0.
LOOP AT IT_ZCATR_DVBAR_VW INTO WA_ZCATR_DVBAR_VW WHERE DVBREF = WA_ZCATR_DVBAR-DVBDOC.
COUNT = COUNT + 1 .
IF SY-SUBRC = 0.
IF WA_ZCATR_DVBAR_VW-DVBST eq 'W' .
wa_final-WAIVED_PRIN = WA_ZCATR_DVBAR_VW-MIGPR.
wa_final-WAIVED_LPSC = WA_ZCATR_DVBAR_VW-MIGLP.
wa_final-WAIVEDACCRLP = WA_ZCATR_DVBAR_VW-MIGAL.
wa_final-WAIVED_NTA_P = WA_ZCATR_DVBAR_VW-MIGPRN.
wa_final-WAIVED_NTA_L = WA_ZCATR_DVBAR_VW-MIGLPN.
wa_final-WAIVED_NTACRLP = WA_ZCATR_DVBAR_VW-MIGALN.
ELSEIF WA_ZCATR_DVBAR_VW-DVBST EQ 'R'.
wa_final-RECOVERABLE_PRIN = WA_ZCATR_DVBAR_VW-MIGPR.
wa_final-RECOVERABLE_LPSC = WA_ZCATR_DVBAR_VW-MIGLP.
wa_final-RECOVERABLE_ACCRLP = WA_ZCATR_DVBAR_VW-MIGAL.
wa_final-RECOVERABLE_NTA_P = WA_ZCATR_DVBAR_VW-MIGPRN.
wa_final-RECOVERABLE_NTA_L = WA_ZCATR_DVBAR_VW-MIGLPN.
wa_final-RECOVERABLE_NTACRLP = WA_ZCATR_DVBAR_VW-MIGALN.
ENDIF.
ENDIF.
ENDLOOP.
read table it_fy into wa_fy WITH KEY DVBREF = WA_ZCATR_DVBAR-DVBDOC .
if sy-subrc = 0.
wa_final-WAIVED_PRIN = wa_fy-WAIVED_PRIN.
wa_final-WAIVED_LPSC = wa_fy-WAIVED_LPSC.
wa_final-WAIVEDACCRLP = wa_fy-WAIVEDACCRLP.
wa_final-WAIVED_NTA_P = wa_fy-WAIVED_NTA_P.
wa_final-WAIVED_NTA_L = wa_fy-WAIVED_NTA_L.
wa_final-WAIVED_NTACRLP = wa_fy-WAIVED_NTACRLP .
wa_final-RECOVERABLE_PRIN = wa_fy-RECOVERABLE_PRIN.
wa_final-RECOVERABLE_LPSC = wa_fy-RECOVERABLE_LPSC.
wa_final-RECOVERABLE_ACCRLP = wa_fy-RECOVERABLE_ACCRLP.
wa_final-RECOVERABLE_NTA_P = wa_fy-RECOVERABLE_NTA_P.
wa_final-RECOVERABLE_NTA_L = wa_fy-RECOVERABLE_NTA_L.
wa_final-RECOVERABLE_NTACRLP = wa_fy-RECOVERABLE_NTACRLP.
ENDIF.
WA_FINAL-CLOSING_PRIN = WA_FINAL-MIGPR - WAIVED_PRIN - RECOVERABLE_PRIN .
WA_FINAL-CLOSING_LPSC = WA_FINAL-MIGLP - WAIVED_LPSC - RECOVERABLE_LPSC.
WA_FINAL-CLOSING_ACCRLP = WA_FINAL-MIGAL - WAIVEDACCRLP - RECOVERABLE_ACCRLP.
WA_FINAL-CLOSING_NTA_P = WA_FINAL-MIGPRN - WAIVED_NTA_P - RECOVERABLE_NTA_P.
WA_FINAL-CLOSING_NTA_L = WA_FINAL-MIGLPN - WAIVED_NTA_L - RECOVERABLE_NTA_L.
WA_FINAL-CLOSING_NTACRLP = WA_FINAL-MIGALN - WAIVED_NTACRLP - RECOVERABLE_NTACRLP.
APPEND wa_fy to it_fy.
APPEND WA_FINAL TO IT_FINAL.
CLEAR: WA_ZCATR_DVBAR, WA_ZCATR_DVBAR_VW, WA_FINAL, WA_FKKVKP, wa_ekun.
ENDLOOP.
ENDFORM. " GET_DATA
2013 May 13 10:14 AM
Hi Mazal,
I see the COLLECT statement only in the first loop in the code extract you shared so I will restrict myself to my observation regarding to that loop only. You are looping and collecting in the same table. You should use a separate table. Plus, I suggest that you read the F1 help available for the COLLECT statement and that should help you identify the issue.
Regards,
Akshat
2013 May 13 10:23 AM
Hi,
Collect the result in some other internal table.
like: COLLECT wa INTO itab.
Also prerequisite for the use of this statement is that wa is compatible with the row type of itab and all components that are not part of the table key must have a numeric data type (i, p, f).