Socavi, lo que tienes es un problema de algoritmo. Es decir, haces
Código COBOL:
INVOKE Lista 'Add' USING 1 1 RETURNING RETORNO
MOVE 'ListItems'(RETORNO) OF Lista TO LINEA
fuera del IF, así que por cada registro se crea un nuevo ListItem.
Hazlo así:
Código COBOL:
move 0 to TOTMUNIPOB TOTMUNISUP
close munici.
open input MUNICI.
INITIALIZE REGMUNI.
invoke Lista 'Clear'
move ' ' to finfic move 0 to cuantos
perform until finfic = 's'
read MUNICI next record at end move 's' to finfic
not at end
IF MUNIPRO = V-COD
INVOKE Lista 'Add' USING 1 1 RETURNING RETORNO *> modivo
MOVE 'ListItems'(RETORNO) OF Lista TO LINEA *> dentro del IF
MOVE MUNICOD TO 'Text'(1) OF LINEA
MOVE MUNICP TO 'Text'(2) OF LINEA
move MUNINOM to 'Text'(3) of linea
move MUNIGEN TO 'Text'(4) of linea
move MUNIPOB to 'Text'(5) of linea
move MUNISUP to 'Text'(6) of linea
perform calcul thru fi-calcul
move MUNIKM TO 'Text'(8) of linea
add 1 to cuantos
END-IF
end-read
end-perform.
close MUNICI.