|
Помогите с запросом к спр. "Графики изменения ставок на услуги" | ☑ | ||
---|---|---|---|---|
0
DrManhattan
13.05.15
✎
17:04
|
Имеется справочник "Графики изменения ставок на услуги", в каждом элементе которого есть табличная часть вида "Дата - Ставка"(это означает, что начиная с указанной даты действует указанная ставка).
В результате запроса хочу получить табличку вида: Код элемента справочника - Актуальная ставка. Вроде бы должно быть просто, но че-то туплю, не могу |
|||
1
pavelul73
13.05.15
✎
17:13
|
Максимум Дата
Ставка из твоей тч |
|||
2
DrManhattan
13.05.15
✎
17:15
|
(1) Ну там может быть дата какая-нибудь типа 01.01.2016. Это будет неакутальная ставка
|
|||
3
pavelul73
13.05.15
✎
17:18
|
добавьте условие.
Но лучше, такие значения писать в РС |
|||
4
anatoly
13.05.15
✎
17:20
|
РС однозначно!
измерение - услуга. в ТЧ - РССписок с отбором по услуге. этот велосипед давно уже изобретен, зачем извращаться? |
|||
5
DrManhattan
13.05.15
✎
17:22
|
(3) Я вот и не могу сообразить какое условие. К слову, дата актуальности может быть любая. Этот запрос станет частью отчета, в котором дата актуальности будет задаваться в качестве параметра
|
|||
6
DrManhattan
13.05.15
✎
17:24
|
(4) Ну конфу переписывать тут не вариант, к сожалению. Регистр сведений это замечательно конечно, но придется изобретать велосипед :(
|
|||
7
zenik
13.05.15
✎
17:35
|
Вложенный запрос, выбрать первые 1 упорядочить по дате по убыванию где дата <= актуальная дата не?
|
|||
8
DrManhattan
13.05.15
✎
17:44
|
(7) Попробую завтра, спасибо
|
|||
9
DrManhattan
14.05.15
✎
11:34
|
По совету (7) сделал так:
ВЫБРАТЬ АР_ГрафикиИзмененияСтавокНаУслуги.Ссылка.Наименование, АР_ГрафикиИзмененияСтавокНаУслуги.Ссылка.Код, ВложенныйЗапрос.Дата, ВложенныйЗапрос.Ставка ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги КАК АР_ГрафикиИзмененияСтавокНаУслуги ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1 АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата КАК Дата, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ставка КАК Ставка, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка.Код КАК Код ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги.ГрафикСтавок КАК АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок ГДЕ АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата <= ДАТАВРЕМЯ(2015,5,10) УПОРЯДОЧИТЬ ПО АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата УБЫВ) КАК ВложенныйЗапрос ПО АР_ГрафикиИзмененияСтавокНаУслуги.Ссылка.Код = ВложенныйЗапрос.Код Сразу почему-то не обратил внимания, что результатом вложенного запроса будет всего 1 элемент, а это неправильно. Ну или я неправильно понял подсказку.. Сильно только не пинайте, я начинающий :) |
|||
10
фобка
14.05.15
✎
11:36
|
(9) "выбрать первые 1" это 1 или 0 элементов
|
|||
11
zenik
14.05.15
✎
11:50
|
1. Соединение все же лучше по ссылке элемента делать, а не по коду.
2. Элементы выбирать из справочника, а не из ТЧ. И потом левое соединение с ТЧ по ссылке. Для каждого элемента справочника будет выбрана крайняя дата не дальше актуальной. |
|||
12
DrManhattan
14.05.15
✎
12:02
|
(11) Сейчас попробую, спасибо! Только не понял фразу "Элементы выбирать из справочника, а не из ТЧ". Можно плз фрагмент кода, как не надо и фрагмент, как надо
|
|||
13
zenik
14.05.15
✎
12:34
|
Ну блин, как то так:
ВЫБРАТЬ Справочник.Ссылка ИЗ Справочник КАК Справочник ЛЕВОЕ СОЕДИНЕНИЕ ( ВЫБРАТЬ ПЕРВЫЕ 1 ТабличнаяЧастьСправочника ... Если выбирать по ТЧ, то не получишь элементов у которых ТЧ пустая. |
|||
14
DrManhattan
14.05.15
✎
12:46
|
Так?
ВЫБРАТЬ АР_ГрафикиИзмененияСтавокНаУслуги.Ссылка ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги КАК АР_ГрафикиИзмененияСтавокНаУслуги ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПЕРВЫЕ 1 АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата КАК Дата, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ставка КАК Ставка, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка КАК Ссылка ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги.ГрафикСтавок КАК АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок ГДЕ АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата <= ДАТАВРЕМЯ(2015,5,10) УПОРЯДОЧИТЬ ПО АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата УБЫВ) КАК ВложенныйЗапрос ПО АР_ГрафикиИзмененияСтавокНаУслуги.Ссылка = ВложенныйЗапрос.Ссылка В результате запроса выдается только ссылка на элемент справочника :( |
|||
15
xamass
14.05.15
✎
12:53
|
Вытащи в верхний запрос еще и дату (ВложенныйЗапрос.Дата), тогда будет ссылка и дата (в том случае если таблица не пустая и есть даты больше условия, иначе будет NULL)
|
|||
16
zenik
14.05.15
✎
12:55
|
Так дописывай что выбираешь по желанию:
ВЫБРАТЬ АР_ГрафикиИзмененияСтавокНаУслуги.Код, ВложенныйЗапрос.Дата, ВложенныйЗапрос.Ставка ... |
|||
17
DrManhattan
14.05.15
✎
12:56
|
(15) (16) Получаются одни NULLы во всех строках кроме одной (видимо той единственной, которая является результатом вложенного запроса)
|
|||
18
xamass
14.05.15
✎
13:09
|
(17) Да, так и будет, так как верхний запрос вытягивает все значения справочника, а левое соединение делает только ПЕРВЫЕ 1
|
|||
19
xamass
14.05.15
✎
13:10
|
Убери ПЕРВЫЕ 1, будут даты для всего справочника
|
|||
20
DrManhattan
14.05.15
✎
13:15
|
(19) Тогда из каждого элемента справочника попадает не только актуальная дата и ставка, но и все <= даты актуальности. А надо чтоб из каждого элемента справочника была только одна актуальная ставка.
|
|||
21
zenik
14.05.15
✎
13:43
|
(20) тогда может стоит весь твой запрос засунуть во вложенный, сгруппировать по ссылке, и функцию на МАКСИМУМ(Дата)... Ну это если рассматривать вариант (19)
|
|||
22
DrManhattan
14.05.15
✎
13:50
|
(21) А при этом получится получить ставку соответствующую "максимальной" дате?
|
|||
23
DrManhattan
14.05.15
✎
16:59
|
Кароч сделал вот так в итоге, если кому интересно
ВЫБРАТЬ МАКСИМУМ(АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата) КАК Дата, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка КАК Ссылка ПОМЕСТИТЬ ВТ_АктДаты ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги.ГрафикСтавок КАК АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок ГДЕ АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата <= ДАТАВРЕМЯ(2015,1,1) СГРУППИРОВАТЬ ПО АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка ; ВЫБРАТЬ АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка КАК Ссылка, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Дата КАК Дата, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ставка, АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок.Ссылка.Код ПОМЕСТИТЬ ВТ_Ставки ИЗ Справочник.АР_ГрафикиИзмененияСтавокНаУслуги.ГрафикСтавок КАК АР_ГрафикиИзмененияСтавокНаУслугиГрафикСтавок ; ВЫБРАТЬ * ИЗ ВТ_АктДаты КАК ВТ_АктДаты ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_Ставки КАК ВТ_Ставки ПО ВТ_АктДаты.Ссылка = ВТ_Ставки.Ссылка И ВТ_АктДаты.Дата = ВТ_Ставки.Дата Вроде работает..) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |