Курс валюты на дату документа (Запрос)

Часто на собеседованиях я задаю программистам вопрос: опишите алгоритм запроса получения курсов валют на даты документов, присутствующих в выборке для нижеуказанной ситуации.

Есть две валюты “Дерево”, “Камень”:

Справочник валюты: "Дерево", "Камень"
Валюты

Есть регистр сведений “Курсы валют”:

Курсы валют
Курсы валют

И список документов на даты которых в одном запросе нужно получить курсы:

Документы зарплата сотрудника
Документы зарплата сотрудника

И тут у многих программистов возникают проблемы. Если бы регистр сведений “Курсы валют” имел бы значения на каждую дату, то почти все бы справились с помощью левого соединения. Но “пробелы” в регистре заставляют большую часть соискателей уйти в бесконечные раздумья составления алгоритма.

Что бы у вас не возникало в дальнейшем таких проблем рассмотрим алгоритм запроса по блокам:

  • Делаем выборку по нашим документам:
  • Из временной таблицы “Исходные данные” делаем выборку валют и дат, на которые нам нужно получить курсы:
  • С помощью внутреннего соединения и группировки (по дате и валюте) получаем ближайшую дату курса из регистра сведений “Курсы валют”:
  • Опять таки с помощью предыдущего типа соединения получаем нужные нам курсы валют на даты документов:
  • Объединяем первоначальные данные с временной таблицей “КурсыВалютСрез” и получаем то что нам и было нужно:

Результат будет полностью соответствовать ожиданиям:

Результат выполнения запроса
Результат выполнения запроса

Данный запрос можно было написать и с меньшим количеством временных таблиц, но для более четкого понимания я разбил его на такое количество блоков. Попробуйте оптимизировать и сделать его более компактным. Надеюсь теперь у вас с этим вопросом не возникнет трудностей.

Полный текст запроса для удобства:

Не бойтесь писать запросы любой сложности, это развивает мышление и повышает ваш уровень квалификации. Удачи!

1+

2 комментария

  1. Аристотель

    интересненько.

    0
  2. Admin (Автор записи)

    Более оптимальный запрос:
    https://craft1c.ru/1s-kurs-valjuty-na-datu-dokumenta-chast-2/

    0

Оставить комментарий

Ваш адрес email не будет опубликован.