So I played around and I've gotten to this query below which seems nearly perfect. The only downside is that there is a potential for an invoice to show up in multiple months in a very specific situation. That situation would be if a payment was applied to an invoice that didn't clear out the balance in one month and in a subsequent month another payment was applied to clear out the balance. If this query was run for the first month it would show up as paid in that month as well as showing up as paid in the latter month. Thinking of possible ways to address this.
The only other tweak I might want is to create a version that just runs the current month without any inputs form the user running the query. I know that I can use something like "GETDATE()" but what I'd want is to get the current month and run it from the 1st till the last day of the month.
Query Structure: (you can see that I did a UNION to include all invoices which show open balances as well)
SELECT
T3.[SlpName],
T0.[DocNum],
T0.[DocDate],
T0.[CardName],
(T0.DocTotal + T0.DpmAmnt) [Total Invoiced],
(T0.DpmAmnt + T0.PaidToDate)[Paid],
(T0.DocTotal - T0.PaidToDate) [Unpaid],
'Paid' AS 'Paid/Unpaid',
T2.[DocNum],
T2.[DocDate]
FROM
OINV T0 WITH (NOLOCK)
LEFT JOIN RCT2 T1 WITH (NOLOCK) ON T0.DocEntry = T1.DocEntry AND T1.InvType = '13'
LEFT JOIN ORCT T2 WITH (NOLOCK) ON T1.DocNum = T2.DocNum
INNER JOIN OSLP T3 WITH (NOLOCK) ON T0.SlpCode = T3.SlpCode
WHERE (T0.DocDate >= [%0] AND T0.DocDate <= [%1] AND (T0.DocTotal = '0')) OR
(((T0.DocTotal - T0.PaidToDate) = 0) AND (T2.DocDate >= [%0] AND T2.DocDate <= [%1]))
UNION
SELECT
T3.[SlpName],
T0.[DocNum],
T0.[DocDate],
T0.[CardName],
(T0.DocTotal + T0.DpmAmnt) [Total Invoiced],
(T0.DpmAmnt + T0.PaidToDate)[Paid],
(T0.DocTotal - T0.PaidToDate) [Unpaid],
'Unpaid' AS 'Paid/Unpaid',
T2.[DocNum],
T2.[DocDate]
FROM
OINV T0 WITH (NOLOCK)
LEFT JOIN RCT2 T1 WITH (NOLOCK) ON T0.DocEntry = T1.DocEntry AND T1.InvType = '13'
LEFT JOIN ORCT T2 WITH (NOLOCK) ON T1.DocNum = T2.DocNum
INNER JOIN OSLP T3 WITH (NOLOCK) ON T0.SlpCode = T3.SlpCode
WHERE ((T0.DocTotal - T0.PaidToDate) <> '0')