yeah, and the only thing that makes sense is to suppress detail B. I have had thoughts on how I would like it to work, but the bottom line is, Crystal 'hides' things when they are suppressed, not skipping the row of data.
If there is logic for suppression for detail a, I would try and use that to suppress the correct rows in the subreport so that detail b matches detail a.
Another answer would be use a stored proc to retrieve the data and remove the suppressed rows at this time, so that they are not available for the subreport...
I use only 1 dataset in my reports which would have all of the data for, in this case, PersonID on one line. Multiple rows, with lots of repeated data, but this allows me to 1) hit the database only 1 time, 2) get rid of the subreport (potential performance detractor due to multiple hits to database) 3) preview all the data and make sure that it is correct.
HTH