1. user608303_1c-grand 28.12.16 19:20 Сейчас в теме

Курс валюты на разные даты в запросе

Доброго времени суток!
Подскажите как мне получить курс валют на разные даты в запросе


Подскажите на примере запроса

Запрос = Новый Запрос;
	Запрос.Текст =
	"ВЫБРАТЬ
	|	ТиповойДвиженияССубконто.Регистратор,
	|	ТиповойДвиженияССубконто.СчетДт КАК СчетДт,
	|	ТиповойДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1,
	|	ТиповойДвиженияССубконто.СубконтоДт2 КАК СубконтоДт2,
	|	ТиповойДвиженияССубконто.СубконтоДт3 КАК СубконтоДт3,
	|	ТиповойДвиженияССубконто.СчетКт КАК СчетКт,
	|	ВЫБОР
	|		КОГДА ТиповойДвиженияССубконто.СчетДт <> &СчетБанк
	|			ТОГДА 0
	|		ИНАЧЕ ТиповойДвиженияССубконто.Сумма
	|	КОНЕЦ КАК СуммаПриход,
	|	ВЫБОР
	|		КОГДА ТиповойДвиженияССубконто.СчетКт <> &СчетБанк
	|			ТОГДА 0
	|		ИНАЧЕ ТиповойДвиженияССубконто.Сумма
	|	КОНЕЦ КАК СуммаРасход,
	|	ТиповойДвиженияССубконто.СубконтоКт1,
	|	ТиповойДвиженияССубконто.СубконтоКт2,
	|	ТиповойДвиженияССубконто.СубконтоКт3,
	|	НАЧАЛОПЕРИОДА(ТиповойДвиженияССубконто.Период, МЕСЯЦ) КАК Период,
	|	ТиповойДвиженияССубконто.Регистратор.Субконто1 КАК Суб1,
	|	ТиповойДвиженияССубконто.Регистратор.Субконто2 КАК Суб2,
	|	ТиповойДвиженияССубконто.Период КАК ДатаПроводки
	|ИЗ
	|	РегистрБухгалтерии.Типовой.ДвиженияССубконто(&НачалоПериода, &КонецПериода, Субконто1 В (&СчетОрганизации), , ) КАК ТиповойДвиженияССубконто
	|ГДЕ
	|	(ТиповойДвиженияССубконто.СчетДт = &СчетБанк
	|			ИЛИ ТиповойДвиженияССубконто.СчетКт = &СчетБанк)
	|	И ТиповойДвиженияССубконто.Регистратор.Субконто1 В(&Суб1)";

Показать

Допустим у меня получается результат запроса:

Дата проводки | Сумма приход | Сумма расход |
01.12.2016 500
02.12.2016 1000
03.12.2016 1000


Вот теперь мне нужно на 1,2 и 3 декабря в эту же таблицу вытащить курс из типового регистра сведений "Курсы валют", что бы получилось:

Дата проводки | Сумма приход | Сумма расход | Курс |
01.12.2016 500 330
02.12.2016 1000 329
03.12.2016 1000 335



делаю так:

"ВЫБРАТЬ
	|	ТиповойДвиженияССубконто.Регистратор,
	|	ТиповойДвиженияССубконто.СчетДт КАК СчетДт,
	|	ТиповойДвиженияССубконто.СубконтоДт1 КАК СубконтоДт1,
	|	ТиповойДвиженияССубконто.СубконтоДт2 КАК СубконтоДт2,
	|	ТиповойДвиженияССубконто.СубконтоДт3 КАК СубконтоДт3,
	|	ТиповойДвиженияССубконто.СчетКт КАК СчетКт,
	|	ВЫБОР
	|		КОГДА ТиповойДвиженияССубконто.СчетДт <> &СчетБанк
	|			ТОГДА 0
	|		ИНАЧЕ ТиповойДвиженияССубконто.Сумма
	|	КОНЕЦ КАК СуммаПриход,
	|	ВЫБОР
	|		КОГДА ТиповойДвиженияССубконто.СчетКт <> &СчетБанк
	|			ТОГДА 0
	|		ИНАЧЕ ТиповойДвиженияССубконто.Сумма
	|	КОНЕЦ КАК СуммаРасход,
	|	ТиповойДвиженияССубконто.СубконтоКт1,
	|	ТиповойДвиженияССубконто.СубконтоКт2,
	|	ТиповойДвиженияССубконто.СубконтоКт3,
	|	НАЧАЛОПЕРИОДА(ТиповойДвиженияССубконто.Период, МЕСЯЦ) КАК Период,
	|	ТиповойДвиженияССубконто.Регистратор.Субконто1 КАК Суб1,
	|	ТиповойДвиженияССубконто.Регистратор.Субконто2 КАК Суб2,
	|	ТиповойДвиженияССубконто.Период КАК ДатаПроводки,
	|	КурсыВалют.Период КАК ДатаВалюты,
	|	КурсыВалют.Курс
	|ИЗ
	|	РегистрСведений.КурсыВалют КАК КурсыВалют
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Типовой.ДвиженияССубконто(&НачалоПериода, &КонецПериода, Субконто1 В (&СчетОрганизации), , ) КАК ТиповойДвиженияССубконто
	|		ПО (КурсыВалют.Период = НАЧАЛОПЕРИОДА(ТиповойДвиженияССубконто.Регистратор.Дата, ДЕНЬ))
	|ГДЕ
	|	(ТиповойДвиженияССубконто.СчетДт = &СчетБанк
	|			ИЛИ ТиповойДвиженияССубконто.СчетКт = &СчетБанк)
	|	И ТиповойДвиженияССубконто.Регистратор.Субконто1 В(&Суб1)
	|	И КурсыВалют.Валюта = &Доллар"
