Имя: Пароль:
1C
1С v8
Соединения в запросе
0 trialex3
 
13.12.22
17:53
Добрый день. Прошу прощения заранее за очень нубский вопрос, но почему после соединения регистра продаж с документом заказы покупателей получаются разные результаты, если используется левое соединение?
К примеру 2 запроса ниже дают разные результаты

1.

ВЫБРАТЬ
    СУММА(Продажи.Количество) КАК Количество
ИЗ
    РегистрНакопления.Продажи КАК Продажи
ГДЕ
    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
    И Продажи.Номенклатура.Родитель = &ГотоваяПродукция
    
2.
ВЫБРАТЬ
    СУММА(Продажи.Количество) КАК Количество
ИЗ
    РегистрНакопления.Продажи КАК Продажи
        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
        ПО Продажи.ЗаказПокупателя = ЗаказПокупателяТовары.Ссылка
            И Продажи.Номенклатура = ЗаказПокупателяТовары.Номенклатура
            И Продажи.ХарактеристикаНоменклатуры = ЗаказПокупателяТовары.ХарактеристикаНоменклатуры
ГДЕ
    Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон
    И Продажи.Номенклатура.Родитель = &ГотоваяПродукция
1 trialex3
 
13.12.22
17:55
Я всегда думал, что если левое соединение, то изначальная таблица НЕ меняется и к ней просто добавляются данные из правой. То есть не происходит дублирования строк. получается что если в заказах повторяется строка, то в финальном результате тоже будет задвоение?
2 trialex3
 
13.12.22
17:56
В таком случае вопрос - как избежать задвоения? сделать 2 виртуальных таблицы, где сгруппировать записи и потом уже соединить их?
3 trialex3
 
13.12.22
17:57
В конечном итоге нужно получить просто все записи из регистра но с дополнительной инфой из документа
4 hockeyist
 
13.12.22
18:03
(0) Соединение это когда к первой таблице ищутся ВСЕ возможные пары, в соответствии с условием соединения. Если условие не задать, тогда будет умножение таблиц
5 hockeyist
 
13.12.22
18:05
(3) Чему должна соответствовать эта информация?
6 trialex3
 
13.12.22
18:18
(5) Продажам. Мне нужны все продажи за период, но к этому запросу я хотел добавить инфу по товару. Скидку, например, или цену. Проблема в том, что после соединения общее количество из регистра увеличивается за счет дублирования строк.
7 trialex3
 
13.12.22
18:19
(5) А. Если вы про условие то документСсылка, номенклатура и характеристика
8 Said_We
 
13.12.22
18:35
(7) У вас несколько строк в соединяемой таблице отвечает условию. Поэтому и дубляжи. В (4) даны уже все ответы. Смотрите данные.
9 hockeyist
 
13.12.22
18:38
(6) Ну и... продолжайте. В том случае, когда будет дубль, надо взять... что?
10 trialex3
 
13.12.22
18:39
(9) По логике если это дубль то без разницы. Это же дубль, одинаковая инфа...
11 hockeyist
 
13.12.22
18:42
(10) Тогда МАКСИМУМ() или МИНИМУМ() на выбор
12 hockeyist
 
13.12.22
18:43
(10) Или РАЗЛИЧНЫЕ, как вариант
13 rudnitskij
 
13.12.22
21:51
(6) странная постановка задачи. Сумма выводится итоговая - а скидка и цена в каждом заказе могут быть разными.
Если нужна обязательно "информация по товару" - надо делать запрос к таблице, где товары содержатся и из них и брать информацию. А "скидка, цена" - это информация не по товару, а по заказу, можете вообще тут запросом к табчасти ТОВАРЫ обойтись
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший