Имя: Пароль:
1C
 
Очень нужна помощь при составлении запроса по остаткам
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

У меня получилось. Огромное спасибо.
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан