Имя: Пароль:
1C
1С v8
Запрос с полным соединением
0 mihalich979
 
06.07.15
17:50
Вот делаю запрос

Выборка.Текст = "ВЫБРАТЬ
                        |    ХозрасчетныйОстаткиИОбороты.Период КАК Период,
                        |    ХозрасчетныйОстаткиИОбороты.Счет.КодБыстрогоВыбора,
                        |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК Кол2,
                        |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК Кол8,
                        |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Кол6,
                        |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Кол4,
                        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток КАК Кол3,
                        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток КАК Кол9,
                        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт КАК Кол7,
                        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт КАК Кол5,
                        |    ХозрасчетныйОстаткиИОбороты1.Период КАК Период1,
                        |    ХозрасчетныйОстаткиИОбороты1.Счет.КодБыстрогоВыбора КАК СчетКодБыстрогоВыбора1,
                        |    ХозрасчетныйОстаткиИОбороты1.СуммаНачальныйОстаток КАК Кол10,
                        |    ХозрасчетныйОстаткиИОбороты1.СуммаКонечныйОстаток КАК Кол13,
                        |    ХозрасчетныйОстаткиИОбороты1.СуммаОборотДт КАК Кол12,
                        |    ХозрасчетныйОстаткиИОбороты1.СуммаОборотКт КАК Кол11
                        |ИЗ
                        |    РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты1
                        |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты
                        |        ПО ХозрасчетныйОстаткиИОбороты1.Период = ХозрасчетныйОстаткиИОбороты.Период
                        |ГДЕ
                        |    ХозрасчетныйОстаткиИОбороты.Счет.КодБыстрогоВыбора = &Код1
                        |    И ХозрасчетныйОстаткиИОбороты.Период МЕЖДУ &НП И &КП
                        |    И ХозрасчетныйОстаткиИОбороты1.Счет.КодБыстрогоВыбора = &Код2
                        |    И ХозрасчетныйОстаткиИОбороты1.Период МЕЖДУ &НП И &КП
                        |
                        |УПОРЯДОЧИТЬ ПО
                        |    Период";


    Выборка.УстановитьПараметр("Код1", "6723");
    Выборка.УстановитьПараметр("Код2", "6603");
    Выборка.УстановитьПараметр("НП", НП);
    Выборка.УстановитьПараметр("КП", КП);
    Возврат Выборка.Выполнить().Выгрузить();

С итоге получаю объединенную таблицу, но некоторые даты отсутсутствуют.

понимаю что объединение по периоду
и если ХозрасчетныйОстаткиИОбороты.Период = Неопределено
или ХозрасчетныйОстаткиИОбороты1.Период = Неопределено

то эти строки пропадают.

но как сделать чтобы не пропадали не могу сообразить.
1 Господин ПЖ
 
06.07.15
17:53
ты соединением чего добиться хочешь? в ОстаткиИОбороты не выводятся даты когда движений не было
2 DTXqueque
 
06.07.15
17:54
Где отсутсвуют?

isNull(ХозрасчетныйОстаткиИОбороты.Период, ХозрасчетныйОстаткиИОбороты1.Период) КАК Период?
3 mihalich979
 
06.07.15
18:16
(1) Хочу полную таблицу.
если
были движения в этот день по счету 6603 и
были движения в этот день по счету 6723
то все гуд объединяется

если
были движения в этот день по счету 6603 и
не было движений в этот день по счету 6723
то строка пропадает

если
не было движений в этот день по счету 6603 и
были движения в этот день по счету 6723
то строка пропадает

вот в чем трабла
4 mihalich979
 
06.07.15
18:17
(2) не понял чего-то
5 Господин ПЖ
 
06.07.15
18:22
(3) это эффект от Декарта

РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты1
                        |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты

- если в одной из таблиц записей нет - выпиливается вся строка

соединяй их по "ИСТИНА"
6 DTXqueque
 