Показать



вроде бы на первый взгляд все нормально, курс на эти даты выводится правильный, но записи попадают не все, и отчет формирует не правильную итоговую сумму.

Я думаю это за счет того что если на эту дату нету курса в рег.сведений, то запись не выводится.

А как сделать так, что если нету курса на эту дату, чтобы брался предыдущий, по принципу "СрезПоследних"

Заранее спасибо))
Ответы
Избранное Подписка Сортировка: Древо
3. olenka-ul 3 29.12.16 15:55 Сейчас в теме
(1) Я думаю Вам нужно взять КурсыВалютСрезПоследних, и регистр КурсыВалютСрезПоследних присоединять левым соединением.
4. dll 9 29.12.16 16:08 Сейчас в теме
(3) Ему нужно на каждую дату записи, а не на последнюю дату.


(1) возьми в пакете сначала все курсы, потом соедини со своей таблицей с условием по дате и сгруппируй по Максимум(ПериодКурса) и последний пакет - объединяешь свою таблицу с регистром курсов валют по Максимум(ПериодКурса) и Период из регистра.
5. user608303_1c-grand 03.01.17 21:31 Сейчас в теме
(4)
возьми в пакете сначала все курсы, потом соедини со своей таблицей с условием по дате и сгруппируй по Максимум(ПериодКурса) и последний пакет - объединяешь свою таблицу с регистром курсов валют по Максимум(ПериодКур


Не получается((
Можно на примере моего запроса
6. starjevschik 04.01.17 11:10 Сейчас в теме
(5) я же написал готовое правильное решение в (2)...
2. starjevschik 28.12.16 22:38 Сейчас в теме
Универсальный запрос-конвертер валют. На вход надо подать временные таблицы: ВсеВалюты - это все используемые валюты (одно поле Валюта), ВсеДатыКурсов - это все даты, на которые нужны курсы (одно поле ДатаКурса).
На выходе у него временная таблица КроссКурсыВалют, там вроде все понятно.
	Запрос.Текст = "ВЫБРАТЬ
	               |	ВсеВалюты.Валюта,
	               |	ВсеДатыКурсов.ДатаКурса
	               |ПОМЕСТИТЬ ВалютыДатыКурсов
	               |ИЗ
	               |	ВсеВалюты КАК ВсеВалюты
	               |		ПОЛНОЕ СОЕДИНЕНИЕ ВсеДатыКурсов КАК ВсеДатыКурсов
	               |		ПО (ИСТИНА)
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	МАКСИМУМ(КурсыВалют.Период) КАК ДатаВРегистреВалют,
	               |	КурсыВалют.Валюта,
	               |	ВалютыДатыКурсов.ДатаКурса
	               |ПОМЕСТИТЬ ДатыКурсовИРегистра
	               |ИЗ
	               |	РегистрСведений.КурсыВалют КАК КурсыВалют
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВалютыДатыКурсов КАК ВалютыДатыКурсов
	               |		ПО КурсыВалют.Валюта = ВалютыДатыКурсов.Валюта
	               |			И КурсыВалют.Период <= ВалютыДатыКурсов.ДатаКурса
	               |
	               |СГРУППИРОВАТЬ ПО
	               |	ВалютыДатыКурсов.ДатаКурса,
	               |	КурсыВалют.Валюта
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	ДатыКурсовИРегистра.Валюта,
	               |	ДатыКурсовИРегистра.ДатаКурса,
	               |	КурсыВалют.Курс / КурсыВалют.Кратность КАК КурсСКратностью
	               |ПОМЕСТИТЬ КурсыВалютДвижений
	               |ИЗ
	               |	ДатыКурсовИРегистра КАК ДатыКурсовИРегистра
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют
	               |		ПО ДатыКурсовИРегистра.ДатаВРегистреВалют = КурсыВалют.Период
	               |			И ДатыКурсовИРегистра.Валюта = КурсыВалют.Валюта
	               |;
	               |
	               |////////////////////////////////////////////////////////////­////////////////////
	               |ВЫБРАТЬ РАЗРЕШЕННЫЕ
	               |	КурсыВалютДвижений.Валюта КАК ВалютаИсходная,
	               |	КурсыВалютДвижений1.Валюта КАК ВалютаРезультат,
	               |	КурсыВалютДвижений.ДатаКурса,
	               |	КурсыВалютДвижений.КурсСКратностью КАК КурсИсходный,
	               |	КурсыВалютДвижений1.КурсСКратностью КАК КурсРезультат,
	               |	КурсыВалютДвижений.КурсСКратностью / КурсыВалютДвижений1.КурсСКратностью КАК КроссКурс
	               |ПОМЕСТИТЬ КроссКурсыВалют
	               |ИЗ
	               |	КурсыВалютДвижений КАК КурсыВалютДвижений
	               |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ КурсыВалютДвижений КАК КурсыВалютДвижений1
	               |		ПО КурсыВалютДвижений.ДатаКурса = КурсыВалютДвижений1.ДатаКурса";
	Запрос.Выполнить();
Показать
7. herfis 276 04.01.17 11:46 Сейчас в теме
Вопрос очень-очень частый. Но если гугл забанили, могу дать топовую ссылку:
Срез последних на каждую дату в СКД и запросе
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Программист 1С
Санкт-Петербург
зарплата от 110 000 руб. до 120 000 руб.
Полный день

Аналитик 1С
Санкт-Петербург
зарплата от 80 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб.
Полный день

Программист 1С
Нижний Новгород
зарплата до 120 000 руб.
Полный день

Программист 1С
Волгоград
зарплата от 45 000 руб. до 90 000 руб.
Полный день