Запрос с нарастающим итогом рассмотрим на примере поступлений по регистру взаиморасчеты. Порядок решения:
В конкретном примере запрос может отрабатывать неправильно в случае если у регистратора будет совпадать время секунда в секунду в пределах группировки.
Фиксится данная проблема путем наложения более конкретного условия:
Если даты совпадают то происходит отработка по более конкретному условия - "МоментВремени" из регистратора.
Листинг исправления:
- Нужно отобрать необходимые обороты (в данном случае "Приход") из регистра и поместить их во временную таблицу к которой будем обращаться.
- Выбрать 2 раза получившуюся таблицу и соединить по внутреннему соединению по необходимым полям и периоду через ">="
- Применить необходимую группировку
- Упорядочить по вкусу.
Листинг решения:
ВЫБРАТЬДополнение:
ВзаиморасчетыОбороты.Период,
ВзаиморасчетыОбороты.Регистратор,
ВзаиморасчетыОбороты.Контрагент,
ВзаиморасчетыОбороты.СуммаПриход
ПОМЕСТИТЬ ВТ_Источник
ИЗ
РегистрНакопления.Взаиморасчеты.Обороты(, , Регистратор, ) КАК ВзаиморасчетыОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Источник.Период КАК Период,
ВТ_Источник.Регистратор,
ВТ_Источник.Контрагент КАК Контрагент,
ВТ_Источник.СуммаПриход,
СУММА(ВТ_Источник1.СуммаПриход) КАК СуммаНарастающегоИтога
ИЗ
ВТ_Источник КАК ВТ_Источник
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Источник КАК ВТ_Источник1
ПО ВТ_Источник.Период >= ВТ_Источник1.Период
И ВТ_Источник.Контрагент = ВТ_Источник1.Контрагент
СГРУППИРОВАТЬ ПО
ВТ_Источник.Период,
ВТ_Источник.Регистратор,
ВТ_Источник.Контрагент,
ВТ_Источник.СуммаПриход
УПОРЯДОЧИТЬ ПО
Контрагент,
Период
В конкретном примере запрос может отрабатывать неправильно в случае если у регистратора будет совпадать время секунда в секунду в пределах группировки.
Фиксится данная проблема путем наложения более конкретного условия:
Если даты совпадают то происходит отработка по более конкретному условия - "МоментВремени" из регистратора.
Листинг исправления:
ВЫБРАТЬ
ВзаиморасчетыОбороты.Период,
ВзаиморасчетыОбороты.Регистратор,
ВзаиморасчетыОбороты.Контрагент,
ВзаиморасчетыОбороты.СуммаПриход
ПОМЕСТИТЬ ВТ_Источник
ИЗ
РегистрНакопления.Взаиморасчеты.Обороты(, , Регистратор, ) КАК ВзаиморасчетыОбороты
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
ВТ_Источник.Период КАК Период,
ВТ_Источник.Регистратор,
ВТ_Источник.Контрагент КАК Контрагент,
ВТ_Источник.СуммаПриход,
СУММА(ВТ_Источник1.СуммаПриход) КАК СуммаНарастающегоИтога
ИЗ
ВТ_Источник КАК ВТ_Источник
ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Источник КАК ВТ_Источник1
ПО (ВТ_Источник.Период > ВТ_Источник1.Период
ИЛИ ВТ_Источник.Период = ВТ_Источник1.Период
И ВТ_Источник.Регистратор.МоментВремени >= ВТ_Источник1.Регистратор.МоментВремени)
И ВТ_Источник.Контрагент = ВТ_Источник1.Контрагент
СГРУППИРОВАТЬ ПО
ВТ_Источник.Период,
ВТ_Источник.Регистратор,
ВТ_Источник.Контрагент,
ВТ_Источник.СуммаПриход
УПОРЯДОЧИТЬ ПО
Контрагент,
Период
Комментариев нет:
Отправить комментарий