|
Запрос ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых | ☑ | ||
---|---|---|---|---|
0
dimm7310
28.02.13
✎
16:02
|
вроде простой запрос но не показывает цену
"ВЫБРАТЬ | Таб.Номенклатура, | Таб.Сумма, | Таб.Количество, | Таб.Скидка, | ЦеныНоменклатурыПоставщиковСрезПервых.Соглашение.Партнер КАК Поставщик, | ЦеныНоменклатурыПоставщиковСрезПервых.Цена * Таб.Количество КАК СуммаЗакуп | ИЗ | (ВЫБРАТЬ | ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, | ЗаказКлиентаТовары.КоличествоУпаковок КАК Количество, | ЗаказКлиентаТовары.Сумма КАК Сумма, | ЗаказКлиентаТовары.СуммаРучнойСкидки КАК Скидка |ИЗ | Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары |ГДЕ | ЗаказКлиентаТовары.Ссылка = &ТекЗаказ) Как Таб | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД,) КАК ЦеныНоменклатурыПоставщиковСрезПервых | ПО (Таб.Номенклатура.Ссылка = ЦеныНоменклатурыПоставщиковСрезПервых.Номенклатура.Ссылка) |"; Если убрать фильтр по периоду, то выдаст дубли с ценами если у товара несколько цен от разных поставщиков. Мне нужна одна цена - самая последняя. Не могу сообразить. Что не так ? |
|||
1
lxndr
28.02.13
✎
16:03
|
(0) Если
>> Мне нужна одна цена - самая последняя. Тогда тебе нужен СрезПоследних |
|||
2
ХочуСказать
28.02.13
✎
16:05
|
так отбор по поставщику задай...
какая цена должна быть если поставщиков несколько? |
|||
3
ХочуСказать
28.02.13
✎
16:06
|
если просто первая попавшееся, то сделай свой срез
|
|||
4
Serginio1
28.02.13
✎
16:10
|
Попробуй выбрать первые, так как макс может выдавать одинаковую дату для нескольких документов
v8: запрос. найти посл. поступление! |
|||
5
Serginio1
28.02.13
✎
16:10
|
4 смотри 91
|
|||
6
GANR
28.02.13
✎
16:23
|
Сразу в глаза бросилось:
1. ЦеныНоменклатурыПоставщиковСрезПервых по ЕСТЬNULL неплохо-бы проверять - в случае отсутствия записи в правой таблице запрос должен в ошибку вылететь. 2. А это что такое? Таб.Номенклатура.Ссылка = ЦеныНоменклатурыПоставщиковСрезПервых.Номенклатура.Ссылка как-нибудь так надо-бы: сгруппировать правую таблицу по Номенклатуре перед соединением и... Таб.Номенклатура = СвернутыеЦеныНоменклатурыПоставщиковСрезПервых.Номенклатура И Таб.Поставщик = СвернутыеЦеныНоменклатурыПоставщиковСрезПервых.Поставщик А что вообще ДОЛЖЕН делать запрос ??? |
|||
7
GANR
28.02.13
✎
16:26
|
+(6) Первую попавшуюся цену что ли показывать? Что это за задачка такая?
|
|||
8
ssh2006
28.02.13
✎
16:28
|
(0) ВТ Срез тут не поможет тебе
|
|||
9
GANR
28.02.13
✎
16:32
|
Описание задачи запроса в студию.
|
|||
10
dimm7310
28.02.13
✎
16:35
|
(7) нужно получить ближайшую цену до указанной даты.
Если я хочу получить на дату = 22.02.13 т.е. у товара есть: цена=100 р на 20.02.13 Поставщик1 цена=105 р на 19.02.13 Поставщик2 и цена=110 р на 24.02.13 Поставщик1 то запрос должен вернуть цену=100 |
|||
11
dimm7310
28.02.13
✎
16:35
|
(5) попробую
|
|||
12
ssh2006
28.02.13
✎
16:36
|
(10) Поставщик вероятнее всего - измерение РС. Поэтому срез не даст последнее/первое значение по номенклатуре без учета поставщика, отсюда [ дубли с ценами если у товара несколько цен от разных поставщиков]
|
|||
13
GANR
28.02.13
✎
16:46
|
(10) Если в РС на одну дату 2 цены
цена=100 р на 20.02.13 Поставщик1 цена=105 р на 20.02.13 Поставщик2 какую брать? |
|||
14
dimm7310
28.02.13
✎
16:48
|
(13) меньшую
|
|||
15
ХочуСказать
28.02.13
✎
16:50
|
(13) у него задача видимо в том, что бы найти наиболее выгодного продавца...
(14) к заказу сначала находит из таблицы цен, наиболее близкую дату... затем соединяесь по ней получаешь поставщика и цену |
|||
16
lxndr
28.02.13
✎
16:51
|
(14) а поставщик нужен?
|
|||
17
GANR
28.02.13
✎
17:02
|
(14) запрос нетривиальный, будет окно - сделаю
|
|||
18
ХочуСказать
28.02.13
✎
17:04
|
(17) запрос, как запрос...
наподобе среза последних на каждую дату документа, не сложнее |
|||
19
Serginio1
28.02.13
✎
17:39
|
(17) Запрос с выбрать первые с сортировкой по дате убыв,цена
и вхождением поставщика в подзапрос и в подзапросе условие на номенклатуру. Смотри 5 |
|||
20
GANR
28.02.13
✎
17:59
|
(0)(10)(17) Так?
ВЫБРАТЬ ТоварыВЗаказе.Номенклатура, ТоварыВЗаказе.Сумма, ТоварыВЗаказе.Количество, ТоварыВЗаказе.Скидка, ЕСТЬNULL(СрезПервыхДешевейших.Соглашение.Партнер, ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)) КАК Поставщик, ЕСТЬNULL(СрезПервыхДешевейших.Цена, 0) * ТоварыВЗаказе.Количество КАК СуммаЗакуп ИЗ (ВЫБРАТЬ ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, СУММА(ЗаказКлиентаТовары.КоличествоУпаковок) КАК Количество, СУММА(ЗаказКлиентаТовары.Сумма) КАК Сумма, СУММА(ЗаказКлиентаТовары.СуммаРучнойСкидки) КАК Скидка ИЗ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары ГДЕ ЗаказКлиентаТовары.Ссылка = &ТекЗаказ СГРУППИРОВАТЬ ПО ЗаказКлиентаТовары.Номенклатура) КАК ТоварыВЗаказе ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныСрезПервых.Период КАК Период, ЦеныСрезПервых.Соглашение КАК Соглашение, ЦеныСрезПервых.Номенклатура КАК Номенклатура, ЦеныСрезПервых.Цена КАК Цена ИЗ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД, ) КАК ЦеныСрезПервых ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныСрезПервых.Период КАК Период, ЦеныСрезПервых.Номенклатура КАК Номенклатура, МИНИМУМ(ЦеныСрезПервых.Цена) КАК Цена ИЗ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД, ) КАК ЦеныСрезПервых СГРУППИРОВАТЬ ПО ЦеныСрезПервых.Период, ЦеныСрезПервых.Номенклатура) КАК МинимальныеЦены ПО ЦеныСрезПервых.Период = МинимальныеЦены.Период И ЦеныСрезПервых.Номенклатура = МинимальныеЦены.Номенклатура И ЦеныСрезПервых.Цена = МинимальныеЦены.Цена) КАК СрезПервыхДешевейших ПО ТоварыВЗаказе.Номенклатура = СрезПервыхДешевейших.Номенклатура |
|||
21
GANR
28.02.13
✎
18:09
|
Сам не уверен в правильности (20), так как репрезентативных тестовых данных нет.
|
|||
22
Serginio1
28.02.13
✎
18:38
|
Помести свой запрос в таблицу и проиндексируй по дате и цене
ИНДЕКСИРОВАТЬ ПО Номенклатура, Дата, Цена А потом выбирай ВЫБРАТЬ втИндекс.Номенлатура КАК Номенлатура, втИндекс.Поставщик, итд ИЗ втИндекс КАК втИндекс ГДЕ (втИндекс.Поставщик) В (ВЫБРАТЬ ПЕРВЫЕ 1 док.Поставщик ИЗ втИндексКАК Док ГДЕ Док.Номенклатура=втИндекс.Номенлатура УПОРЯДОЧИТЬ ПО Док.Дата УБЫВ ,Док.Цена) |
|||
23
GANR
28.02.13
✎
19:46
|
ВЫБРАТЬ
ТоварыВЗаказе.Номенклатура, ТоварыВЗаказе.Сумма, ТоварыВЗаказе.Количество, ТоварыВЗаказе.Скидка, ЕСТЬNULL(СрезПервыхДешевейших.Соглашение.Партнер, ЗНАЧЕНИЕ(Справочник.Партнеры.ПустаяСсылка)) КАК Поставщик, ЕСТЬNULL(СрезПервыхДешевейших.Цена, 0) * ТоварыВЗаказе.Количество КАК СуммаЗакуп ИЗ (ВЫБРАТЬ ЗаказКлиентаТовары.Номенклатура КАК Номенклатура, СУММА(ЗаказКлиентаТовары.КоличествоУпаковок) КАК Количество, СУММА(ЗаказКлиентаТовары.Сумма) КАК Сумма, СУММА(ЗаказКлиентаТовары.СуммаРучнойСкидки) КАК Скидка ИЗ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары ГДЕ ЗаказКлиентаТовары.Ссылка = &ТекЗаказ СГРУППИРОВАТЬ ПО ЗаказКлиентаТовары.Номенклатура) КАК ТоварыВЗаказе ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныСрезПервых.Период КАК Период, ЦеныСрезПервых.Соглашение КАК Соглашение, ЦеныСрезПервых.Номенклатура КАК Номенклатура, ЦеныСрезПервых.Цена КАК Цена ИЗ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД, ) КАК ЦеныСрезПервых ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦСП.Период КАК Период, ЦСП.Номенклатура КАК Номенклатура, МИНИМУМ(ЦСП.Цена) КАК Цена ИЗ (ВЫБРАТЬ ЦеныСрезПервых.Период КАК Период, ЦеныСрезПервых.Номенклатура КАК Номенклатура, ЦеныСрезПервых.Соглашение КАК Соглашение, ЦеныСрезПервых.Цена КАК Цена ИЗ РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД, ) КАК ЦеныСрезПервых) КАК ЦСП СГРУППИРОВАТЬ ПО ЦСП.Период, ЦСП.Номенклатура) КАК МинимальныеЦены ПО ЦеныСрезПервых.Период = МинимальныеЦены.Период И ЦеныСрезПервых.Номенклатура = МинимальныеЦены.Номенклатура И ЦеныСрезПервых.Цена = МинимальныеЦены.Цена) КАК СрезПервыхДешевейших ПО ТоварыВЗаказе.Номенклатура = СрезПервыхДешевейших.Номенклатура |
|||
24
dimm7310
01.03.13
✎
10:23
|
Спасибо попробую оба варианта.
Мне в первую очередь важно, что бы это отрабатывало быстро , что бы двигаясь по заказам в динамическом списке в вспомогательной таблице отражалась разница цен реализации и закупа(это предварительный анализ пришедших заявок покупателей и небольшая неточность допустима - если обработка предложит не самую выгодную цену, все равно менеджер потом будет уточнять), т.е. нужно просто получать послеюнюю запись цены закупа неважно какого поставщика |
|||
25
GANR
01.03.13
✎
10:58
|
(24) имхо, (20) - заведомо неверный
|
|||
26
Serginio1
01.03.13
✎
11:17
|
(24) Это порочная практика. Нужно сразу делать один запрос с отбором накладных и номенклатур не попадающих в определенный диапазон наценок.
|
|||
27
dimm7310
04.03.13
✎
17:13
|
(23) к сожалению не работает, возвращает пустые цены. Похоже
РегистрСведений.ЦеныНоменклатурыПоставщиков.СрезПервых(&ДатаД, ) возвращает пустую таблицу |
|||
28
dimm7310
04.03.13
✎
17:20
|
+(27) а если убрать параметр ДатаД - то работает, но нужно еще проверять какие он цены вытаскивает
|
|||
29
dimm7310
04.03.13
✎
17:29
|
+(27) но даже так задваивает если есть цены разных поставщиков
|
|||
30
Serginio1
04.03.13
✎
17:36
|
||||
31
Serginio1
04.03.13
✎
17:38
|
Используй комбинацию СрезПоследних и ВыбратьПервые как в 22 с использованием временных таблиц.
|
|||
32
dimm7310
04.03.13
✎
18:12
|
(31) хорошо попробую.
|
|||
33
GANR
04.03.13
✎
19:19
|
(32) У тебя на руках данные - разрежь запрос на запчасти и посмотри, что возвращает каждый подзапрос.
|
|||
34
GANR
04.03.13
✎
19:20
|
Надо добиться, чтобы СрезПервыхДешевейших не двоился
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |