Имя: Пароль:
1C
1C 7.7
v7: Прямой запрос, нулевые остатки
0 Eeakie
 
21.05.14
15:34
Добрый день.
Как получить нулевые остатки по регистру через ВТ остатков?
Делаю так:
1 Eeakie
 
21.05.14
15:36
Упс.
+(0)

|select
    |    Товары.id as [Товар $Справочник.Товары],
    |from
    |    $Справочник.Товары as Товары with (nolock)
    |    left join
    |        $РегистрОстатки.ОстаткиТоваровОбщ(,, Фирма = :Фирма and Склад = :Склад, Товар, ОстатокТовара) as ОТО on ОТО.Товар = Товары.id
    |where
    |    ОТО.ОстатокТовараОстаток = 0";

Ничего не даёт. На ОТО.ОстатокТовараОстаток > 0 регирует нормально. В чём причина?
2 Mikeware
 
21.05.14
15:36
джойнить со справочником.
3 Wobland
 
21.05.14
15:37
(1) во вхере. оно убивает отсутствующее
4 Mikeware
 
21.05.14
15:38
where isnull(ОТО.ОстатокТовараОстаток,0) = 0";
5 Eeakie
 
21.05.14
15:41
(2) Не нравится мне (пока что, видимо) джойнить внутри ;)
(3) Понял.
(4) Жесть... но взлетело. Спасибо.
6 Mikeware
 
21.05.14
15:46
(5) 1. внутри не надо. и бестолку....
3. почему жесть? все логично. можешь заменить на  
where is null(ОТО.ОстатокТовараОстаток)
7 Eeakie
 
21.05.14
15:50
(6) Только сейчас понял насколько это удобно.
8 Ёпрст
 
гуру
21.05.14
15:50
ну или на coalesce(ОТО.ОстатокТовараОстаток,0)=0
9 Eeakie
 
21.05.14
15:54
По наглядности больше нравится просто "<значение> is null".
10 Eeakie
 
21.05.14
15:56
(9) Оу. Так не отрабатывает.
11 Eeakie
 
21.05.14
16:07
(8) coalisce, кстати, тоже отличная штука.
12 Eeakie
 
21.05.14
16:10
(6), (8) а как проверить на пустоту, если значение строковое?
13 trad
 
21.05.14
16:12
(12) точно также - is null
14 Eeakie
 
21.05.14
16:15
(13) ошибку даёт:
Ошибка преобразования значения varchar "ВК-75-01
15 Eeakie
 
21.05.14
16:16
+(13) "ВК-75-01" это как раз значение, которое надо было проверить на пустоту.
16 Ёпрст
 
гуру
21.05.14
16:20
(14) дык isnull(твоёполе,'')=''
17 trad
 
21.05.14
16:21
(14) что то я сомневаюсь, что это связано с проверкой на null

запрос покажи
18 Eeakie
 
21.05.14
16:22
(16) isnull($Товары.ПараметрЗагрузкиЦены, 0) = 0

Параметр - строка, 200 символов
19 Eeakie
 
21.05.14
16:23
(17)
    |select
    |    Товары.id as [Товар $Справочник.Товары],
    |    $Товары.ИнтенсивностьДвижения as ИД,
    |    $Товары.Продажа0 as П0,
    |    ОТО.ОстатокТовараОстаток as Остаток,
    |    $Прайс.МинЦена as ЦенаМ,
    |    $Прайс.Цена as ЦенаО,
    |    $Прайс.Расч_руб as ЦенаР
    |from
    |    $Справочник.Товары as Товары with (nolock)
    |    inner join
    |        $Справочник.Прайс_лист as Прайс with (nolock) ON $Прайс.Товар = Товары.id
    |    left join
    |        $РегистрОстатки.ОстаткиТоваровОбщ(,, Фирма = :Фирма and Склад = :Склад, Товар, ОстатокТовара) as ОТО on ОТО.Товар = Товары.id
    |where
    |    ($Товары.ИнтенсивностьДвижения = 0 or $Товары.ИнтенсивностьДвижения = 3) and
    |    ($Товары.Продажа0 = 1) and
    |    isnull($Товары.ПараметрЗагрузкиЦены, 0) = 0 and
    |    ($Прайс.ОсновнаяПозиция = 1) and
    |    ($Прайс.МинЦена > 0 or $Прайс.Цена > 0 or $Прайс.Расч_руб > 0) and
    |    isnull(ОТО.ОстатокТовараОстаток, 0) = 0
    |order by
    |    Товары.descr";
20 Ёпрст
 
гуру
21.05.14
16:24
ПараметрЗагрузкиЦены - Это строка ?
Какого ж х..ра ты её с числом сравниваешь ?
21 Eeakie
 
21.05.14
16:26
(20) а вот и ответ. А с чем сравнить? Я понимаю что надо сравнивать с "". Вопрос в том, как это сделать правильнее.
22 Ёпрст
 
гуру
21.05.14
16:26
(21) см (16)
23 Ёпрст
 
гуру
21.05.14
16:27
Только, достаточно так
$Товары.ПараметрЗагрузкиЦены = ''
24 Ёпрст
 
гуру
21.05.14
16:27
там null и так не будет, никогда
25 Eeakie
 
21.05.14
16:28
(23) Тьфу. Всё, работает. Благодарю.
26 trad
 
21.05.14
16:29
тут $Товары.ПараметрЗагрузкиЦены нула быть не может
изнулить не имеет смысла
27 Eeakie
 
21.05.14
17:25
Спасибо.
28 Eeakie
 
23.05.14
15:16
А если в условие забить сравнение двух остатков, типа А > Б?
Как в условие воткнуть чтобы не сравнивалась "пустота" с цифрой? Если А = 0 и Б = 1, то условие не срабатывает, т. к. А это не 0.
29 Eeakie
 
23.05.14
15:18
Как-то непонятно. Даже самому ;)

А - остаток1;
Б - остаток2;

по условию Б должно быть больше А;
в результат выборки не попадают такие варианты, когда А = 0 и Б = 1. Что изменить в условии?
30 Ёпрст
 
гуру
23.05.14
15:20
(29)

isnull(остатокА,0)<isnull(остатокБ,0)
31 Eeakie
 
23.05.14
15:20
(30) у меня еще как-то через case получилось :)
32 ДенисЧ
 
23.05.14
15:21
(31) Если в слове case изменить 4 буквы, то получится то место, через которое ты сделал...
33 Eeakie
 
23.05.14
15:23
(32) Хлеб = Пиво мне как-то больше нравилось...
34 Eeakie
 
23.05.14
15:23
(30) isnull(<условие>, 0) возвращает или 0 или значение больше 0? Я думал только как проверка на ноль.
35 Eeakie
 
23.05.14
15:24
+(34) всмысле, не значение больше нуля, а значение, которое проверяем.
36 ДенисЧ
 
23.05.14
15:24
(34) там не условие, а значение.
Может, ты книжку всё-таки прочтёшь?
37 Ёпрст
 
гуру
23.05.14
15:29
38 Eeakie
 
27.05.14
14:56
|where
    |    ((Выборка.Кол1 + Выборка.Кол2 + Выборка.Кол3) <> Выборка.Кол4)

Выборка.КолN - остатки.
Почему, *****, такое то условие не катит? В результат попадают строки, типа: 0 12 0 12. Что не так делаю?
39 Eeakie
 
27.05.14
14:57
|select
    |    Выборка.Товар as [Товар $Справочник.Товары],
    |    sum(Выборка.Кол1) as Заказано,
    |    sum(Выборка.Кол2) as ВРаботе,
    |    sum(Выборка.Кол3) as ОкЗаказ,
    |    sum(Выборка.Кол4) as Ожидание
    |from(
    |    select ЗаявкиПоставщику.Товар
    |        , ЗаявкиПоставщику.РезервТовараОстаток as Кол1
    |        , 0 as Кол2
    |        , 0 as Кол3
    |        , 0 as Кол4
    |    from $РегистрОстатки.ЗаявкиПоставщику(,, Фирма = :Фирма, Товар, РезервТовара) as ЗаявкиПоставщику
    |    
    |    union all
    |    
    |    select ПодготовкаЗаявок.Товар
    |        , 0 as Кол1
    |        , ПодготовкаЗаявок.КоличествоОстаток as Кол2
    |        , 0 as Кол3
    |        , 0 as Кол4
    |    from $РегистрОстатки.ПодготовкаЗаявок(,, Фирма = :Фирма, Товар, Количество) as ПодготовкаЗаявок
    |
    |    union all
    |
    |    select ТоварВЗаказе.Товар
    |        , 0 as Кол1
    |        , 0 as Кол2
    |        , ТоварВЗаказе.КоличествоОстаток as Кол3
    |        , 0 as Кол4
    |    from $РегистрОстатки.ТоварВЗаказе(,, Фирма = :Фирма, Товар, Количество) as ТоварВЗаказе
    |
    |    union all
    |
    |    select Ожидания.Товар
    |        , 0 as Кол1
    |        , 0 as Кол2
    |        , 0 as Кол3
    |        , Ожидания.КоличествоОстаток as Кол4
    |    from $РегистрОстатки.Ожидания(,, Фирма = :Фирма, Товар, Количество) as Ожидания
    |    )as Выборка
    |where
    |    ((Выборка.Кол1 + Выборка.Кол2 + Выборка.Кол3) <> Выборка.Кол4)
    |group by
    |    Выборка.Товар";
40 Mikeware
 
27.05.14
14:58
"шо, опять?"©
41 Mikeware
 
27.05.14
14:58
(39) откой для себя having
42 Eeakie
 
27.05.14
14:58
(40) Не смешно. Думал что опять хрень с возвращением "пустого" значения, а не нуля. Попробовал через isnull() - нифига.
43 Eeakie
 
27.05.14
14:58
(41) Оу...
44 Eeakie
 
27.05.14
15:00
млять...
45 Eeakie
 
27.05.14
15:01
Что ж я такой деревянный. Не в первый раз ведь уже. Спасибо.
46 Mikeware
 
27.05.14
15:05
(45) ну, значит ты всего наполовину деревянный. но сверху.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн