1С. Получение курса валюты на дату каждого документа

Задача

Получить курс валюты на дату каждого документа «Поступление товаров и услуг» из указанного периода.

Решение

Необходимые данные будем получать в запросе при помощи ТЕТА-соединения, действия в запросе прокомментированы.

// Получим таблицу ВТ_ПТиУ с полями "Ссылка", "Дата", "ДатаЗаписи" за указанный период
// где:
// "ДатаЗаписи" это дата документа на начало дня
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ПоступлениеТоваровУслуг.Ссылка КАК Ссылка,
	ПоступлениеТоваровУслуг.Дата,
	НАЧАЛОПЕРИОДА(ПоступлениеТоваровУслуг.Дата, ДЕНЬ) КАК ДатаЗаписи
ПОМЕСТИТЬ ВТ_ПТиУ
ИЗ
	Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
ГДЕ
	ПоступлениеТоваровУслуг.Дата МЕЖДУ &НачалоПериода И &КонецПериода
	И ПоступлениеТоваровУслуг.Проведен
	И НЕ ПоступлениеТоваровУслуг.ПометкаУдаления
;

////////////////////////////////////////////////////////////////////////////////
// Получим таблицу ВТ_ЗаписиРегистра левым соединением РС.КурсыВалют и ВТ_ПТиУ
// по условию ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период и отбором по указанной валюте
// с полями "ДатаЗаписи", "Период", "Валюта"
// где:
// "Период" это максимум поля "Период" из РС.КурсыВалют
// 
// Для получения уникальных записей и получения максимальной даты
// группируем таблицу по полям "ДатаЗаписи" И "Валюта"
ВЫБРАТЬ
	ВТ_ПТиУ.ДатаЗаписи,
	МАКСИМУМ(КурсыВалют.Период) КАК Период,
	КурсыВалют.Валюта
ПОМЕСТИТЬ ВТ_ЗаписиРегистра
ИЗ
	ВТ_ПТиУ КАК ВТ_ПТиУ
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
		ПО ВТ_ПТиУ.ДатаЗаписи >= КурсыВалют.Период
			И (КурсыВалют.Валюта = &Валюта)

СГРУППИРОВАТЬ ПО
	ВТ_ПТиУ.ДатаЗаписи,
	КурсыВалют.Валюта
;

////////////////////////////////////////////////////////////////////////////////
// Получим итоговую таблицу соединением РС.КурсыВалют и ВТ_ЗаписиРегистра по периоду и валюте
// с полями "ДатаЗаписи", "Валюта", "Курс"
ВЫБРАТЬ
	ВТ_ЗаписиРегистра.ДатаЗаписи КАК ДатаЗаписи,
	КурсыВалют.Валюта,
	КурсыВалют.Курс
ИЗ
	ВТ_ЗаписиРегистра КАК ВТ_ЗаписиРегистра
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
		ПО ВТ_ЗаписиРегистра.Период = КурсыВалют.Период
			И ВТ_ЗаписиРегистра.Валюта = КурсыВалют.Валюта

УПОРЯДОЧИТЬ ПО
	ДатаЗаписи
Понравилась статья? Поделиться с друзьями:
Комментарии: 1
  1. Сергей

    Спасибо, быстрый и правильный ответ.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: