1. user631997_seirosso1 24.08.17 20:51 Сейчас в теме

Регистр Сведений

Добрый день! Подскажите как в регистре сведений можно получить курс указанной валюты(предшествующий актуальному)?
Найденные решения
2. lefthander 24.08.17 20:54 Сейчас в теме
(1)Получаете актуальный курс, определяете дату этого курса, отнимаете от даты одни сутки и на получившуюся дату определяете курс
3. AnnaKalacheva 6 24.08.17 21:00 Сейчас в теме
(2)Узнать дату записи с актуальным курсом срезом последних на текущую дату. Отнять от этой даты период регистра и сделать срез последних на полученную дату.
11. Fox-trot 105 24.08.17 22:56 Сейчас в теме
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(ВалютыСрезПоследних.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ Масс
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, Валюта = &Валюта) КАК ВалютыСрезПоследних
;

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

УПОРЯДОЧИТЬ ПО
	Период УБЫВ
Показать
18. spacecraft 27.08.17 13:02 Сейчас в теме
(15) Можно и так:
ВЫБРАТЬ 
Валюты.Период КАК Период, 
Валюты.Валюта, 
Валюты.Курс КАК Курс 
ИЗ 
РегистрСведений.Валюты.СрезПоследних КАК ВалютыСрезПоследних 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Валюты КАК Валюты 
ПО (Валюты.Валюта = ВалютыСрезПоследних.Валюта
                И ВалютыСрезПоследних.Период <> Валюты.Период) 

СГРУППИРОВАТЬ ПО 
Валюты.Валюта, 
Валюты.Период, 
Валюты.Курс
Показать


Этот запрос будет чуть быстрее.
Остальные ответы
Избранное Подписка Сортировка: Древо
2. lefthander 24.08.17 20:54 Сейчас в теме
(1)Получаете актуальный курс, определяете дату этого курса, отнимаете от даты одни сутки и на получившуюся дату определяете курс
3. AnnaKalacheva 6 24.08.17 21:00 Сейчас в теме
(2)Узнать дату записи с актуальным курсом срезом последних на текущую дату. Отнять от этой даты период регистра и сделать срез последних на полученную дату.
10. Fox-trot 105 24.08.17 22:34 Сейчас в теме
(1) зачем отнимать, если можно искать максимальную дату меньше.... ну вы поняли :)
27. pavlovsv 08.05.18 17:09 Сейчас в теме
(1)Добрый день. Есть ещё вот такой вариант решения:
ВЫБРАТЬ ПЕРВЫЕ 1 
КурсыВалют.Период, 
КурсыВалют.Валюта, 
КурсыВалют.Курс 
ИЗ 
РегистрСведений.КурсыВалют КАК КурсыВалют 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 
МАКСИМУМ(КурсыВалют.Период) КАК Период, 
&ВалютаСсылка КАК Валюта 
ИЗ 
РегистрСведений.КурсыВалют КАК КурсыВалют 
ГДЕ 
КурсыВалют.Валюта = &ВалютаСсылка) КАК МаксПериодКурсаВалюты 
ПО (МаксПериодКурсаВалюты.Период > КурсыВалют.Период) 
И (МаксПериодКурсаВалюты.Валюта = КурсыВалют.Валюта) 

УПОРЯДОЧИТЬ ПО 
КурсыВалют.Период УБЫВ 
Показать
4. user631997_seirosso1 24.08.17 21:43 Сейчас в теме
Подскажите, а где можно в запрос вписать Функцию(Новый граница.ВидГраницы.Включая)?. Конец дня у меня получается, но мне надо границу вместо КонецДня

Вот Запрос;

ВЫБРАТЬ
ВалютыСрезПоследних.Валюта,
ВалютыСрезПоследних.Курс,
Период
ИЗ
РегистрСведений.Валюты.СрезПоследних(&Период, Валюта = &Валюта) КАК ВалютыСрезПоследних
6. Denis_CFO 35 24.08.17 22:04 Сейчас в теме
(4)
 ГраницаПериода = Новый Граница(КонецДня(ТекущаяДата()), ВидГраницы.Включая);		
	Запрос.УстановитьПараметр("Период", ГраницаПериода);
5. user631997_seirosso1 24.08.17 21:59 Сейчас в теме
Подскажите еще как в данном запросе можно применить функцию РазностьДат?
7. Denis_CFO 35 24.08.17 22:05 Сейчас в теме
(5) В данном запросе её негде применить.... А что нужно?
8. user631997_seirosso1 24.08.17 22:12 Сейчас в теме
Сасибо за ответ!
Подскажите, в функции РазностьДат написал следующее РазностьДат(&Период, 1, День) система ругается говорит неверный параметр, подскажите что не так могу делать?

ВЫБРАТЬ
ВалютыСрезПоследних.Валюта,
ВалютыСрезПоследних.Курс,
Период
ИЗ
РегистрСведений.Валюты.СрезПоследних(РазностьДат(&Период, 1, День), Валюта = &Валюта) КАК ВалютыСрезПоследних
9. Denis_CFO 35 24.08.17 22:24 Сейчас в теме
(8) а, понятно, хорошее желание. Но так работать в этой таблице не будет.
11. Fox-trot 105 24.08.17 22:56 Сейчас в теме
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(ВалютыСрезПоследних.Период, ДЕНЬ) КАК Период
ПОМЕСТИТЬ Масс
ИЗ
	РегистрСведений.КурсыВалют.СрезПоследних(, Валюта = &Валюта) КАК ВалютыСрезПоследних
;

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

УПОРЯДОЧИТЬ ПО
	Период УБЫВ
Показать
12. user631997_seirosso1 25.08.17 00:34 Сейчас в теме
Спасибо вам за ваше решение, вы бы не могли мне прокоментировать эти две строчки:

1.ПО Валюты.Период < Масс.Период, т е правильно ли я понял что поле Валюты.Период должно быть меньше Масс.Период и таким образом происходит отнимание одного дня?
2. Почему вы взяли функцию НачалоПериода?
13. Denis_CFO 35 25.08.17 07:02 Сейчас в теме
(12)
таким образом происходит отнимание одного дня
это не отнимание одного дня. Это значит, что берется запись за предыдущий период.
В (1) написано словами, а в (11) функцией.
14. Fox-trot 105 25.08.17 11:15 Сейчас в теме
(12) а ты точно программист?
15. user631997_seirosso1 26.08.17 22:50 Сейчас в теме
Добрый день! Подскажите как правильно выбрать все предыдущие курсы валют, кроме актуальных, подскажите что не так делаю, вот код:

ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(ВалютыСрезПоследних.Период, ДЕНЬ) КАК Период,
	Валюты.Валюта,
	Валюты.Курс КАК Курс
ИЗ
	РегистрСведений.Валюты.СрезПоследних КАК ВалютыСрезПоследних
		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Валюты КАК Валюты
		ПО ВалютыСрезПоследних.Период <> Валюты.Период

СГРУППИРОВАТЬ ПО
	Валюты.Валюта,
	НАЧАЛОПЕРИОДА(ВалютыСрезПоследних.Период, ДЕНЬ),
	Валюты.Курс
Показать
17. spacecraft 27.08.17 12:28 Сейчас в теме
(15) Переделал запрос:
ВЫБРАТЬ
	Валюты.Период КАК Период,
	Валюты.Валюта КАК Валюта,
	Валюты.Курс КАК Курс
ИЗ
	РегистрСведений.Валюты КАК Валюты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Валюты.СрезПоследних КАК ВалютыСрезПоследних
		ПО (Валюты.Валюта = ВалютыСрезПоследних.Валюта
				И Валюты.Период = ВалютыСрезПоследних.Период)
ГДЕ
	ВалютыСрезПоследних.Период ЕСТЬ NULL

СГРУППИРОВАТЬ ПО
	Валюты.Валюта,
	Валюты.Курс,
	Валюты.Период
Показать
21. ildarovich 6720 28.08.17 17:22 Сейчас в теме
(17)(18) Проверил в консоли, запросы дают не то, что нужно. И вообще, соединять реальную таблицу с виртуальной в одном запросе не рекомендуется.

Для одной заданной валюты я бы еще предложил такой вариант
ВЫБРАТЬ ПЕРВЫЕ 1
	ВЗ.Период КАК Период,
	ВЗ.Курс КАК Курс
