Имя: Пароль:
1C
 
Null в запросе
,
0 Mikhail2014
 
26.11.15
16:44
Всем привет!

Делаю вот такой запрос в Ут (11.1.5.16).

ВЫБРАТЬ
    |            СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
    |            СвободныеОстаткиОстатки.Склад КАК Склад,
    |            СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    |            ВложенныйЗапрос.КоличествоОборот КАК КоличествоОборот,
    |            СвободныеОстаткиОстатки.ВНаличииОстаток - ВложенныйЗапрос.КоличествоОборот КАК ДоступноПоКвоте
    |        ИЗ
    |            РегистрНакопления.СвободныеОстатки.Остатки(&ДатаНачала, ) КАК СвободныеОстаткиОстатки
    |                ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |                    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    |                    ВыручкаИСебестоимостьПродажОбороты.Подразделение КАК Подразделение,
    |                    ВыручкаИСебестоимостьПродажОбороты.Склад КАК Склад,
    |                    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот
    |                ИЗ
    |                    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, , ) КАК ВыручкаИСебестоимостьПродажОбороты
    |                ГДЕ
    |                    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура
    |                    И ВыручкаИСебестоимостьПродажОбороты.Склад В(&Склады)) КАК ВложенныйЗапрос
    |                ПО СвободныеОстаткиОстатки.Склад = ВложенныйЗапрос.Склад
    |        ГДЕ
    |            СвободныеОстаткиОстатки.Номенклатура = &Номенклатура
    |            И СвободныеОстаткиОстатки.Склад В(&Склады)

Смысл - получить остатки товара на начало дня и вычесть колчество проданного за этот день.

Все рабоатет, но в поле СвободныеОстаткиОстатки.ВНаличииОстаток - ВложенныйЗапрос.КоличествоОборот КАК ДоступноПоКвоте всегда получается null, независимо от значений вычитаемого и уменьшаемого... В чем может быть дело?
1 Лефмихалыч
 
26.11.15
16:46
>Смысл - получить остатки товара на начало дня и вычесть колчество проданного за этот день.

какой смысл в этом смысле? Почему сразу не получить остатки на конец дня?
2 anatoly
 
26.11.15
16:46
1. КоличествоОборот возьми в ЕСТЬНУЛЛ
2. про параметры виртуальных таблиц не слышал?
3 su_mai
 
26.11.15
16:47
(0) Арифметические операции с Null всегда дают Null. Для борьбы с Null применяйте функцию ЕстьNull(<Запрос.Поле>, 0)
4 Mikhail2014
 
26.11.15
16:49
(1) У каждого подразделения есть лимит = остаток товара на начало дня - к-во уже проданного этим подразделением за этот день, больше они продать не могут. Такая задача.)
5 su_mai
 
26.11.15
16:49
(0) Соединение с вложенный запросом не благословляется. Вложенный запрос перенести в пакетный запрос (и во врем. таблицу), наложить все необходимые условия, а соединяться с данными временной таблицы.
6 Гёдза
 
26.11.15
16:58
(1) Расход  - это не только продажа. А на конечный остаток еще приход влияет и возврат
7 su_mai
 
26.11.15
17:01
+(5) Все условия из ГДЕ в параметры виртуальных таблиц
8 su_mai
 
26.11.15
17:02
ВЫБРАТЬ
    ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК АналитикаУчетаНоменклатурыНоменклатура,
    ВыручкаИСебестоимостьПродажОбороты.Подразделение КАК Подразделение,
    ВыручкаИСебестоимостьПродажОбороты.Склад КАК Склад,
    ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот КАК КоличествоОборот
ПОМЕСТИТЬ ДанныеОбороты
ИЗ
    РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(&ДатаНачала, &ДатаОкончания, , ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура = &Номенклатура
                И ВыручкаИСебестоимостьПродажОбороты.Склад В(&Склады)) КАК ВыручкаИСебестоимостьПродажОбороты
;
ВЫБРАТЬ
    СвободныеОстаткиОстатки.Номенклатура КАК Номенклатура,
    СвободныеОстаткиОстатки.Склад КАК Склад,
    СвободныеОстаткиОстатки.ВНаличииОстаток КАК ВНаличииОстаток,
    ДанныеОбороты.КоличествоОборот КАК КоличествоОборот,
    ЕстьNull(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕстьNull(ДанныеОбороты.КоличествоОборот, 0) КАК ДоступноПоКвоте
ИЗ
    РегистрНакопления.СвободныеОстатки.Остатки(&ДатаНачала, СвободныеОстаткиОстатки.Номенклатура = &Номенклатура
                И СвободныеОстаткиОстатки.Склад В(&Склады)) КАК СвободныеОстаткиОстатки
        ЛЕВОЕ СОЕДИНЕНИЕ ДанныеОбороты
        ПО СвободныеОстаткиОстатки.Склад = ДанныеОбороты.Склад
9 Mikhail2014
 
26.11.15
17:12
(8) Спасибо, сейчас буду пробовать)
10 su_mai
 
26.11.15
17:19
(9) Я не отлаживал, там имена полей в условиях вирт таб другие
11 Mikhail2014
 
26.11.15
17:32
(10) Да, с виртуальными таблицами все работает, спасибо :)
12 aleks_default
 
26.11.15
17:37
Неужели никто не заметил что соединение вложенного запроса со свободным остатком только по складу? В (0) полный бред.
13 Mikhail2014
 
26.11.15
17:57
(12) А как надо?
14 aleks_default
 
26.11.15
17:59
(13)Не поверишь, надо и по номенклатуре тоже
15 Mikhail2014
 
26.11.15
18:10
(14) Поробовал, так не работает, тоже всегда null в результате