Здравствуйте! Опять я за советом к знатокам.
В бухгалтерской базе есть основная таблица "тУСН17" и подчиненная "тУСН17доплата".
СуммаДоплаты
Задача такая, надо подсчитать суммы на указанный период по столбцам Аванс, Сумма, СуммаДоплаты, но с учетом проставленных дат для каждого платежа. Т.е. Аванс может быть оплачен 1 января 2017, Сумма (Дата реализации) - 12 февраля, а доплаты в течении длительного времени, 1-я 15 февраля, 2-я 24 апреля....
Если период указан на конец февраля 2017 (указывается в главной форме), то считаться должны лишь числа, даты которых меньше или равны 28 февраля 2017
Трудно объяснить, покажу на примере, вот первая строка в таблице:
Аванс: 20000 от 1.01.2017
Сумма: 50000 от 12.02.2017
Доплата1: 2000 от 15.02.2017
Доплата2: 3000 от 24.04.2017
вторая строка:
Аванс: 48000 от 27.02.2017
Сумма: 90000 от 11.04.2017
Доплата1: 12000 от 15.04.2017
...
В итоге должно получить следующее:
Аванс: 20000 + 48000 = 68000
Сумма: 50000
Доплата: 2000
остальное игнорируется
Я долго сидел, пробовал разными способами решить эту задачу. Пришлось использовать два запроса - первый собирает данные, отфильтровывая нужное, а второй уже считает:
Первый запрос:
SELECT DISTINCTROW тУСН17.Код, тУСН17.№договора, тУСН17.Дата,
IIf([Дата]!фГлавная!ДатаПо,[Аванс],0) AS DАванс,
тУСН17.ДатаРеализации, IIf([ДатаРеализации]!фГлавная!ДатаПо,[Сумма],0) AS DСумма,
IIf(IsNull([ДатаДоплаты]),[Дата],[ДатаДоплаты]) AS DДоплаты,
IIf([DДоплаты]<=(Forms!фГлавная!ДатаПо),Sum(IIf(IsNull([СуммаДоплаты]),0,[СуммаДоплаты])),0) AS SumДоплаты
FROM тУСН17 LEFT JOIN тУСН17доплата ON тУСН17.Код = тУСН17доплата.КодУСН
GROUP BY тУСН17.Код, тУСН17.№договора, тУСН17.Дата,
IIf([Дата]!фГлавная!ДатаПо,[Аванс],0), тУСН17.ДатаРеализации,
IIf([ДатаРеализации]!фГлавная!ДатаПо,[Сумма],0),
IIf(IsNull([ДатаДоплаты]),[Дата],[ДатаДоплаты]), тУСН17.[Оплата100%]
HAVING (((тУСН17.Дата)<=[Forms]![фГлавная]![ДатаПо]) AND ((тУСН17.[Оплата100%])=False)) OR
(((тУСН17.ДатаРеализации)<=[Forms]![фГлавная]![ДатаПо]) AND ((тУСН17.[Оплата100%])=False)) OR
(((IIf(IsNull([ДатаДоплаты]),[Дата],[ДатаДоплаты]))<=[Forms]![фГлавная]![ДатаПо]) AND ((тУСН17.[Оплата100%])=False))
ORDER BY тУСН17.Код;
Второй запрос:
SELECT DISTINCTROW Sum(зУСН17остатокДни.DАванс) AS [Sum-DАванс],
Sum(зУСН17остатокДни.DСумма) AS [Sum-DСумма],
Sum(зУСН17остатокДни.SumДоплаты) AS [Sum-SumДоплаты]
FROM зУСН17остатокДни;
Но в первом запросе есть засада, он некоторые строки дублирует (подчеркнуто красным на картинке), а именно те, где есть несколько доплат (подчеркнуто зелёным) . Естественно, второй запрос дает неправильный результат. Также пришлось принять меня к записям, где доплат нет вообще (нет записей) - в таких случаях подставлял дату от аванса, а сумма = 0.

Подскажите, пожалуйста, что тут можно сделать? Как удалить повторяющиеся суммы?
На всякий случай выложил урезанный вариант базы.