I don't have time to check in on all the forums, as someone else mentioned, we are volunteers, well enough of that line...
you can create a shared variable (or global, your choice) to save a value and use it later, like:
shared numbervar lastTotal;
local numbervar thisTotal := sum({table.field}, {group});
local numbervar dispTotal := lastTotal - thisTotal;
lastTotal := lastTotal - thisTotal;
dispTotal;
or something like that if you wanted.
rearranging the groups is another issue, and it depends on what you want to rearrange on. You might be able to reorder them based on an Aggregate function, like SUM, but I haven't tried it myself.
Usually, my rule of thumb is you can change the grouping dynamically by using values that is in your 'raw' data, whatever is in your tables or is the output of a stored proc or view, and while an Aggregate is kinda in the 'raw' data, I am not sure that CR will do it.
If you wanted to rearrange them based on a shared variable, it won't work, as the value is not known until after group is done being printed, at which point it is too late rearrange the data.
HTH