Имя: Пароль:
1C
1С v8
Запутался в ПОЛНОМ соединении
0 Shur1cIT
 
04.06.14
08:37
иметься первый запрос  помещается во временную таблицу (НаНачало)
Второй запрос тоже во временную (ЗаВесьПериод)
третьим запросом всё это соединяю, и выясняю что данные из таблицы (НаНачало) попадают в отчет только если  есть данные в таблице (ЗаВесьПериод), вопрос почему так? у меня же полное соединение ? как обойти сие?

ПОЛНОЕ СОЕДИНЕНИЕ ЗаВесьПериод КАК ЗаВесьПериод
        ПО НаНачало.Организация = ЗаВесьПериод.Организация
            И НаНачало.Контрагент = ЗаВесьПериод.Контрагент
            И НаНачало.ДоговорКонтрагента = ЗаВесьПериод.ДоговорКонтрагента
            И НаНачало.Сделка = ЗаВесьПериод.Сделка
            И НаНачало.ДокументРасчетовСКонтрагентом = ЗаВесьПериод.ДокументРасчетовСКонтрагентом
1 Fragster
 
гуру
04.06.14
08:38
сделай объединение - и быстрее и все данные попадут...
2 kosts
 
04.06.14
08:38
(0) Проверь, что бы в условие ГДЕ не было косяков (и лишнего)
3 jsmith82
 
04.06.14
08:39
на начало данные-то есть?
4 senior
 
04.06.14
08:44
а в select листе что выбираешь?
5 Shur1cIT
 
04.06.14
08:45
(3) "НаНачало" с избытком, но если нет данных "ЗаВесьПериод" то даные из "НаНачало" не выводяться
6 Drac0
 
04.06.14
08:46
Делай объединение.
7 senior
 
04.06.14
08:46
покажи полный запрос (последний)
8 senior
 
04.06.14
08:47
(6) зачем?
9 Shur1cIT
 
04.06.14
08:47
(6) придеться( неужели нельзя соединение настроить?
10 Shur1cIT
 
04.06.14
08:48
(7)
вот весь запрос
ВЫБРАТЬ
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Организация,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Контрагент,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка,
    СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход) КАК СуммаВзаиморасчетовПриход,
    СУММА(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовРасход) КАК СуммаВзаиморасчетовРасход,
    ВЫБОР
        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход > 0
            ТОГДА ВЫБОР
                    КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа <> 0
                            И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа <> NULL
                        ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа)
                    ИНАЧЕ ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)
                КОНЕЦ
        ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата
    КОНЕЦ КАК ПериодНеделя,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента
ПОМЕСТИТЬ ЗаВесьПериод
ИЗ
    РегистрНакопления.ВзаиморасчетыСКонтрагентамиПоДокументамРасчетов.Обороты(
            {(&НачалоБазы)},
            {(&КонецБазы)},
            Регистратор,
            ДоговорКонтрагента.ВестиПоДокументамРасчетовСКонтрагентом = ИСТИНА
                И ДоговорКонтрагента.ВедениеВзаиморасчетов = ЗНАЧЕНИЕ(Перечисление.ВедениеВзаиморасчетовПоДоговорам.ПоЗаказам)
                И ДоговорКонтрагента.ВидДоговора = ЗНАЧЕНИЕ(Перечисление.ВидыДоговоровКонтрагентов.СПокупателем)) КАК ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты

СГРУППИРОВАТЬ ПО
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Организация,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Контрагент,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДокументРасчетовСКонтрагентом,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка,
    ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента,
    ВЫБОР
        КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.СуммаВзаиморасчетовПриход > 0
            ТОГДА ВЫБОР
                    КОГДА ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа <> 0
                            И ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа <> NULL
                        ТОГДА ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Сделка.ОтсрочкаПлатежа)
                    ИНАЧЕ ДОБАВИТЬКДАТЕ(ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата, ДЕНЬ, ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.ДоговорКонтрагента.ДопустимоеЧислоДнейЗадолженности)
                КОНЕЦ
        ИНАЧЕ ВзаиморасчетыСКонтрагентамиПоДокументамРасчетовОбороты.Регистратор.Дата
    КОНЕЦ
;

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

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

СГРУППИРОВАТЬ ПО
    ЗаВесьПериод.Организация,
    ЗаВесьПериод.Контрагент,
    ЗаВесьПериод.ДокументРасчетовСКонтрагентом,
    ЗаВесьПериод.Сделка,
    ЗаВесьПериод.ДоговорКонтрагента,
    НЕДЕЛЯ(НАЧАЛОПЕРИОДА(ЗаВесьПериод.ПериодНеделя, НЕДЕЛЯ))

УПОРЯДОЧИТЬ ПО
    ПериодНеделя
11 kosts
 
04.06.14
08:48
(10) Это что?

ГДЕ

    ЗаВесьПериод.ПериодНеделя МЕЖДУ &НачПериод И &КонПериод
12 senior
 
04.06.14
08:50
(10) у тебя в select листе должно быть по каждому полю
ЕСТЬNULL(НаНачало.Колонка1, ЗаВесьПериод.Колонка1)
13 senior
 
04.06.14
08:52
(12) а также группировать по этим полям (которые с ЕСТЬNULL) и "где" накладывать тоже на них же
14 Shur1cIT
 
04.06.14
08:59
(12) А кажется понял, данных НаНачало.Колонка1 нет и условие соединения не срабатывает там NULL а там данные так?
15 Shur1cIT
 
04.06.14
09:01
ЗаВесьПериод.ПериодНеделя МЕЖДУ &НачПериод И &КонПериод

ПериодНеделя это вычисляемая дата в прошлом запросе , &НачПериод И &КонПериод накладываю фильтр
16 kosts
 
04.06.14
09:02
(14) Еще в (2) об этом намекнули...
17 senior
 
04.06.14
09:05
(14) соединение срабатывает, но когда в конкретной строке данные есть в "НаНачало", ты видишь NULL и твое "Где" применяет условие к NULL, т.к. ты выводишь и накладываешь условие только на колонки "ЗаВесьПериод"
18 Shur1cIT
 
04.06.14
09:18
(17) спасибо большое
19 kosts
 
04.06.14
09:30
Проще это условие перенести во второй запрос