![]() |
|
Помогите понять условие связи 2х таблиц | ☑ | ||
---|---|---|---|---|
0
Sekuda
27.04.17
✎
16:17
|
Запрос большой в нем есть связь двух таблиц.
Первая таблица - периодический регистр сведений "АкцииСрезПоследних", вторая таблица - табличная часть документа Акция - "АкцияПолучатели". Эти таблицы связаны по регистратору левое соединение и ещё одно левое соединение с условием связи: (АкцияПолучатели.Контрагент = &Контрагент И АкцияПолучатели.Магазин = &Магазин ИЛИ АкцияПолучатели.Контрагент = &Контрагент И АкцияПолучатели.Магазин = ЗНАЧЕНИЕ(Справочник.Магазины.ПустаяСсылка) Не могу понять логику этой связи, на количество записей в выборке оно не влияет, но во всех записях поле АкцияПолучатели.Контрагент заменяется на значение &Контрагент. Помогите понять как работает это условие связи. |
|||
1
Лефмихалыч
27.04.17
✎
16:20
|
Это то же самое, что
контрагент=&контрагент и магазин в (&Магазин, ПустаяСсылка) ни чего ни где не заменяется. записи с каким-то другим контрагентом просто не попадают в выобрку |
|||
2
Sekuda
27.04.17
✎
16:24
|
(1) Я тоже так сперва подумал, но когда я из документа удаляю записи с другими контрагентами (провожу его), в выгрузке этого запроса количество записей тоже уменьшается
|
|||
3
vicof
27.04.17
✎
16:27
|
По связи нельзя судить о всем запросе, юный падаван.
|
|||
4
Лефмихалыч
27.04.17
✎
16:28
|
(2) а соединение у тебя какого типа?
|
|||
5
Sekuda
27.04.17
✎
16:34
|
(4) Левые соединения
|
|||
6
Serg_1960
27.04.17
✎
16:34
|
"Эти таблицы связаны по регистратору[!] левое соединение" --> "удаляю записи с другими контрагентами... количество записей тоже уменьшается"
|
|||
7
Лефмихалыч
27.04.17
✎
16:39
|
(5) короче, вопрос твой в чем? Если в том, что означает условие, то ответ в (1).
Если, почему у тебя количество записей меняется или не меняется, то ответ еще проще - ты где накосячил с измерениями. |
|||
8
Sekuda
27.04.17
✎
16:39
|
(6) Всё верно и это означает что условие "контрагент=&контрагент и магазин в (&Магазин, ПустаяСсылка)" не исключает записи с другими контрагентами, это как раз то чего я не могу понять.
|
|||
9
Лефмихалыч
27.04.17
✎
16:40
|
(7) измерения - не те, которые у регистров, а те, которые measurements. То ли удалил не то и не оттуда, то ли посмотрел потом не туда. Не может быть такого, короче. Либо ты что-то важное не сообщил.
|
|||
10
Лефмихалыч
27.04.17
✎
16:41
|
(8) исключает оно записи с другими контрагентами. Насовсем. Железно исключает.
|
|||
11
Sekuda
27.04.17
✎
16:42
|
<code>test<\code>
|
|||
12
Sekuda
27.04.17
✎
16:50
|
https://i.paste.pics/1MRHS.png
Обрезал запрос как мог. Если удаляю из документа контрагента РПСтрой, то в результате запросе - одна запись. Вопрос: почему? :) |
|||
13
h-sp
27.04.17
✎
16:54
|
(10) вообще-то количество записей не зависит от строчки АкцияПолучатели.Контрагент = &Контрагент
поэтому если он удаляет там в документе строчки с другими контрагентами, количество записей уменьшится естественно. То есть нигде он не накосячил, всё правильно работает. |
|||
14
Sekuda
27.04.17
✎
17:00
|
Методом проб, могу сделать вывод, что такая связь: к каждой записи левой таблица цепляет запись правой таблицы удовлетворяющей условию.
|
|||
15
h-sp
27.04.17
✎
17:03
|
(14) ну вот. В левой таблице у вас все контрагенты. Они всегда все.
|
|||
16
Buster007
27.04.17
✎
17:20
|
А почему по контрагенту не соединяем?
|
|||
17
Sekuda
27.04.17
✎
17:28
|
(16) Хороший вопрос. В данном, обрезанном, примере было бы достаточно соединить по контрагенту, но в полном запросе такой вариант не подходит.
|
|||
18
Serg_1960
27.04.17
✎
17:57
|
Потому что в ГДЕ исключается условие отбора по контрагенту, если в регистраторе установлена галочка "Для всех получателей".
|
|||
19
Лефмихалыч
27.04.17
✎
20:32
|
(12) Когда ты удаляешь одну строчку из документы, ты получаешь одну строчку в запросе потому, что ты удаляешь строчку из документа.
У тебя запрос после записи в БД, а строчки в документе = записи в регистре. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |