|
v8: Запрос по регистру сведений: значение на каждую дату | ☑ | ||
---|---|---|---|---|
0
oleg_prg
07.06.12
✎
17:32
|
Добрый день. Люди добрые, помогите решить задачку.
Необходимо с помощью запроса получить курсы валют на КАЖДЫЙ день, вне зависимости от того было движение по запросу или нет. БЕЗ СКД, только запросом, СКД использоваться не будет - такое условие. Надо получить такой результат Валюта День Курс USD 01/01/12 35 USD 01/02/12 35 USD 01/03/12 35 USD 01/04/12 36 USD 01/05/12 36 USD 01/07/12 37 USD 01/08/12 37 USD 01/09/12 37 Но в регистре сведений есть движения только такие Валюта День Курс USD 01/01/12 35 USD 01/04/12 36 USD 01/07/12 37 Заранее благодарен! Вот то что у меня получилось на текущий момент Идея такая - создать таблицу с датами и по датам получать результат регистра сведений //Таблица с датами ВЫБРАТЬ ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, Основа.НомерДняВПериоде) КАК Дата ПОМЕСТИТЬ ТабДата ИЗ (ВЫБРАТЬ 1000 * (База1.Б1 - 1) + 100 * (База2.Б2 - 1) + 10 * (База3.Б3 - 1) + (База4.Б4 - 1) КАК НомерДняВПериоде ИЗ (ВЫБРАТЬ 1 КАК Б1 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВЫБРАТЬ 10) КАК База1 ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 1 КАК Б2 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВЫБРАТЬ 10) КАК База2 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 1 КАК Б3 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВЫБРАТЬ 10) КАК База3 ПО (ИСТИНА) ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ 1 КАК Б4 ОБЪЕДИНИТЬ ВЫБРАТЬ 2 ОБЪЕДИНИТЬ ВЫБРАТЬ 3 ОБЪЕДИНИТЬ ВЫБРАТЬ 4 ОБЪЕДИНИТЬ ВЫБРАТЬ 5 ОБЪЕДИНИТЬ ВЫБРАТЬ 6 ОБЪЕДИНИТЬ ВЫБРАТЬ 7 ОБЪЕДИНИТЬ ВЫБРАТЬ 8 ОБЪЕДИНИТЬ ВЫБРАТЬ 9 ОБЪЕДИНИТЬ ВЫБРАТЬ 10) КАК База4 ПО (ИСТИНА)) КАК Основа ; ВЫБРАТЬ ТабДата.Дата КАК ДАТА1, КурсыВалют.Курс ИЗ ТабДата КАК ТабДата ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК КурсыВалют ПО ТабДата.Дата = КурсыВалют.Период |
|||
1
DrShad
07.06.12
✎
17:33
|
в книгу знаний там это уже давно все решено
|
|||
2
shuhard
07.06.12
✎
17:33
|
(0) читай классиков
в разделе книги знаний есть высоконаучная статья Срез последних на каждую дату |
|||
3
andrewks
07.06.12
✎
17:36
|
лень читать длинный код.
формирование таблицы дат: v8: Как в запросе выбрать все даты входящие в указанный период? а дальше соединение с РС, и вперёд |
|||
4
DrShad
07.06.12
✎
17:38
|
(3) ну выбрать даты он осилил, а вот соединить с РС не смог
|
|||
5
andrewks
07.06.12
✎
17:45
|
(4)ну, наверное, ему надо смотреть в сторону СрезПоследних
|
|||
6
oleg_prg
07.06.12
✎
17:48
|
Спасибо за совет, по поводу статьи "Срез последних на каждую дату" - читат, гуглил, я же говорю не получается, проблема в том, что я не могу понять как объединить эти таблицы, в 1С8 новичок. Если можно помогите конкретным кодом по этой задаче.
|
|||
7
oleg_prg
07.06.12
✎
17:49
|
В запросе СрезПоследних может принять лишь дату из параметра например &Дата1, поэтому срезПоследних неподходит, надо как то с МАКСИМУМ и запрос в запросе, ч-з левое соединение, но как - не могу сообразить
|
|||
8
shuhard
07.06.12
✎
17:49
|
(6) чё то ты гонишь,
в статье готовый код, который ни с чем соединять не надо |
|||
9
andrewks
07.06.12
✎
17:54
|
(7) чё-чё?
|
|||
10
oleg_prg
07.06.12
✎
17:57
|
я реально брал код из статьи, правил в консоли запросов, получил только последние курсы, таблицы дат не было.
|
|||
11
oleg_prg
07.06.12
✎
17:58
|
Я же говорю, форум для меня это крайний случай, обычно сам все раскапываю, а с этой задачей сижу туплю, незнаю как сделать... Кому не влом, помогите плиз рабочим кодом. Надеюсь на понимание
|
|||
12
shuhard
07.06.12
✎
18:00
|
(11) ещё раз
код в статье рабочий, проверенный тысячи раз |
|||
13
oleg_prg
07.06.12
✎
18:02
|
ВотВЫБРАТЬ
Таблица3.Курс, Таблица3.Валюта, Таблица3.Период ИЗ (ВЫБРАТЬ Таблица1.Валюта КАК Валюта, МАКСИМУМ(Таблица1.Период) КАК Период ИЗ РегистрСведений.КурсыВалют КАК Таблица1 ГДЕ Таблица1.Период <= &КонецПериода СГРУППИРОВАТЬ ПО Таблица1.Валюта) КАК Таблица2 ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют КАК Таблица3 ПО Таблица2.Валюта= Таблица3.Валюта И Таблица2.Период = Таблица3.Период |
|||
14
oleg_prg
07.06.12
✎
18:02
|
Это код? Или я чет путаю?
|
|||
15
oleg_prg
07.06.12
✎
18:03
|
Именно его я брал за основу из статьи, не получилось, в консоли запросов получил последние курсы на &КонецПериода
|
|||
16
oleg_prg
07.06.12
✎
18:03
|
т.е. такого результата не получил
Валюта День Курс USD 01/01/12 35 USD 01/02/12 35 USD 01/03/12 35 USD 01/04/12 36 USD 01/05/12 36 USD 01/07/12 37 USD 01/08/12 37 USD 01/09/12 37 |
|||
17
andrewks
07.06.12
✎
19:18
|
(15) не так соединил, значит. у тебя должно быть соединение двух таблиц - таблицы-результата вложенного запроса с таблицей регистра курсов.
во вложенном запросе - соединение таблицы дат с таблицей регистра курсов с группировкой и максимумом, в выхлопе ты должен получить для каждой заданной даты - дату установки курса |
|||
18
andrewks
07.06.12
✎
19:24
|
вот примерно так должен выглядеть вложенный запрос:
в итоге ты будешь иметь соответствие, что, например, курс, действующий на дату Дата1, установлен в день Дата2 ну, а дальше - дело техники, соединить с регистром и выцепить из этой даты курс |
|||
19
andrewks
07.06.12
✎
19:29
|
короче, вот:
|
|||
20
oleg_prg
07.06.12
✎
20:09
|
andrewks Спасибо тебе ОГРОМНОЕ!!! Именно так!
|
|||
21
SnarkHunter
07.06.12
✎
20:30
|
||||
22
PiVa123
07.06.12
✎
20:36
|
> БЕЗ СКД, только запросом, СКД использоваться не будет - такое условие.
Видима было страшно начинать, тем более из СКД получать таблицу значений. |
|||
23
oleg_prg
10.06.12
✎
21:55
|
Ну сложно мне даются запросы, что поделать. 12 лет отработал с 1С7.7, теперь вот осваиваю 1с8.х, мозг заточился в другую сторону... Работаю один, на курсах не был, читаю статьи в инете, смотрю видеоуроки, рядом нет знакомых или кого бы можно было спросить, все осваиваю сам... По поводу СКД, прикол в том что на СКД я это сделал. Спасибо всем за участие )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |