В начало

Число месяцев начисления по среднему

 

            Есть независимый непериодический регистр сведений «Начисления». Нужно получить запросом число месяцев оплаты.

Рис. Регистр сведений «Начисления»

 

            Алгоритм расчета числа месяцев начисления (долга) следующий:

1)     считаем сумму начислений и оплат по всем периодам;

2)     рассчитываем среднемесячное начисление;

3)     делим сумму оплат на среднемесячное начисление и получаем количество оплаченных месяцев;

4)     также можно посчитать число месяцев долга, если из общего количества месяцев вычесть число оплаченных месяцев.

            Открываем консоль запросов, пишем запрос. Число месяцев оплаты округляем в МЕНЬШУЮ сторону по формуле: [ВЫРАЗИТЬ(Ч + 0.5 КАК ЧИСЛО(15)) - 1], т.е. искусственно добавляем 0,5, а потом вычитаем 1.

 

Листинг. Текст запроса

ВЫБРАТЬ

            Начисления.Контрагент КАК Контрагент,

            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Начисления.МесяцНачисления) КАК МесяцНачисления,

            СУММА(Начисления.Начислено) КАК Начислено,

            СУММА(Начисления.Оплачено) КАК Оплачено,

            СУММА(Начисления.СальдоКонечное) КАК СальдоКонечное,

            СУММА(Начисления.СальдоНачальное) КАК СальдоНачальное

ПОМЕСТИТЬ вт1

ИЗ

            РегистрСведений.Начисления КАК Начисления

 

СГРУППИРОВАТЬ ПО

            Начисления.Контрагент

;

 

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

            вт1.Контрагент КАК Контрагент,

            вт1.МесяцНачисления КАК ЧислоМесяцев,

            вт1.СальдоНачальное КАК СуммаСальдоНачальное,

            вт1.Начислено КАК СуммаНачислено,

            вт1.Оплачено КАК СуммаОплачено,

            вт1.СальдоКонечное КАК СуммаСальдоКонечное,

            ВЫРАЗИТЬ(вт1.Начислено / вт1.МесяцНачисления как число(15,2)) КАК СредееНачисление,

            ВЫРАЗИТЬ(0.5 + вт1.Оплачено / вт1.Начислено * вт1.МесяцНачисления как число(15,0)) -1 КАК ОплаченоМесяцев

ИЗ

            вт1 КАК вт1

 

            Смотрим, что получилось.

Рис. Результат запроса

 

            Вроде все верно. Теперь добавим еще одну строчку в регистр «Начисления».

Рис. Новая строчка в регистре «Начисления»

 

            Проверим правильность выполнения запроса.

Рис. Результат запроса после добавления новой записи в регистр сведений

 

            Теперь результат – 5 месяцев оплаты. Посчитаем вручную, для этого перенесем данные в Иксель. Округляем число оплаченных месяцев в меньшую сторону по формуле: [ОКРУГЛ(Число; 0) – 1].

Рис. Проверка в Иксель

 

            Также можно и в запрос добавить число месяцев долга.

 

Листинг. Текст запроса

ВЫБРАТЬ

            Начисления.Контрагент КАК Контрагент,

            КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Начисления.МесяцНачисления) КАК МесяцНачисления,

            СУММА(Начисления.Начислено) КАК Начислено,

            СУММА(Начисления.Оплачено) КАК Оплачено,

            СУММА(Начисления.СальдоКонечное) КАК СальдоКонечное,

            СУММА(Начисления.СальдоНачальное) КАК СальдоНачальное

ПОМЕСТИТЬ вт1

ИЗ

            РегистрСведений.Начисления КАК Начисления

 

СГРУППИРОВАТЬ ПО

            Начисления.Контрагент

;

 

////////////////////////////////////////////////////////////////////////////////

ВЫБРАТЬ

            вт1.Контрагент КАК Контрагент,

            вт1.МесяцНачисления КАК ЧислоМесяцев,

            вт1.СальдоНачальное КАК СуммаСальдоНачальное,

            вт1.Начислено КАК СуммаНачислено,

            вт1.Оплачено КАК СуммаОплачено,

            вт1.СальдоКонечное КАК СуммаСальдоКонечное,

            ВЫРАЗИТЬ(вт1.Начислено / вт1.МесяцНачисления КАК ЧИСЛО(15, 2)) КАК СредееНачисление,

            (ВЫРАЗИТЬ(0.5 + вт1.Оплачено / вт1.Начислено * вт1.МесяцНачисления КАК ЧИСЛО(15, 0))) - 1 КАК ОплаченоМесяцев,

            вт1.МесяцНачисления - (ВЫРАЗИТЬ(0.5 + вт1.Оплачено / вт1.Начислено * вт1.МесяцНачисления КАК ЧИСЛО(15, 0))) + 1 КАК МесяцевДолга

ИЗ

            вт1 КАК вт1

 

            Проверим результат.

Рис. Фрагмент результата запроса

 

            Все верно, запрос работает.