Найти ближайшую задолженность по регистру оборотов нарастающим итогом
Есть регистр оборотов, в который заносится долг и оплаты. Необходимо рассчитать срок задолженности (при наличии).
Нарастающим итогом задолженность считаем так:
Отлично, таблица нарастающим итогом считается.
Пример 1
Сделка 135 от 26.08.2018 ||| 03.09.2018 ||| 20 000
Сделка 135 от 26.08.2018 ||| 04.09.2018 ||| <0>
Сделка 135 от 26.08.2018 ||| 14.09.2018 ||| 93 000
Сделка 135 от 26.08.2018 ||| 13.11.2018 ||| 39 974
Сделка 135 от 26.08.2018 ||| 29.11.2018 ||| 93 000
Пример 2 (минус - это переплата)
Сделка 195 от 27.01.2018 ||| 30.01.2018 ||| 20 000
Сделка 195 от 27.01.2018 ||| 07.02.2018 ||| <0>
Сделка 195 от 27.01.2018 ||| 17.04.2018 ||| -20 000
Сделка 195 от 27.01.2018 ||| 22.05.2018 ||| -40 000
Сделка 195 от 27.01.2018 ||| 02.07.2018 ||| -60 000
Сделка 195 от 27.01.2018 ||| 19.07.2018 ||| -1 353 334
Сделка 195 от 27.01.2018 ||| 05.09.2018 ||| <0>
Сделка 195 от 27.01.2018 ||| 25.09.2018 ||| 2 506 666
Сделка 195 от 27.01.2018 ||| 01.10.2018 ||| <0>
Пример 3
Сделка 554 от 12.01.2019 ||| 13.01.2019 ||| 20 000
Сделка 554 от 12.01.2019 ||| 13.02.2019 ||| 40 000
Сделка 554 от 12.01.2019 ||| 13.03.2019 ||| 60 000
Сделка 554 от 12.01.2019 ||| 13.04.2019 ||| 80 000
Сделка 554 от 12.01.2019 ||| 13.05.2019 ||| 100 000
Помогите продолжить запрос, чтобы для каждого документа получить минимальную (после 0 или минусовой задолженности) дату начала положительной суммы, либо при отсутствии таковой = пустую дату. Т.е.
для примера 1 = 14.09.2018
для примера 2 = 01.01.0001
для примера 3 = 13.01.2019
Нарастающим итогом задолженность считаем так:
ВЫБРАТЬ
ПлатежныйКалендарьОбороты.Период КАК Период,
ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
ПлатежныйКалендарьОбороты.СуммаОборот КАК СуммаОборот,
ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплатыОборот
ПОМЕСТИТЬ Дано
ИЗ
РегистрНакопления.ПлатежныйКалендарь.Обороты(, &ДатаОтчета, День, ) КАК ПлатежныйКалендарьОбороты
ГДЕ
ПлатежныйКалендарьОбороты.СчетНаОплату = &СчетНаОплату
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Дано.СчетНаОплату КАК СчетНаОплату,
Дано.Период КАК Период,
СУММА(ДоДано.СуммаОборот - ДоДано.СуммаОплатыОборот) КАК СуммаОстаток
ИЗ
Дано КАК Дано
ЛЕВОЕ СОЕДИНЕНИЕ Дано КАК ДоДано
ПО Дано.СчетНаОплату = ДоДано.СчетНаОплату
И Дано.Период >= ДоДано.Период
СГРУППИРОВАТЬ ПО
Дано.СчетНаОплату,
Дано.Период
ПоказатьОтлично, таблица нарастающим итогом считается.
Пример 1
Сделка 135 от 26.08.2018 ||| 03.09.2018 ||| 20 000
Сделка 135 от 26.08.2018 ||| 04.09.2018 ||| <0>
Сделка 135 от 26.08.2018 ||| 14.09.2018 ||| 93 000
Сделка 135 от 26.08.2018 ||| 13.11.2018 ||| 39 974
Сделка 135 от 26.08.2018 ||| 29.11.2018 ||| 93 000
Пример 2 (минус - это переплата)
Сделка 195 от 27.01.2018 ||| 30.01.2018 ||| 20 000
Сделка 195 от 27.01.2018 ||| 07.02.2018 ||| <0>
Сделка 195 от 27.01.2018 ||| 17.04.2018 ||| -20 000
Сделка 195 от 27.01.2018 ||| 22.05.2018 ||| -40 000
Сделка 195 от 27.01.2018 ||| 02.07.2018 ||| -60 000
Сделка 195 от 27.01.2018 ||| 19.07.2018 ||| -1 353 334
Сделка 195 от 27.01.2018 ||| 05.09.2018 ||| <0>
Сделка 195 от 27.01.2018 ||| 25.09.2018 ||| 2 506 666
Сделка 195 от 27.01.2018 ||| 01.10.2018 ||| <0>
Пример 3
Сделка 554 от 12.01.2019 ||| 13.01.2019 ||| 20 000
Сделка 554 от 12.01.2019 ||| 13.02.2019 ||| 40 000
Сделка 554 от 12.01.2019 ||| 13.03.2019 ||| 60 000
Сделка 554 от 12.01.2019 ||| 13.04.2019 ||| 80 000
Сделка 554 от 12.01.2019 ||| 13.05.2019 ||| 100 000
Помогите продолжить запрос, чтобы для каждого документа получить минимальную (после 0 или минусовой задолженности) дату начала положительной суммы, либо при отсутствии таковой = пустую дату. Т.е.
для примера 1 = 14.09.2018
для примера 2 = 01.01.0001
для примера 3 = 13.01.2019
Найденные решения
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Получаете последний день без задолжности( ДоДано.СуммаОборот - ДоДано.СуммаОплатыОборот > 0, и группируете по максимум дате), помещаете во временную таблицу, потом соединяетесь еще раз с оборотами, но группируете по Минимум дате. Это и будет дата начала последней задолжности
Спасибо! В итоге запрос принял вид:
ВЫБРАТЬ
ПлатежныйКалендарьОбороты.Период КАК Период,
ПлатежныйКалендарьОбороты.СчетНаОплату КАК СчетНаОплату,
ПлатежныйКалендарьОбороты.СуммаОборот КАК СуммаОборот,
ПлатежныйКалендарьОбороты.СуммаОплатыОборот КАК СуммаОплатыОборот
ПОМЕСТИТЬ Дано
ИЗ
РегистрНакопления.ПлатежныйКалендарь.Обороты(, &ДатаОтчета, День, ) КАК ПлатежныйКалендарьОбороты
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
Дано.СчетНаОплату КАК СчетНаОплату,
Дано.Период КАК Период,
СУММА(ДоДано.СуммаОборот - ДоДано.СуммаОплатыОборот) КАК СуммаОстаток
ПОМЕСТИТЬ НарастающиеИтоги
ИЗ
Дано КАК Дано
ЛЕВОЕ СОЕДИНЕНИЕ Дано КАК ДоДано
ПО Дано.СчетНаОплату = ДоДано.СчетНаОплату
И Дано.Период >= ДоДано.Период
СГРУППИРОВАТЬ ПО
Дано.СчетНаОплату,
Дано.Период
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПоследнийДеньБезЗадолженности.СчетНаОплату КАК СчетНаОплату,
МАКСИМУМ(ПоследнийДеньБезЗадолженности.Период) КАК Период
ПОМЕСТИТЬ ПоследнийДеньБезЗадолженности
ИЗ
НарастающиеИтоги КАК ПоследнийДеньБезЗадолженности
ГДЕ
ПоследнийДеньБезЗадолженности.СуммаОстаток <= 0
СГРУППИРОВАТЬ ПО
ПоследнийДеньБезЗадолженности.СчетНаОплату
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ПервыйДеньЗадолженности.СчетНаОплату КАК СчетНаОплату,
МИНИМУМ(ПервыйДеньЗадолженности.Период) КАК Период
ИЗ
НарастающиеИтоги КАК ПервыйДеньЗадолженности
ЛЕВОЕ СОЕДИНЕНИЕ ПоследнийДеньБезЗадолженности КАК ПоследнийДеньБезЗадолженности
ПО ПервыйДеньЗадолженности.СчетНаОплату = ПоследнийДеньБезЗадолженности.СчетНаОплату
ГДЕ
ПервыйДеньЗадолженности.Период >= ЕСТЬNULL(ПоследнийДеньБезЗадолженности.Период, ДАТАВРЕМЯ(1,1,1,0,0,0))
И ПервыйДеньЗадолженности.СуммаОстаток > 0
СГРУППИРОВАТЬ ПО
ПервыйДеньЗадолженности.СчетНаОплату
Показать
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)