Имя: Пароль:
1C
1С v8
Запрос к документам с полным соединением.
,
0 Ivanych
 
29.09.16
06:18
Подскажите новичку в 1С8. Где ошибка?
Запрос = Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ
        |    РеализацияТоваровУслуг.Ссылка КАК РеализацияТоваровУслуг,
        |    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента1,
        |    ПриходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента3,
        |    ПриходныйКассовыйОрдер.Ссылка КАК ПриходныйКассовыйОрдер
        |ИЗ
        |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
        |        ПО РеализацияТоваровУслуг.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование.Ссылка


Не выходит полное соединение
//  ИмяИзТаблицы1   ИмяИзТаблицы2  
//  Реализация1           Приходник1          
//  Реализация2           Приходник2          
//  Реализация3           NULL            
//  Реализация4           NULL            NULL
//  NULL            Приходник3           25
//  NULL            Приходник4           30
А выходит
//  ИмяИзТаблицы1   ИмяИзТаблицы2  
//  Реализация1           Приходник1          
//  Реализация2           Приходник2    
с NULL выходят.
1 Ivanych
 
29.09.16
06:20
Вернее с NULL не выходит
2 Feunoir
 
29.09.16
06:24
Это весь текст запроса?
3 Feunoir
 
29.09.16
06:24
Судя по отсутствию закрывающей кавычки - нет. Так вот проблема в отрезанном хвосте
4 Ivanych
 
29.09.16
06:26
Запрос = Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ
        |    РеализацияТоваровУслуг.Ссылка КАК РеализацияТоваровУслуг,
        |    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента1,
        |    ПриходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента3,
        |    ПриходныйКассовыйОрдер.Ссылка КАК ПриходныйКассовыйОрдер
        |ИЗ
        |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
        |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
        |        ПО РеализацияТоваровУслуг.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование.Ссылка
        |ГДЕ";
        Если ЗначениеЗаполнено(Склад) Тогда
            Запрос.Текст = Запрос.Текст + "
        |    РеализацияТоваровУслуг.Ссылка.Склад В ИЕРАРХИИ(&Склад) И";
        КонецЕсли;    
        Если ЗначениеЗаполнено(Касса) Тогда
            Запрос.Текст = Запрос.Текст + "
        |    ПриходныйКассовыйОрдер.Ссылка.Касса В ИЕРАРХИИ(&Касса) И";
        КонецЕсли;    
        Если ТолькоПроведенные = Истина Тогда
            Запрос.Текст = Запрос.Текст + "
        |    РеализацияТоваровУслуг.Ссылка.Проведен И
        |    ПриходныйКассовыйОрдер.Ссылка.Проведен И";
        КонецЕсли;    
        Запрос.Текст =Запрос. Текст + "
        |    РеализацияТоваровУслуг.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
        |   И Не РеализацияТоваровУслуг.Ссылка.ПометкаУдаления
        |    И ПриходныйКассовыйОрдер.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
        |   И Не ПриходныйКассовыйОрдер.Ссылка.ПометкаУдаления
        |";

Пробывал с
        //|ИТОГИ ПО
        //|    ОБЩИЕ,
        //|    РеализацияТоваровУслуг";
        //    |";
Пробывал с Группировками
5 Feunoir
 
29.09.16
06:30
Ну конечно.

При наложении условий в "ГДЕ" проверки проводятся после соединения. И так как NULL не попадает в условие, то эти строки фильтруются.

Либо во все условия включаешь "ИЛИ NULL", либо фильтруешь всё до (или во время) слияния.
6 Ivanych
 
29.09.16
06:32
(5) А примере можете показать?
7 Ivanych
 
29.09.16
06:33
(5) Спасибо буду пробывать
8 Feunoir
 
29.09.16
06:46
(6) Через вложенный запрос, например:


ВЫБРАТЬ
    РеализацияТоваровУслуг.Ссылка КАК РеализацияТоваровУслуг,
    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента1,
    ПриходныйКассовыйОрдер.Ссылка КАК ПриходныйКассовыйОрдер
ИЗ
    (ВЫБРАТЬ
        РеализацияТоваровУслуг.Ссылка КАК Ссылка,
        РеализацияТоваровУслуг.Дата КАК Дата,
        РеализацияТоваровУслуг.Склад КАК Склад,
        РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента
    ИЗ
        Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
    ГДЕ
        РеализацияТоваровУслуг.Ссылка.Склад В ИЕРАРХИИ(&Склад)
        И РеализацияТоваровУслуг.Ссылка.Проведен
        И РеализацияТоваровУслуг.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
        И НЕ РеализацияТоваровУслуг.Ссылка.ПометкаУдаления) КАК РеализацияТоваровУслуг
        ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
            ПриходныйКассовыйОрдер.Ссылка КАК Ссылка,
            ПриходныйКассовыйОрдер.Дата КАК Дата,
            ПриходныйКассовыйОрдер.СуммаДокумента КАК СуммаДокумента,
            ПриходныйКассовыйОрдер.ДокументОснование КАК ДокументОснование
        ИЗ
            Документ.ПриходныйКассовыйОрдер КАК ПриходныйКассовыйОрдер
        ГДЕ
            ПриходныйКассовыйОрдер.Ссылка.Проведен
            И ПриходныйКассовыйОрдер.Ссылка.Дата МЕЖДУ &Дата1 И &Дата2
            И НЕ ПриходныйКассовыйОрдер.Ссылка.ПометкаУдаления) КАК ПриходныйКассовыйОрдер
        ПО РеализацияТоваровУслуг.Ссылка = ПриходныйКассовыйОрдер.ДокументОснование


Вложенные запросы фильтруются по условиям, результат сливается. Для наглядности можно вложенные запросы вынести во временные таблицы
9 Одинесю
 
29.09.16
06:52
ПробЫвать не пиши лучше
10 Ivanych
 
29.09.16
07:12
(9) ok)
11 Одинесю
 
29.09.16
07:15
(10) Главное понять ;)
12 Ivanych
 
29.09.16
07:41
Спасибо всем. Получилось