Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.

Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.
Часто возникает потребность в этом, например, отложенное формирование проводок (или построение отчета) в валюте регламентировано учета (обычно «руб») для документов (или других данных) введенным в у.е. (например USD или EUR).

Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.

Часто возникает потребность в этом, например, отложенное формирование проводок (или построение отчета) в валюте регламентировано учета (обычно «руб») для документов (или других данных) введенным в у.е. (например USD или EUR).

Во вложении готовый пример, обработка.

Пример запроса с комментариями:

            // Исходные данные передаем в запрос

                        «ВЫБРАТЬ

                        |           ИсходныеДанные.Регистратор,

                        |           ИсходныеДанные.Дата,

                        |           ИсходныеДанные.Валюта,

                        |           ИсходныеДанные.Сумма

                        |ПОМЕСТИТЬ ИсходныеДанные

                        |ИЗ

                        |           &ИсходныеДанные КАК ИсходныеДанные

                        |;

                        |

            // Выбираем для каких валют на какие даты надо получить курсы валют

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ РАЗЛИЧНЫЕ

                        |           ИсходныеДанные.Дата,

                        |           ИсходныеДанные.Валюта

                        |ПОМЕСТИТЬ ДатаВалюта

                        |ИЗ

                        |           ИсходныеДанные КАК ИсходныеДанные

                        |;

                        |

            // Выбираем ближайшую дату для курса валют

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ

                        |           ДатаВалюта.Дата,

                        |           ДатаВалюта.Валюта,

                        |           МАКСИМУМ(КурсыВалют.Период) КАК Период

                        |ПОМЕСТИТЬ ДатаКурса

                        |ИЗ

                        |           ДатаВалюта КАК ДатаВалюта

                        |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют

                        |                       ПО ДатаВалюта.Валюта = КурсыВалют.Валюта

                        |                                  И ДатаВалюта.Дата >= КурсыВалют.Период

                        |

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

                        |           ДатаВалюта.Дата,

                        |           ДатаВалюта.Валюта

                        |;

                        |

            // Получаем курсы валют на все даты, которые нужны

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ

                        |           ДатаКурса.Дата,

                        |           ДатаКурса.Валюта,

                        |           ДатаКурса.Период,

                        |           КурсыВалют.Курс,

                        |           КурсыВалют.Кратность

                        |ПОМЕСТИТЬ КурсыВалютСрез

                        |ИЗ

                        |           ДатаКурса КАК ДатаКурса

                        |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют

                        |                       ПО ДатаКурса.Валюта = КурсыВалют.Валюта

                        |                                  И ДатаКурса.Период = КурсыВалют.Период

                        |;

                        |

            // Объединяем исходные данные с курсами валют

                        |////////////////////////////////////////////////////////////////////////////////

                        |ВЫБРАТЬ

                        |           ИсходныеДанные.Регистратор,

                        |           ИсходныеДанные.Дата,

                        |           ИсходныеДанные.Валюта,

                        |           ИсходныеДанные.Сумма,

                        |           КурсыВалютСрез.Период,

                        |           КурсыВалютСрез.Курс,

                        |           КурсыВалютСрез.Кратность,

                        |           ИсходныеДанные.Сумма * КурсыВалютСрез.Курс / КурсыВалютСрез.Кратность КАК Итог

                        |ИЗ

                        |           ИсходныеДанные КАК ИсходныеДанные

                        |                       ВНУТРЕННЕЕ СОЕДИНЕНИЕ КурсыВалютСрез КАК КурсыВалютСрез

                        |                       ПО ИсходныеДанные.Валюта = КурсыВалютСрез.Валюта

                        |                                  И ИсходныеДанные.Дата = КурсыВалютСрез.Дата»;

 

Есть вопросы по запросам пишите, постараюсь ответить.

13 Comments

  1. Nykyanen

    Курсы валют на разные даты в одном запросе. Делаем свой нестандартный срез последних.

    Часто возникает потребность в этом, например, отложенное формирование проводок (или построение отчета) в валюте регламентировано учета (обычно «руб») для документов (или других данных) введенным в у.е. (например USD или EUR).

    Перейти к публикации

    Reply
  2. Поручик

    Впечатление дикого дежа-вю. Где я это мог видеть? Впрочем, сейчас набежит местная илита местный бомонд грабить корованы, раскритикует или похвалит.

    Reply
  3. Nykyanen

    (1) Поручик, не исключенно, что подобное мог реализовать кто угодно.

    Поиск не дал результатов, решил разместить своё.

    Примерно так же я решал задачу по РЕПО при сдаче Спеца 1С по Платформе.

    Reply
  4. echo77

    (0) То что вы описали — это не есть «Срез последних на каждую дату в запросе»? Если поиском посмотреть — на этом же сайте есть предложенные решения на СКД и в запросе. Вещь полезная.

    Оформите публикацию(запрос) нормально

    Reply
  5. Nykyanen

    (3) echo77, запрос оформил.

    Решение на СКД не нашел, интересно было посмотреть как решили эту проблему там, вдруг что-то интернесное.

    Reply
  6. echo77
  7. Nykyanen

    (5) echo77, да там аналогичная задача.

    Только там, остатки на каждый день * цены номенклатуры на дату остатка.

    А у меня документы суммы в УЕ * Курс да дату документа.

    Будет новичкам для примера.

    Reply
  8. Sergeevich

    Статья оказалась очень полезной, спасибо.

    Reply
  9. baluba

    Скажите, для 8,3 есть?

    Reply
  10. smikirill-110686

    А если курса валюты нет на дату документа? тогда в колонке курс пусто?

    Reply
  11. user685936_Galiya_hamzina

    Да там получается пусто

    Reply
  12. alexandr_astafiev

    (10) Будет курс на какую то ближайшую предыдущую дату до даты документа, на которую есть курс.

    Reply
  13. alexandr_astafiev

    Хорошая статья. Достаточно просто и понятно. Конечно можно и самому сделать , но это время. А времени обычно мало, потому что работы много. Использовал идею данной статьи для расчета котировок для оценки стоимости ввода вывода ценных бумаг по документам за период (во завернул фразу!). Там и котировки нужно брать на предыдущий рабочий день нужной биржи, ну и курс валюты сами понимаете… В общем автору спасибо. Сэкономил мне время!

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *