Средневзвешенный курс валюты за указанный период (запрос для 8.0)
////////////////////////////////////////////////////////////////////////////////
//
// Функция ПолучитьСреднийКурсВалюты
//
// Описание: Возвращает средневзвешенный курс за период
//
//
// Параметры (название, тип, дифференцированное значение)
//
// Возвращаемое значение:
//
Функция ПолучитьСреднийКурсВалюты(НачПериода, КонПериода, Валюта) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("НачалоПериода", НачПериода);
Запрос.УстановитьПараметр("КонецПериода", КонПериода);
Запрос.УстановитьПараметр("Валюта", Валюта);
Запрос.Текст = "ВЫБРАТЬ
| ЕСТЬ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;
Иначе
Выборка = Результат.Выбрать();
Выборка.Следующий();
Возврат Выборка.СреднийКурс ;
КонецЕсли;
КонецФункции //ПолучитьСреднийКурсВалюты
Загрузка курсов валют с сайта РБК
ЗаполнитьДанныеКурсаДляВалюты (БСП)
Получение предпоследнего курса валюты
ЗапланироватьКопированиеКурсовВалюты (БСП)