Here's what I would do.
In your GL table (I'm assuming your income and expense categories are GL categories)
Have something like:
Code:
tbl_GL
GL_ID GL_Desc GL_Group
1 Income 1-1 1
2 Income 1-2 1
3 Income 1-3 1
4 Income 2-1 2
5 Income 2-2 2
6 Income 2-3 2
7 Expense 3-1 3
8 Expense 3-2 3
9 Expense 3-3 3
10 Expense 4-1 4
11 Expense 4-2 4
12 Expense 4-3 4
In your report sorting/grouping you can then split it by the GL group and put in subtotals for each of those groups.
From there you can either use domain functions (dsum) OR you can create four different subreports (one for each category) and perform the summing you want based on a formula that gets the value of the items reported in the subforms to get the reporting structure you want. You could also add meta groups (i.e either artificially or in the GL table defining, say, that all income has a meta group of one, all expenses have a meta group of 2) and have a second set of sorting and grouping based on the meta group.