Если оборотный регистр накопления ПлатежныйКалендарь с измерением СчетНаОплату и двумя ресурсами Сумма и СуммаОплаты.

Как посчитать на любую дату число просроченных (неоплаченных) платежей? Размер платежа как по плану, так и по факту не фиксирован.

Пример #1, может быть так:

```1c
    Период Сумма СуммаОплаты
    01.01.2019 15000
    01.02.2019 15000
    01.03.2019 15000
    10.03.2019 20000
    01.04.2019 15000
```

На 11.03 нужно получить цифру 2.

Пример #2, может быть так:

```1c
    Период Сумма СуммаОплаты
    01.01.2019 5000
    01.02.2019 10000
    01.03.2019 15000
    10.03.2019 20000
    01.04.2019 20000
```

На 11.03 нужно получить цифру 1.

Пример #3, может быть так:

```1c
    Период Сумма СуммаОплаты
    01.01.2019 5000
    01.02.2019 10000
    01.03.2019 15000
    10.03.2019 40000
    01.04.2019 20000
```

На 11.03 нужно получить цифру 0, а вот на 02.04 - цифру 1 :)

P.S. В идеале неплохо было бы получить ещё дату первого неоплаченного платежа, все считать разумеется по ФИФО.
---
есть шероховатости, но суть думаю ясна

```1c
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.CчетНаОплату КАК CчетНаОплату,
    ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплаты
    ПОМЕСТИТЬ ТабОплачено
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, , ) КАК ПлатежныйКалендарьОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.CчетНаОплату КАК CчетНаОплату,
    ПлатежныйКалендарьОбороты.Регистратор КАК Регистратор,
    СУММА(ПлатежныйКалендарьОбороты1.СуммаОборот) КАК СуммаНарастающимИтогом
    ПОМЕСТИТЬ ТабНарастающимИтогом
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты1
    ПО ПлатежныйКалендарьОбороты.CчетНаОплату = ПлатежныйКалендарьОбороты1.CчетНаОплату
    И ПлатежныйКалендарьОбороты.Регистратор.МоментВремени >= ПлатежныйКалендарьОбороты1.Регистратор.МоментВремени
    ГДЕ
    ПлатежныйКалендарьОбороты.СуммаОборот <> 0

    СГРУППИРОВАТЬ ПО
    ПлатежныйКалендарьОбороты.CчетНаОплату,
    ПлатежныйКалендарьОбороты.Регистратор
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТабНарастающимИтогом.CчетНаОплату КАК CчетНаОплату,
    СУММА(1) КАК КоличествоНеОплаченных
    ИЗ
    ТабНарастающимИтогом КАК ТабНарастающимИтогом
    ЛЕВОЕ СОЕДИНЕНИЕ ТабОплачено КАК ТабОплачено
    ПО ТабНарастающимИтогом.CчетНаОплату = ТабОплачено.CчетНаОплату
    ГДЕ
    ТабНарастающимИтогом.СуммаНарастающимИтогом > ТабОплачено.СуммаОплаты

    СГРУППИРОВАТЬ ПО
    ТабНарастающимИтогом.CчетНаОплату
```

Если одним регистратором формируется несколько записей в регистре на разные даты, не взлетит
нарастающий итог не посчитать
можно конечно нарастающий итог считать по периоду, но если две записи на одну секунду то никак
---
А регистр оборотный я так понимаю?
Был бы остаточный, при оплате можно было бы погашать долги по фифо, как при партионном учете. Тогда в отчете получали бы только остатки
---
да, совершенно верно, оборотный. Уточнил этот момент.
---
Одним запросом обязательно? Самое простое получить все счета, все оплаты, циклом перебрать, оставить непогашенные, вывести в таблицу значений, и ее отдать скд
---
да, задачу необходимо решить именно запросом, не обязательно одним, можно пакетом, но все в рамках СКД :)
---
есть шероховатости, но суть думаю ясна

```1c
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.CчетНаОплату КАК CчетНаОплату,
    ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплаты
    ПОМЕСТИТЬ ТабОплачено
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, , ) КАК ПлатежныйКалендарьОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.CчетНаОплату КАК CчетНаОплату,
    ПлатежныйКалендарьОбороты.Регистратор КАК Регистратор,
    СУММА(ПлатежныйКалендарьОбороты1.СуммаОборот) КАК СуммаНарастающимИтогом
    ПОМЕСТИТЬ ТабНарастающимИтогом
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты1
    ПО ПлатежныйКалендарьОбороты.CчетНаОплату = ПлатежныйКалендарьОбороты1.CчетНаОплату
    И ПлатежныйКалендарьОбороты.Регистратор.МоментВремени >= ПлатежныйКалендарьОбороты1.Регистратор.МоментВремени
    ГДЕ
    ПлатежныйКалендарьОбороты.СуммаОборот <> 0

    СГРУППИРОВАТЬ ПО
    ПлатежныйКалендарьОбороты.CчетНаОплату,
    ПлатежныйКалендарьОбороты.Регистратор
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТабНарастающимИтогом.CчетНаОплату КАК CчетНаОплату,
    СУММА(1) КАК КоличествоНеОплаченных
    ИЗ
    ТабНарастающимИтогом КАК ТабНарастающимИтогом
    ЛЕВОЕ СОЕДИНЕНИЕ ТабОплачено КАК ТабОплачено
    ПО ТабНарастающимИтогом.CчетНаОплату = ТабОплачено.CчетНаОплату
    ГДЕ
    ТабНарастающимИтогом.СуммаНарастающимИтогом > ТабОплачено.СуммаОплаты

    СГРУППИРОВАТЬ ПО
    ТабНарастающимИтогом.CчетНаОплату
```

Если одним регистратором формируется несколько записей в регистре на разные даты, не взлетит
нарастающий итог не посчитать
можно конечно нарастающий итог считать по периоду, но если две записи на одну секунду то никак
---
план (ресурс Сумма) как раз одним документом формируется, а вот период в одну секунду нескольких платежей быть не может...
---
резюмирую, что это то, что нужно! Чуть поправил по периоду:

```1c
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
    ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплаты
    ПОМЕСТИТЬ ТабОплачено
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, , ) КАК ПлатежныйКалендарьОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
    ПлатежныйКалендарьОбороты.Период КАК Период,
    СУММА(ПлатежныйКалендарьОбороты1.СуммаОборот) КАК СуммаНарастающимИтогом
    ПОМЕСТИТЬ ТабНарастающимИтогом
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты1
    ПО ПлатежныйКалендарьОбороты.СчетНаОплату = ПлатежныйКалендарьОбороты1.СчетНаОплату
    И ПлатежныйКалендарьОбороты.Период >= ПлатежныйКалендарьОбороты1.Период
    ГДЕ
    ПлатежныйКалендарьОбороты.СуммаОборот <> 0

    СГРУППИРОВАТЬ ПО
    ПлатежныйКалендарьОбороты.СчетНаОплату,
    ПлатежныйКалендарьОбороты.Период
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТабНарастающимИтогом.СчетНаОплату КАК СчетНаОплату,
    СУММА(1) КАК КоличествоНеОплаченных
    ИЗ
    ТабНарастающимИтогом КАК ТабНарастающимИтогом
    ЛЕВОЕ СОЕДИНЕНИЕ ТабОплачено КАК ТабОплачено
    ПО ТабНарастающимИтогом.СчетНаОплату = ТабОплачено.СчетНаОплату
    ГДЕ
    ТабНарастающимИтогом.СуммаНарастающимИтогом > ТабОплачено.СуммаОплаты

    СГРУППИРОВАТЬ ПО
    ТабНарастающимИтогом.СчетНаОплату
```
---
подскажите, возможно вы сталкивались. В чем может быть причина - если в запросе формировать, то количества просроченных платежей формируются как положено. А если в СКД запрос положить, то в отчете выводится везде 1, и не важно что по факту 3-4 просроченных платежа. Выводится всегда 1. :-/
---
первое что в голову приходит - это автозаполнение параметров в скд
попробуйте без него
---
да, тоже подумал, наткнулся даже на статью https://infostart.ru/public/297514/ - но увы, не помогло.
---
дейсвительно какая то ерунда с 1-ей
немного переделал:

```1c
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
    ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплаты
    ПОМЕСТИТЬ ТабОплачено
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, , ) КАК ПлатежныйКалендарьОбороты
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
    ПлатежныйКалендарьОбороты.Период КАК Период,
    СУММА(ПлатежныйКалендарьОбороты1.СуммаОборот) КАК СуммаНарастающимИтогом
    ПОМЕСТИТЬ ТабНарастающимИтогом
    ИЗ
    РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты
    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПлатежныйКалендарь.Обороты(, &Период, Регистратор, ) КАК ПлатежныйКалендарьОбороты1
    ПО ПлатежныйКалендарьОбороты.СчетНаОплату = ПлатежныйКалендарьОбороты1.СчетНаОплату
    И ПлатежныйКалендарьОбороты.Период >= ПлатежныйКалендарьОбороты1.Период
    ГДЕ
    ПлатежныйКалендарьОбороты.СуммаОборот <> 0

    СГРУППИРОВАТЬ ПО
    ПлатежныйКалендарьОбороты.СчетНаОплату,
    ПлатежныйКалендарьОбороты.Период
    ;

    ////////////////////////////////////////////////////////////­////////////////////
    ВЫБРАТЬ
    ТабНарастающимИтогом.СчетНаОплату КАК СчетНаОплату,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТабНарастающимИтогом.Период) КАК КоличествоНеОплаченных
    {ВЫБРАТЬ
    СчетНаОплату.*,
    КоличествоНеОплаченных}
    ИЗ
    ТабНарастающимИтогом КАК ТабНарастающимИтогом
    ЛЕВОЕ СОЕДИНЕНИЕ ТабОплачено КАК ТабОплачено
    ПО ТабНарастающимИтогом.СчетНаОплату = ТабОплачено.СчетНаОплату
    ГДЕ
    ТабНарастающимИтогом.СуммаНарастающимИтогом > ТабОплачено.СуммаОплаты

    СГРУППИРОВАТЬ ПО
    ТабНарастающимИтогом.СчетНаОплату
```

П.С. если кто то разъяснит почему компоновка не суммирует единицы, буду очень признателен
---
спасибо, выручили! Легко добавляем в конце

```1c
    МИНИМУМ(ТабНарастающимИтогом.Период) КАК ДатаОбразованияПервойЗадолженности,
```

и получаем самую полную информацию по просрочке в любом отчете СКД или динамическом списке! :)
---
ну а если разницу оборотов в отличие от 0 считать? на дату
---
может не совсем понял, но что мне даст информация, для первого примена о сумме 45000 и сумме оплаты 20000 применительно к количеству платежей? Если бы размер их был фиксированным, то конечно достаточно было бы просто разделить разницу между суммой и суммой оплаты на минимум суммы (размер платежа), но он не фиксирован. Отсюда и возникла сложность.
---
а что значит ресур сумма тогда?
---
сумма плановой оплаты
---
я думал если сумма оплаты-сумма >=0 тогда нет долга
---
1)создать с помощью запроса упорядоченный массив с суммами
2)посчитать суммарную оплату
3)срезать с массива самые мелкие(ну или фифо) элементы пока не закончится оплата
4)выдать кол-во оставшихся элементов

5)аналитика будет так себе, может тз стоит улучшить?
---
решить задачу обработкой проблем нет, но решить задачу нужно запросом.
---
1) посчитать сумму суммарного долга
2)взять последние n строк с суммой и упорядочить их по дате от самой последней к начальной
3)через вычисляемые поля скд создать столбец в котором будет считаться сумма долга - сумма
4) посчитать через тот же скд кол-во сток>0 и выдать это пользователю?
---
да, на словах все понятно и логично. Только с п.3 не совсем понятно как реализовать. Может я немного ввел в заблуждение. Все делается в запросе динамического списка. Там вроде вычисляемых полей нет, поправьте.
---
Вы уж определитесь где делаете в СКД или динамическом списке :-)

Тогда надо обратится к таблице остатков а не оборотов. Получить остатки по Документу долга и получите нужное количество документов с долгами.
---
документ долга - один, по нему периодические платежи. Регистр оборотный :-/
---
Я правильно понимаю, вам нужно считать разницу дат от формирования долга?
---
нет, это лишь дополнительное пожелание, но не основное. Основное - это подсчет именно количества неоплаченных платежей.
---
Измерение Документ долга есть? Если да и оплата идет по документам, то сделать можно без проблем. А если нет, то я бы даже не пытался делать это запросом.
Если уж очень надо в рамках СКД, то просто бы обработал результат СКД, то есть выгрузил бы в таблицу, программно отработал и обратно загрузил.
---
да, в постановке указал, что есть измерение СчетНаОплату. Т.е. оплата идет по этому измерению.