![]() |
![]() |
![]() |
|
Запутался в ПОЛНОМ соединении | ☑ | ||
---|---|---|---|---|
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
|
Проще это условие перенести во второй запрос
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |