![]() |
![]() |
![]() |
|
Очень нужна помощь при составлении запроса по остаткам | ☑ | ||
---|---|---|---|---|
0
OFP
19.10.04
✎
15:34
|
Есть запрос:
ВЫБРАТЬ ТоварыНаСкладах.Номенклатура, ТоварыНаСкладах.ХарактеристикаНоменклатуры, ЦеныСрезПоследних.Цена, СУММА(ВЫБОР КОГДА (ТоварыНаСкладах.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыНаСкладах.КоличествоОстаток КОНЕЦ - ВЫБОР КОГДА (ТоварыВРезервеНаСкладах.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыВРезервеНаСкладах.КоличествоОстаток КОНЕЦ - ВЫБОР КОГДА (ТоварыКПередачеСоСкладов.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыКПередачеСоСкладов.КоличествоОстаток КОНЕЦ) КАК СвободныйКоличествоОстаток ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени, Склад = &ВыбСклад) КАК ТоварыНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&МоментВремени, Склад = &ВыбСклад) КАК ТоварыВРезервеНаСкладах ПО ТоварыВРезервеНаСкладах.Номенклатура = ТоварыНаСкладах.Номенклатура И ТоварыВРезервеНаСкладах.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&МоментВремени, Склад = &ВыбСклад) КАК ТоварыКПередачеСоСкладов ПО ТоварыКПередачеСоСкладов.Номенклатура = ТоварыНаСкладах.Номенклатура И ТоварыКПередачеСоСкладов.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ЦеныТаблицаСрезПоследних.Номенклатура КАК Номенклатура, ЦеныТаблицаСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, ВЫБОР КОГДА ЦеныТаблицаСрезПоследних.ОсновнаяЕдиницаИзмерения = ЦеныТаблицаСрезПоследних.Номенклатура.ЕдиницаХраненияОстатков ТОГДА ЦеныТаблицаСрезПоследних.Цена ИНАЧЕ ЦеныТаблицаСрезПоследних.Цена * (ЦеныТаблицаСрезПоследних.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент / ЦеныТаблицаСрезПоследних.ОсновнаяЕдиницаИзмерения.Коэффициент) КОНЕЦ КАК Цена, ЦеныТаблицаСрезПоследних.Валюта КАК Валюта ИЗ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&МоментВремени, ТипЦен = &ТипЦен) КАК ЦеныТаблицаСрезПоследних) КАК ЦеныСрезПоследних ПО ЦеныСрезПоследних.Номенклатура = ТоварыНаСкладах.Номенклатура И ЦеныСрезПоследних.ХарактеристикаНоменклатуры = ТоварыНаСкладах.ХарактеристикаНоменклатуры СГРУППИРОВАТЬ ПО ТоварыНаСкладах.Номенклатура, ТоварыНаСкладах.ХарактеристикаНоменклатуры, ЦеныСрезПоследних.Цена Нужно условие на свободный остаток >0 |
|||
1
Волшебник
19.10.04
✎
15:35
|
офигенный запрос....
|
|||
2
ZyXEL
19.10.04
✎
15:39
|
Да уж... офигенный... интересно наверное его еще и упростить мона..
|
|||
3
OFP
19.10.04
✎
15:41
|
Мне нужно заполнить табличную часть в документе "Установка цен" по свободному остатку и указать старые отпускные цены.
В запрос попадают товары с пустым остатком и я хочу отсечь эти записи. Формулу для свободного остатка взял из обработки по подбору номенклатуры |
|||
4
OFP
19.10.04
✎
15:43
|
Заодно и УПП упростить, там почти все запросы такие
|
|||
5
ValA
19.10.04
✎
15:46
|
а если попробовать выбросить вот это - СУММА(ВЫБОР КОГДА (ТоварыНаСкладах.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыНаСкладах.КоличествоОстаток КОНЕЦ. при левом соединении у тебя попадают все записи из регистра остатков и нулевые тоже, потому борись с этим
|
|||
6
OFP
19.10.04
✎
15:51
|
А если взять Итоги в конце запроса, то не появится ли других косяков?
|
|||
7
ValA
19.10.04
✎
15:54
|
у тебя в руках конфа , запрос, так что пробуй. я к сожалению в голове подобное провернуть не могу. и еще добрые люди советуют строить запросы сначала в консоли (или чем подобном) постепенно добавляя навороты и усложнения. здорово помогает
|
|||
8
OFP
19.10.04
✎
15:59
|
Да я так и делаю, мне просто непонятно куда и как поставить условие на пустые остатки
|
|||
9
ValA
19.10.04
✎
16:01
|
я ж тебе написал, пустые остатки попадают потому что в первом операторе ВЫБОР ты им разрешаешь присутствовать в результате запроса. ИЗБАВЬСЯ.
|
|||
10
OFP
19.10.04
✎
16:10
|
Написал так:
СУММА(ТоварыНаСкладах.КоличествоОстаток) КАК Остаток , Сумма(ТоварыВРезервеНаСкладах.КоличествоОстаток)как резерв, Сумма(ТоварыКПередачеСоСкладов.КоличествоОстаток)как Квыдаче, Сумма(ТоварыНаСкладах.КоличествоОстаток-ТоварыВРезервеНаСкладах.КоличествоОстаток-ТоварыКПередачеСоСкладов.КоличествоОстаток) как СвОстаток Поля Остаток, Резерв и К выдаче заполняются, а СвОстаток пусто |
|||
11
OFP
19.10.04
✎
16:16
|
Похоже из-за того, что один из операторов в выражении Сумма(А-В-С) имеет тип Null все выражение становится Null. Поэтому в 1С пишут "Выбор..." и заменяюь Null на 0. Начинаю врубаться.
|
|||
12
ValA
19.10.04
✎
16:18
|
точно не уверен, но это мысли : если "остаток"<>0 а "резерв", или "квыдаче" пустые (т.е NULL) тогда и "свостаток" может быть NULL. вывод - проверяй на null резерв и квыдаче
|
|||
13
ValA
19.10.04
✎
16:19
|
пока писал ты сам себе ответил
|
|||
14
OFP
19.10.04
✎
16:21
|
Приношу извинения за непонятливость, ноя я не понял, что нужно сделать чтобы избавиться от пустых записей, возникающих при левом соединении
|
|||
15
OFP
19.10.04
✎
16:23
|
То есть я попробовал так:
Сумма(ТоварыНаСкладах.КоличествоОстаток-ВЫБОР КОГДА (ТоварыВРезервеНаСкладах.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыВРезервеНаСкладах.КоличествоОстаток КОНЕЦ - ВЫБОР КОГДА (ТоварыКПередачеСоСкладов.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыКПередачеСоСкладов.КоличествоОстаток КОНЕЦ) как свостаток А пустые записи остались |
|||
16
ValA
19.10.04
✎
16:23
|
первое поле оставить так : СУММА(ТоварыНаСкладах.КоличествоОстаток) КАК Остаток
второе (резерв и т.д.) через ВЫБОР как в первоначальном варианте |
|||
17
OFP
19.10.04
✎
16:25
|
При попытке поставить условие:
где Свостаток>0 Выдается ошибка. То есть на функции условия ставить нельзя? |
|||
18
ValA
19.10.04
✎
16:38
|
при левом соединении в результат попадают все поля левой таблицы и совпадающие правой, поэтому попробуй поставить условие на виртуальную таблицу по регистру остатков РегистрНакопления.ТоварыНаСкладах.Остатки(&МоментВремени, Склад = &ВыбСклад И ТоварыНаСкладах.КоличествоОстаток>0)
даже самому интересно становится... |
|||
19
OFP
19.10.04
✎
16:40
|
Пока я понял следующее: в запросе нельзя отсечь пустые записи по вычисляемому выражению вида Сумма (А-Б-С). Я проверил, по отдельности А, Б и С не Null и если отбирать по ним по отдельности, то пустых нет. А меня очень интересует как раз вычисляемое выражение. Пока придумал выход при обходе результата запроса проверять на пустой остаток.
|
|||
20
ValA
19.10.04
✎
16:42
|
а если получить их по отдельности и потом вычитать?
наверноне пора звать волшебника, что-то он обходит стороной. |
|||
21
OFP
19.10.04
✎
16:44
|
То 18.
В том то все и дело, что в виртуальной таблице не может или недолжно быть записей с остатком 0, мне кажется что и условия такого не надо. (я попрововал твое предложение, не получается) |
|||
22
OFP
19.10.04
✎
16:45
|
То 20,
ну вот ты начинаешь понимать ситуацию :) |
|||
23
OFP
19.10.04
✎
16:48
|
Сейчас пришла мысль, а если написать еще один внешний по отношению к данному запрос, который будет вычислять эту долб.. сумму.
А вы говорили упростить :) |
|||
24
ValA
19.10.04
✎
17:00
|
а попробуй в ГДЕ вместо "При попытке поставить условие:
где Свостаток>0 Выдается ошибка." записать все выражение - (а-б-с)>0 |
|||
25
OFP
19.10.04
✎
17:05
|
где
(ТоварыНаСкладах.КоличествоОстаток -ВЫБОР КОГДА (ТоварыВРезервеНаСкладах.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыВРезервеНаСкладах.КоличествоОстаток КОНЕЦ - ВЫБОР КОГДА (ТоварыКПередачеСоСкладов.КоличествоОстаток) ЕСТЬ NULL ТОГДА 0 ИНАЧЕ ТоварыКПередачеСоСкладов.КоличествоОстаток КОНЕЦ) >0 У меня получилось. Огромное спасибо. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |