Имя: Пароль:
1C
1С v8
Вложенный запрос
0 tesei
 
31.10.13
13:17
Помогите пож-ста с запросом. Во вложенном запросе происходит объединение показателей, положительных и отрицательных сумм. В запросе верхнего уровня требуется убрать итоговую отрицательные сумму:

    |    ВЫБОР
    |        КОГДА ВложенныйЗапрос.СвободныйОстаток > 0
    |            ТОГДА ВложенныйЗапрос.СвободныйОстаток
    |        ИНАЧЕ 0


на деле же убираются отрицательные значения во _внутреннем_ запросе, и суммируются только положительные суммы!

Пример:

во внутр. запросе объединение:
4+1-3, должно быть 2, выходит 5
2+2-6, должно быть 0, выходит 4
1 Ненавижу 1С
 
гуру
31.10.13
13:20
убери это, добавь после группировки:

ИМЕЮЩИЕ СУММА(ВложенныйЗапрос.СвободныйОстаток)>0
2 Ёпрст
 
31.10.13
13:20
Может, не будешь ломаться как восьмиклассница и сразу текст запроса покажешь ?
3 tesei
 
31.10.13
13:22
(2) да всегда готов, но зачем уважаемым людям глаза ломать? :)
4 Рэйв
 
31.10.13
13:22
(3)Уважаемые люди - не все пока телепаты.
5 tesei
 
31.10.13
13:24
суммируемое поле - Потребность:
    "ВЫБРАТЬ
    |    NULL КАК Склад,
    |    ВложенныйЗапрос.Номенклатура КАК Номенклатура,
    |    ВложенныйЗапрос.НаСкладе КАК НаСкладе,
    |    ВложенныйЗапрос.Резерв КАК Резерв,
    |    ВложенныйЗапрос.СтрахЗапас КАК СтрахЗапас,
    |    ВЫБОР
    |        КОГДА ВложенныйЗапрос.СвободныйОстаток > 0
    |            ТОГДА ВложенныйЗапрос.СвободныйОстаток
    |        ИНАЧЕ 0
    |    КОНЕЦ КАК СвободныйОстаток,
    |    NULL КАК НаСкладе1,
    |    NULL КАК Резерв1,
    |    NULL КАК СтрахЗапас1,
    |    NULL КАК Потребность
    |ИЗ
    |    (ВЫБРАТЬ
    |        Товары.Склад КАК Склад,
    |        Товары.Номенклатура КАК Номенклатура,
    |        Товары.КоличествоОстаток КАК НаСкладе,
    |        Резерв.КоличествоОстаток КАК Резерв,
    |        СтраховыеЗапасы.Количество КАК СтрахЗапас,
    |        ЕСТЬNULL(Товары.КоличествоОстаток, 0) - ЕСТЬNULL(Резерв.КоличествоОстаток, 0) - ЕСТЬNULL(СтраховыеЗапасы.Количество, 0) КАК СвободныйОстаток
    |    ИЗ
    |        РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Склад = &Склад) КАК Товары
    |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки КАК Резерв
    |            ПО Товары.Номенклатура = Резерв.Номенклатура
    |            ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений._СтраховыеЗапасыНоменклатуры.СрезПоследних(&Дата, Склад = &Склад) КАК СтраховыеЗапасы
    |            ПО Товары.Номенклатура = СтраховыеЗапасы.Номенклатура) КАК ВложенныйЗапрос
    |
    |ОБЪЕДИНИТЬ ВСЕ
    |
    |ВЫБРАТЬ
    |    ВложенныйЗапрос1.Склад,
    |    ВложенныйЗапрос1.Номенклатура,
    |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,
    |    ВложенныйЗапрос1.НаСкладе1,
    |    ВложенныйЗапрос1.Резерв1,
    |    ВложенныйЗапрос1.СтрахЗапас1,
    |    ВложенныйЗапрос1.Потребность
    |ИЗ
    |    (ВЫБРАТЬ
    |        Товары2.Склад КАК Склад,
    |        Товары2.Номенклатура КАК Номенклатура,
    |        Товары2.КоличествоОстаток КАК НаСкладе1,
    |        NULL КАК СтрахЗапас1,
    |        NULL КАК Резерв1,
    |        -Товары2.КоличествоОстаток КАК Потребность
    |    ИЗ
    |        РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, НЕ Склад = &Склад) КАК Товары2
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        СтраховыеЗапасы2.Склад,
    |        СтраховыеЗапасы2.Номенклатура,
    |        NULL,
    |        СтраховыеЗапасы2.Количество,
    |        NULL,
    |        СтраховыеЗапасы2.Количество
    |    ИЗ
    |        РегистрСведений._СтраховыеЗапасыНоменклатуры.СрезПоследних(&Дата, НЕ Склад = &Склад) КАК СтраховыеЗапасы2
    |    
    |    ОБЪЕДИНИТЬ ВСЕ
    |    
    |    ВЫБРАТЬ
    |        Резервы2.Склад,
    |        Резервы2.Номенклатура,
    |        NULL,
    |        NULL,
    |        Резервы2.КоличествоОстаток,
    |        Резервы2.КоличествоОстаток
    |    ИЗ
    |        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&Дата, НЕ Склад = &Склад) КАК Резервы2) КАК ВложенныйЗапрос1
    |
    |УПОРЯДОЧИТЬ ПО
    |    Номенклатура,
    |    Склад
    |ИТОГИ
    |    СУММА(НаСкладе),
    |    СУММА(Резерв),
    |    СУММА(СтрахЗапас),
    |    СУММА(СвободныйОстаток),
    |    СУММА(НаСкладе1),
    |    СУММА(Резерв1),
    |    СУММА(СтрахЗапас1),
    |    СУММА(Потребность)
    |ПО
    |    Номенклатура,
    |    Склад";
6 Ненавижу 1С
 
гуру
31.10.13
13:28
(5) либо группируй и (1), либо

ИТОГИ
...
ВЫБОР КОГДА СУММА(СвободныйОстаток)>0 ТОГДА СУММА(СвободныйОстаток) ИНАЧЕ ) КОНЕЦ КАК СвободныйОстаток
7 Ёпрст
 
31.10.13
13:29
а где (1) ?
8 zak555
 
31.10.13
13:32
зачем объединять ?
9 Ёпрст
 
31.10.13
13:37
(5)
вот это:

   |    NULL,
    |    NULL,
    |    NULL,
    |    NULL,

замени на
   |    0,
    |    0,
    |    0,
    |    0,

в первую очередь
10 tesei
 
31.10.13
13:45
вставил:

    |ИМЕЮЩИЕ
    |    СУММА(ВложенныйЗапрос1.Потребность) > 0

перестал считаться остаток на складе, опять не то
11 tesei
 
31.10.13
13:46
(8) если не объединением - то как?
12 Sorm
 
31.10.13
13:54
(0) Все правильно. В объединении суммируются только положительные остатки, так как они выбираются во внутреннем запросе:)
13 Ненавижу 1С
 
гуру
31.10.13
13:54
(10) вот взял и просто вставил? покажи запрос
14 tesei
 
31.10.13
14:06
вроде заработало... проверяю
15 tesei
 
31.10.13
14:13
спасибо всем участникам! :)