I just solved a very similar problem. What seemed to fix it made for one of those "that shouldn't have mattered" moments.
I had 3 frames. The first contained data being passed by parameters and selected in from the after parameter form program unit. It should appear once at the beginning of the report.
The second frame had headers and a repeating group that would be a shorter set of records, usually less than 20 and almost always less than 100.
The third frame had headers and a repeating group that would contain detail records sometimes into the hundreds.
My symptoms were that I would get a complete correct report duplicated over and over. With a little investigation, I noticed that the number of times my report repeated itself matched the number of records in my first repeating group. In other words, if I had 5 records in the second frame's repeating group, I got the report duplicated 5 times, one right after the other.
After several days of trying everything (including finding your post with unfortunately no answer attached to it), I stumbled across this solution:
The query for the repeating group was like this:
select col1,col2,col3,count(*) alias1 from
(select decode... col1, decode... col2,case...col3
from table where ...)
group by col1,col2,col3
order by col1,col2
I changed the sql to:
select col1,col2,col3,alias1 from (
select col1,col2,col3,count(*) alias1 from
(select decode... col1, decode... col2,case...col3
from table where ...)
group by col1,col2,col3
order by col1,col2)
So, all I really added was an outer select wrapping everything else I already had in paretheses.
I don't know why this fixed it, but it did. I hope this helps you.