ИЗ
	(ВЫБРАТЬ ПЕРВЫЕ 2
		КурсыВалют.Период КАК Период,
		КурсыВалют.Курс КАК Курс
	ИЗ
		РегистрСведений.КурсыВалют КАК КурсыВалют
	ГДЕ
		КурсыВалют.Валюта = &Валюта
	УПОРЯДОЧИТЬ ПО
		Период УБЫВ) КАК ВЗ
УПОРЯДОЧИТЬ ПО
	Период
Показать
22. spacecraft 28.08.17 18:16 Сейчас в теме
(21)
(17)(18) Проверил в консоли, запросы дают не то, что нужно

Это был ответ на (15). А именно: "Подскажите как правильно выбрать все предыдущие курсы валют, кроме актуальных".
23. ildarovich 6720 28.08.17 21:07 Сейчас в теме
(22) Теперь понял, спасибо, но это уже совсем неинтересная и высосанная из пальца задача по сравнению с предпоследним курсом.
24. user631997_seirosso1 28.08.17 23:28 Сейчас в теме
25. AlexeyPapanov 31.08.17 23:05 Сейчас в теме
(21)
И вообще, соединять реальную таблицу с виртуальной в одном запросе не рекомендуется.

виртуальную надо помещать во временную с индексацией по объединяемым полям, а потом уже соединять?
а почему? так производительнее или еще почему-то?
26. ildarovich 6720 01.09.17 11:43 Сейчас в теме
(25)
виртуальную надо помещать во временную
- да, желательно
с индексацией по объединяемым полям
- не обязательно, затраты на индексацию часто бывают больше выигрыша
или еще почему-то?
- меньше риск, что планировщик выполнения запроса выберет неправильный план, приводящий к большим затратам времени на выполнение запроса, поскольку виртуальный регистр это фактически сложный вложенный запрос, при обработке которого может быть выбран не оптимальный порядок соединения.
18. spacecraft 27.08.17 13:02 Сейчас в теме
(15) Можно и так:
ВЫБРАТЬ 
Валюты.Период КАК Период, 
Валюты.Валюта, 
Валюты.Курс КАК Курс 
ИЗ 
РегистрСведений.Валюты.СрезПоследних КАК ВалютыСрезПоследних 
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.Валюты КАК Валюты 
ПО (Валюты.Валюта = ВалютыСрезПоследних.Валюта
                И ВалютыСрезПоследних.Период <> Валюты.Период) 

СГРУППИРОВАТЬ ПО 
Валюты.Валюта, 
Валюты.Период, 
Валюты.Курс
Показать


Этот запрос будет чуть быстрее.
19. user631997_seirosso1 27.08.17 23:01 Сейчас в теме
(18)Спасибо вам за ваше решение вы очень помогли! Вы не могли бы прокомментировать немного вот эти строки кода, мне просто не до конца понятно как работает данное условие при ГДЕ ВалютыСрезПоследних.Период ЕСТЬ NULL

ПО (Валюты.Валюта = ВалютыСрезПоследних.Валюта
И Валюты.Период = ВалютыСрезПоследних.Период)
ГДЕ
ВалютыСрезПоследних.Период ЕСТЬ NULL

Заранее спасибо!
20. spacecraft 28.08.17 00:20 Сейчас в теме
(19)
ГДЕ ВалютыСрезПоследних.Период ЕСТЬ NULL

Предварительно соберется таблица Валюты с левым соединением присоединятся записи из виртуальной таблицы среза последних (что в свою очередь часть записей той же таблицы). Те записи, которых нет в срезе последних, будут иметь в поле ВалютыСрезПоследних.Период значения NULL. Вот по ним и накладываем фильтр. В итоге отсекутся все записи, которые сопоставились из обеих таблиц.
16. user631997_seirosso1 27.08.17 12:16 Сейчас в теме
Подскажите пожалуйста в чем может быть ошибка, очень надо! Данную строку ПО ВалютыСрезПоследних.Период <> Валюты.Период по разному в ней делал условия, но все равно попадают и актуальные курсы!
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Бизнес-архитектор 1С, ведущий консультант
Санкт-Петербург
Полный день

Руководитель проектов 1С
Санкт-Петербург
Полный день

Программист 1C
Москва
зарплата от 100 000 руб. до 150 000 руб.
Полный день

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

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