06.07.15
18:23
(3) С чего бы ей пропадать то? В одном из периодов будет дата, в другом NULL. Дальшу кури (2)
7 mihalich979
 
06.07.15
18:32
(6) так я формировал отдельно
сначала по одному счета
потом по другому

и в одном есть даты 19, 22, 23
в другом нет

при объединении дат 19, 22, 23 нет вообще
8 DTXqueque
 
06.07.15
18:39
(7) Ну эт тебе надо проверить прокладку между стулом и клавиатурой)
9 DTXqueque
 
06.07.15
18:41
Если не веришь, давай скрины временных таблиц и объединения)
10 mihalich979
 
06.07.15
18:56
(6) не курится что-то :(
11 DTXqueque
 
06.07.15
19:02
(10) У тебя косяк в (7). Не может такого быть, чтобы полное соединение удаляло что-нибудь
12 Одинесю
 
06.07.15
19:09
(7) У тебя соединение, а не объединение, может тебе надо ОБЪЕДИНИТЬ ВСЕ?
13 hhhh
 
06.07.15
20:08
(10) ну вот

|ГДЕ
                        |    ХозрасчетныйОстаткиИОбороты.Счет.КодБыстрогоВыбора = &Код1
    и
    |    И ХозрасчетныйОстаткиИОбороты1.Счет.КодБыстрогоВыбора = &Код2
                    

ты же сам поставил условие, чтобы жестко были и те и другие записи.

и сам же удивляешься.

то есть соединение правильно всё соединяет. А когда идет дальше, тут ты со своим ГДЕ.
14 mihalich979
 
07.07.15
13:39
Отбой
решил вопрос вложенным запросом.

"ВЫБРАТЬ
        |    ХозрасчетныйОстаткиИОбороты.Период КАК Период,
        |    ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК Кол2,
        |    ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК Кол4,
        |    ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК Кол6,
        |    ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК Кол8,
        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаНачальныйОстаток КАК Кол3,
        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотКт КАК Кол5,
        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаОборотДт КАК Кол7,
        |    ХозрасчетныйОстаткиИОбороты.ВалютнаяСуммаКонечныйОстаток КАК Кол9,
        |    ВложенныйЗапрос.СуммаНачальныйОстаток КАК Кол10,
        |    ВложенныйЗапрос.СуммаОборотКт КАК Кол11,
        |    ВложенныйЗапрос.СуммаОборотДт КАК Кол12,
        |    ВложенныйЗапрос.СуммаКонечныйОстаток КАК Кол13
        |ИЗ
        |    (ВЫБРАТЬ
        |        ХозрасчетныйОстаткиИОбороты.Период КАК Период,
        |        ХозрасчетныйОстаткиИОбороты.СуммаНачальныйОстаток КАК СуммаНачальныйОстаток,
        |        ХозрасчетныйОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт,
        |        ХозрасчетныйОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт,
        |        ХозрасчетныйОстаткиИОбороты.СуммаКонечныйОстаток КАК СуммаКонечныйОстаток
        |    ИЗ
        |        РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты
        |    ГДЕ
        |        ХозрасчетныйОстаткиИОбороты.Период МЕЖДУ &НП И &КП
        |        И ХозрасчетныйОстаткиИОбороты.Счет.КодБыстрогоВыбора = ""6603"") КАК ВложенныйЗапрос
        |        ПОЛНОЕ СОЕДИНЕНИЕ РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(, , День, , , , ) КАК ХозрасчетныйОстаткиИОбороты
        |        ПО ВложенныйЗапрос.Период = ХозрасчетныйОстаткиИОбороты.Период
        |ГДЕ
        |    ХозрасчетныйОстаткиИОбороты.Период МЕЖДУ &НП И &КП
        |    И ХозрасчетныйОстаткиИОбороты.Счет.КодБыстрогоВыбора = ""6723""
        |
        |УПОРЯДОЧИТЬ ПО
        |    Период";