If you can't get it to work that way (maybe throwing in some logic in the application code to ignore the sub-totals ?), I'd probably just go with separate queries. If the table is properly indexed, it's probably at least as fast as running some sort of loop/counter logic in your application code to get the totals. In fact, you could do it in one transaction by using UNION, though you have to make sure each column in the total query is the same type as its respective column in the main query, e.g.:
(
SELECT
userid, name, open_wip, clock_hrs, close_wip,
avail_hrs, sold_hrs, sold_amt,
cost_hrs, cost_amt, labour_gross,
margin, docs, unprod_hrs, sold_avail
FROM ReportData
)
UNION
(
SELECT
0, 'totals', SUM(open_wip), SUM(clock_hrs), SUM(close_wip),
SUM(avail_hrs), SUM(sold_hrs), SUM(sold_amt),
SUM(cost_hrs), SUM(cost_amt), SUM(labour_gross),
SUM(margin), SUM(docs), SUM(unprod_hrs), SUM(sold_avail)
FROM ReportData
)