My brain tickler of the day!
Report where the detail section contains two (2) sub-reports. The RecordSource queries for the two sub-reports are created in code, below are the string creations prior to execution of the query defs: (The queries run without error)
Code:
strQReceipts = "SELECT CategoryName, Sum(Credit) AS SumOfCredit FROM tblCategories " & _
"INNER JOIN tblRegister ON tblCategories.CatID = tblRegister.CatID " & _
"WHERE (((TDate) >= #" & curRptPerBeg & "# And (TDate) <= #" & curRptPerEnd & "#)) GROUP BY CategoryName, tblRegister.CatID " & _
"HAVING (((tblRegister.CatID)>0));"
strQExpense = "SELECT CategoryName, Sum(Debit) AS SumOfDebit FROM tblCategories " & _
"INNER JOIN tblRegister ON tblCategories.CatID = tblRegister.CatID " & _
"WHERE (((TDate) >= #" & curRptPerBeg & "# And (TDate) <= #" & curRptPerEnd & "#)) GROUP BY CategoryName, tblRegister.CatID " & _
"HAVING (((tblRegister.CatID)>0));"
Just note here that the "strReceipts" query when run produces 6 records when the date bracketing is set to the month of January, 2018............... my most important clue so far. There are 6 repetitions of the "Recripts" sub-report.

The design view of the parent report:
and its properties: 
When the "Receipts" query is run directly:

The properties of the "Receipts" sub-form container:

The SQL view of the "Receipts" query:
Code:
SELECT tblCategories.CategoryName, Sum(tblRegister.Credit) AS SumOfCredit
FROM tblCategories INNER JOIN tblRegister ON tblCategories.CatID = tblRegister.CatID
WHERE (((tblRegister.[TDate])>=#1/1/2018# And (tblRegister.[TDate])<=#1/31/2018#))
GROUP BY tblCategories.CategoryName, tblRegister.CatID
HAVING (((tblRegister.CatID)>0));
So, what's going on that I get 6 repetitions of the "Detail" section of the report?