Найти в Дзене
Я и 1с

Запрос с тета-соединением таблиц-источников

Тета-соединение, это такое соединение таблиц на вкладке связи в конструкторе запросов, которое отлично от = (<=, => и т.д.). Ниже пример на получение суммы документа в долларах. Вначале получаем даты записей регистра КурсыВалют , которые <= даты документа и группируем записи по дате документов, где суммируемое поле - дата курса с функцией МАКСИМУМ. Затем получаем во втором запросе сами курсы на даты курсов и даты документа из виртю таблицы первого запроса. Далее опять выбираем из документа дату и сумму, из виртуальной таблицы второго запроса курс и кратность, а связь делаем по дате документа. Сумму в долларах добавляем на первой вкладке конструктора через кнопку + и делаем выражение для расчета в открывающемся окне ВЫБРАТЬ
РасходнаяНакладная.Дата КАК ДатаДокумента,
МАКСИМУМ(КурсыВалют.Период) КАК ДатаКурса
ПОМЕСТИТЬ БлижайшаяДатаКурса
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
ПО КурсыВалют.Период <= Ра

Тета-соединение, это такое соединение таблиц на вкладке связи в конструкторе запросов, которое отлично от = (<=, => и т.д.). Ниже пример на получение суммы документа в долларах. Вначале получаем даты записей регистра КурсыВалют , которые <= даты документа и группируем записи по дате документов, где суммируемое поле - дата курса с функцией МАКСИМУМ. Затем получаем во втором запросе сами курсы на даты курсов и даты документа из виртю таблицы первого запроса. Далее опять выбираем из документа дату и сумму, из виртуальной таблицы второго запроса курс и кратность, а связь делаем по дате документа. Сумму в долларах добавляем на первой вкладке конструктора через кнопку + и делаем выражение для расчета в открывающемся окне

ВЫБРАТЬ
РасходнаяНакладная.Дата КАК ДатаДокумента,
МАКСИМУМ(КурсыВалют.Период) КАК ДатаКурса
ПОМЕСТИТЬ БлижайшаяДатаКурса
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РасходнаяНакладная КАК РасходнаяНакладная
ПО КурсыВалют.Период <= РасходнаяНакладная.Дата
ГДЕ
КурсыВалют.Валюта = &Доллар

СГРУППИРОВАТЬ ПО
РасходнаяНакладная.Дата
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
КурсыВалют.Период,
КурсыВалют.Курс,
КурсыВалют.Кратность,
БлижайшаяДатаКурса.ДатаДокумента
ПОМЕСТИТЬ КурсНаДатыДок
ИЗ
РегистрСведений.КурсыВалют КАК КурсыВалют
ВНУТРЕННЕЕ СОЕДИНЕНИЕ БлижайшаяДатаКурса КАК БлижайшаяДатаКурса
ПО КурсыВалют.Период = БлижайшаяДатаКурса.ДатаКурса
ГДЕ
КурсыВалют.Валюта = &Доллар
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
РасходнаяНакладная.Дата КАК Дата,
РасходнаяНакладная.СуммаДокумента,
КурсНаДатыДок.Курс,
КурсНаДатыДок.Кратность,
РасходнаяНакладная.СуммаДокумента / КурсНаДатыДок.Курс * КурсНаДатыДок.Кратность КАК СуммаВДолларах
ИЗ
Документ.РасходнаяНакладная КАК РасходнаяНакладная
ВНУТРЕННЕЕ СОЕДИНЕНИЕ КурсНаДатыДок КАК КурсНаДатыДок
ПО РасходнаяНакладная.Дата = КурсНаДатыДок.ДатаДокумента

УПОРЯДОЧИТЬ ПО
Дата