Средневзвешенный курс валюты за указанный период
Теги: 8.0,1С,Средневзвешенный курс

Средневзвешенный курс валюты за указанный период (запрос для 8.0)

# Код реализации

```1c
////////////////////////////////////////////////////////////////////////////////
//
// Функция ПолучитьСреднийКурсВалюты
//
// Описание: Возвращает средневзвешенный курс за период
//
//
// Параметры (название, тип, дифференцированное значение)
//
// Возвращаемое значение:
//
Функция ПолучитьСреднийКурсВалюты(НачПериода, КонПериода, Валюта) Экспорт

	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
	Запрос.УстановитьПараметр("КонецПериода", КонПериода);
	Запрос.УстановитьПараметр("Валюта", Валюта);
	Запрос.Текст = "ВЫБРАТЬ
	               |	ЕСТЬNULL(ВЫРАЗИТЬ(СУММА(ВложенныйЗапрос.Курс) / КОЛИЧЕСТВО(ВложенныйЗапрос.Период) КАК ЧИСЛО(15, 4)), 0) КАК СреднийКурс
	               |ИЗ
	               |	(ВЫБРАТЬ
	               |		ВложенныйЗапрос.Период КАК Период,
	               |		КурсыВалют.Курс КАК Курс
	               |	ИЗ
	               |		(ВЫБРАТЬ
	               |			МАКСИМУМ(КурсыВалют.Период) КАК ПериодКурса,
	               |			ВложенныйЗапрос.Период КАК Период
	               |		ИЗ
	               |			(ВЫБРАТЬ
	               |				ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период
	               |			ИЗ
	               |				(ВЫБРАТЬ
	               |					0 КАК a
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					1
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					2
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					3
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					4
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					5
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					6
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					7
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					8
	               |
	               |				ОБЪЕДИНИТЬ
	               |
	               |				ВЫБРАТЬ
	               |					9) КАК aa
	               |					ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	               |						0 КАК b
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						1
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						2
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						3
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						4
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						5
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						6
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						7
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						8
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						9) КАК bb
	               |					ПО (ИСТИНА)
	               |					ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	               |						0 КАК c
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						1
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						2
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						3
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						4
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						5
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						6
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						7
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						8
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						9) КАК cc
	               |					ПО (ИСТИНА)
	               |					ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
	               |						0 КАК d
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						1
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						2
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						3
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						4
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						5
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						6
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						7
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						8
	               |
	               |					ОБЪЕДИНИТЬ
	               |
	               |					ВЫБРАТЬ
	               |						9) КАК dd
	               |					ПО (ИСТИНА)
	               |			ГДЕ
	               |				aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ)) КАК ВложенныйЗапрос
	               |				ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
	               |				ПО КурсыВалют.Период <= ВложенныйЗапрос.Период
	               |					И (КурсыВалют.Валюта = &Валюта)
	               |
	               |		СГРУППИРОВАТЬ ПО
	               |			ВложенныйЗапрос.Период) КАК ВложенныйЗапрос
	               |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
	               |			ПО ВложенныйЗапрос.ПериодКурса = КурсыВалют.Период
	               |				И (КурсыВалют.Валюта = &Валюта)) КАК ВложенныйЗапрос";
	Результат = Запрос.Выполнить();
	Если Результат.Пустой() Тогда
		Возврат 0;
	Иначе
		Выборка = Результат.Выбрать();
		Выборка.Следующий();
		Возврат Выборка.СреднийКурс ;
	КонецЕсли;

КонецФункции //ПолучитьСреднийКурсВалюты
```