Имя: Пароль:
1C
1С v8
условие в запросе
,
0 potapovi4
 
29.10.15
12:15
Добрый день подскажите как вывести в запрос только те где наличие = 0 что то типа так

ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоТоваров,
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
    ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК Наличие,
ИЗ
Справочник.Номенклатура.Изменения КАК Номенклатура  
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК ШтрихКоды  
  ПО Номенклатура.Ссылка = ШтрихКоды.Владелец
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
ПО Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
И  ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ШтрихКоды.ХарактеристикаНоменклатуры  

ГДЕ
Наличие  = 0

Запрос отлично работает но емогу правильно сделать конструкцию ГДЕ.Ругается на поле Наличие
1 ДенисЧ
 
29.10.15
12:15
и правильно ругается.
Ибо в ГДЕ такого поля ещё нет
2 potapovi4
 
29.10.15
12:17
(1)
подскажите как правильно написать
3 ДенисЧ
 
29.10.15
12:18
(2)
где
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
    ТОГДА 1
ИНАЧЕ 0
КОНЕЦ = 0
//и почитай умные книги по запросам
4 Мимохожий Однако
 
29.10.15
12:19
Сделай левое соединение с остатками на неравенство
5 potapovi4
 
29.10.15
12:19
(3)сорри я думал что конец это конец выбора и назначение имени поля
6 potapovi4
 
29.10.15
12:20
(3)Операция не разрешена в предложении "ВЫБРАТЬ"
КОНЕЦ <<?>>= 0,
7 ДенисЧ
 
29.10.15
12:21
значит, ты где-то что-то пропустил
8 Sammo
 
29.10.15
12:23
Рекомендую таки для начала пользоваться конструктором - намного упростит составление запроса и избавит от подобных ошибок
9 potapovi4
 
29.10.15
12:24
(7)вроде ничего
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК КоличествоТоваров,
ВЫБОР
КОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
    ТОГДА 1
ИНАЧЕ 0
КОНЕЦ =0,

ИЗ
Справочник.Номенклатура.Изменения КАК Номенклатура  

ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.Штрихкоды КАК ШтрихКоды  
  ПО Номенклатура.Ссылка = ШтрихКоды.Владелец
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки() КАК ТоварыНаСкладахОстатки
ПО Номенклатура.Ссылка = ТоварыНаСкладахОстатки.Номенклатура
И  ТоварыНаСкладахОстатки.ХарактеристикаНоменклатуры = ШтрихКоды.ХарактеристикаНоменклатуры
10 potapovi4
 
29.10.15
12:25
(4)можно пример?
11 potapovi4
 
29.10.15
12:43
если в ГДЕ добавить ТоварыНаСкладахОстатки.КоличествоОстаток = 0 То в запрос вообще ничего не попадает
12 bvb
 
29.10.15
12:49
Лучше через ВТ

В ВТ отобрать срез остатков на дату

и отобрать номенклатуру по условию НЕНАЛИЧИЯ в ВТ

Это правильнее и наглядней
13 Sammo
 
29.10.15
12:49
(11) Потому что если добавить это условие, то работать будет как внутреннее соединение.
Я бы вообще сделал так
1. Соединяем Номенклатуру со штрихкодами - чтобы в запросе иметь возможность выбирать штрихкода.
2. Соединяем номенклатуру с остатками. Левым. В условия добавляем По ТоварыНаСкладахОстатки.КоличествоОстаток <> 0
Этим мы получили соединение с ненулевыми остатками. Т.е. если такая строка есть, нам оно не надо.
Поэтому добавляем условие ТоварыНаСкладахОстатки.КоличествоОстаток Есть NULL. Т.е. отбираем только те строки, где нет нормального количества.
Как то так.
14 Sammo
 
29.10.15
12:51
Кстати, вариант 12 нагляднее и там можно будет задать условие Имеющие Количество <> 0. Тогда получим только ненулевые остатки.
15 anatoly
 
29.10.15
12:54
в (3) и (8) правильные советы.

(6) он там сам "КАК Поле1" забыл вставить ))
16 hhhh
 
29.10.15
12:57
(11) то что написано в (3) это напиши в ГДЕ
17 Sammo
 
29.10.15
13:14
И добавлю, а если остаток на складе меньше нуля? Ну вот так получилось, пересорт, например. Или пропили?
18 bvb
 
29.10.15
14:11
(17) Интересно как это минусовой остаток получится при пересорте. Просвети.
19 itlikbez
 
29.10.15
14:28
(0)
ГДЕ ТоварыНаСкладахОстатки.КоличествоОстаток ЕСТЬ NULLL
20 hhhh
 
29.10.15
14:35
(19) не то
21 User_Agronom
 
29.10.15
14:47
Поправлю (3)
Где
ВЫБОР
    КОГДА ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) > 0
        ТОГДА Ложь
        ИНАЧЕ Истина
    КОНЕЦ