Имя: Пароль:
1C
1С v8
функция ЕСТЬNULL при соединении нескольких таблиц
0 s-n-a-y
 
03.04.14
09:13
есть запрос

ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
    ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток * -1 КАК СуммаВзаиморасчетовОстаток
ПОМЕСТИТЬ Вт_Остаток
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(&Дата1, ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)) КАК ВзаиморасчетыСКонтрагентамиОстатки
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиОстатки.Контрагент,
    ВзаиморасчетыСКонтрагентамиОстатки.СуммаВзаиморасчетовОстаток * -1 КАК СуммаВзаиморасчетовОстаток
ПОМЕСТИТЬ Вт_Остаток_Нач_года
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентами.Остатки(НАЧАЛОПЕРИОДА(&Дата1, ГОД), ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)) КАК ВзаиморасчетыСКонтрагентамиОстатки
;

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

УПОРЯДОЧИТЬ ПО
    Контрагент,
    ВзаиморасчетыСКонтрагентамиОбороты.Регистратор
ИТОГИ
    Контрагент КАК Контрагент,
    СУММА(СуммаВзаиморасчетовПриход),
    СУММА(СуммаВзаиморасчетовРасход),
    МАКСИМУМ(СуммаВзаиморасчетовОстаток)
ПО
    Контрагент
АВТОУПОРЯДОЧИВАНИЕ

Объясните, пожалуйста, почему в поледней колонке результирующей таблицы (Вт_Остаток_Нач_года.СуммаВзаиморасчетовОстаток) чередуются NULL и 0, хотя вроде бы все должны быть 0?
1 Wobland
 
03.04.14
09:15
а ты уже перестал пить коньяк по утрам?
//не чередуются они
2 s-n-a-y
 
03.04.14
09:17
у меня в консоли запросов в поледней колонке чередуются NULL и 0
3 Wobland
 
03.04.14
09:17
(2) не убедил. скрин давай
4 Wobland
 
03.04.14
09:17
сторно. этоги не приметил
5 s-n-a-y
 
03.04.14
09:20
(3), скрин дать не могу значения в консоли отображаются только по двойному щелчку в диалоговом окне
6 s-n-a-y
 
03.04.14
09:21
(4), как на результат влияют итоги ?
7 s-n-a-y
 
03.04.14
09:23
нужно применить естьnull к итогам тоже?
8 Wobland
 
03.04.14
09:23
(6) они делают дерево. а когда непонятно, что делать с полем, появляется магический нулл
9 ИС-2
 
naïve
03.04.14
09:26
я смущает:
ИТОГИ
    Контрагент КАК Контрагент,
    СУММА(СуммаВзаиморасчетовПриход),
    СУММА(СуммаВзаиморасчетовРасход),
    МАКСИМУМ(СуммаВзаиморасчетовОстаток)
ПО
    Контрагент

думаю должно быть

ИТОГИ
    СУММА(СуммаВзаиморасчетовПриход),
    СУММА(СуммаВзаиморасчетовРасход),
    МАКСИМУМ(СуммаВзаиморасчетовОстаток)
ПО
    Контрагент
10 saaken
 
03.04.14
09:27
(0) полное соединение ни о чем не говорит?
11 s-n-a-y
 
03.04.14
09:27
(8), я правильно понимаю что итоги добавляют строки в результат. И в этих строках у меня NULL?
12 s-n-a-y
 
03.04.14
09:28
(9), не помогло
13 Ёпрст
 
03.04.14
09:28
(0) выкини полное соединение везде, делай через union all... наслаждайся
14 Wobland
 
03.04.14
09:29
(11) Предложение ИТОГИ ... ПО позволяет определить, расчет каких итогов необходим в запросе. При расчете итогов вычисляются значения агрегатных функций по выборкам с одинаковыми значениями полей – контрольных точек. Итоги добавляются в результат запроса как итоговые строки.
15 s-n-a-y
 
03.04.14
09:29
(10), ко всем числовым полям в результирующей таблице применил естьnull
16 saaken
 
03.04.14
09:34
(15) а если все таки убрать одну галочку?
17 s-n-a-y
 
03.04.14
09:36
(16), делал так (левое соединение)

РегистрНакопления.ВзаиморасчетыСКонтрагентами.Обороты(&Дата1, &Дата2, Авто, ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПоставщиком)) КАК ВзаиморасчетыСКонтрагентамиОбороты
        ПОЛНОЕ СОЕДИНЕНИЕ Вт_Остаток КАК Вт_Остаток
        ПО ВзаиморасчетыСКонтрагентамиОбороты.Контрагент = Вт_Остаток.Контрагент
        ЛЕВОЕ СОЕДИНЕНИЕ Вт_Остаток_Нач_года КАК Вт_Остаток_Нач_года
        ПО ВзаиморасчетыСКонтрагентамиОбороты.Контрагент = Вт_Остаток_Нач_года.Контрагент

тоже не помогло
18 Wobland
 
03.04.14
09:38
да заставь консоль показать тебе дерево, может, так дойдёт
19 s-n-a-y
 
03.04.14
09:38
у меня Null появляется в тех строчках таблицы, в которых вычисляются итоги. Причем в предпоследней колонке везде 0, а в последней чередуются null и 0.
20 s-n-a-y
 
03.04.14
09:40
(18), см. (17)
21 s-n-a-y
 
03.04.14
09:40
(18), перепутал см. (19)
22 Wobland
 
03.04.14
09:41
(21) что там?
23 Wobland
 
03.04.14
09:42
как считать итоги по крайнему полю? запрос знает?
24 s-n-a-y
 
03.04.14
09:43
(23), понял.
25 Wobland
 
03.04.14
09:44
не за что
26 m-serg74
 
03.04.14
09:45
(24) а что вообще ОстаткиОбороты не взять таблицу?
27 m-serg74
 
03.04.14
09:45
+(26) или как в (13)