|
Простой запрос с левым соединением | ☑ | ||
---|---|---|---|---|
0
BOFFKA
08.11.11
✎
16:37
|
Есть запрос
ВЫБРАТЬ Продажи.Номенклатура, Продажи.Количество ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО Продажи.Номенклатура = ПартииТоваровНаСкладах.Номенклатура ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.Регистратор = &Регистратор И ПартииТоваровНаСкладах.КодОперации = &КодОперации И Продажи.Период МЕЖДУ &Период И &кон И Продажи.Контрагент = &Контрагент Почему он выводит в два раза больше движений, чем есть в регистре продаж? |
|||
1
shuhard
08.11.11
✎
16:38
|
(0) сгруппируй
|
|||
2
Нуф-Нуф
08.11.11
✎
16:39
|
ужаснах. параметры виртуальных таблиц нам неизвестны?
|
|||
3
BOFFKA
08.11.11
✎
16:40
|
(2) а какая из этих таблиц виртуальная???
|
|||
4
Нуф-Нуф
08.11.11
✎
16:40
|
а не, беру слова обратно.
|
|||
5
BOFFKA
08.11.11
✎
16:41
|
(1) группировка не подойдёт. Это кусок запроса, дальше хуже, поэтому с группировкой не получится.
|
|||
6
BOFFKA
08.11.11
✎
16:41
|
Разве я не правильно понимаю, что левое соединение, это записи из одной таблицы плюс те поля которые есть во второй?
|
|||
7
DEVIce
08.11.11
✎
16:42
|
На количество селеклисте сумму применить и сгруппировать по номенклатуре.
|
|||
8
Не Печенкин
08.11.11
✎
16:42
|
(3) а Продажи регистратором ограничивать не надо?
|
|||
9
shuhard
08.11.11
✎
16:42
|
(6) вынеси в подзапрос и сгруппируй,
у тебя две записи в партиях на одну в продажах |
|||
10
Evpatiy
08.11.11
✎
16:42
|
(0) может быть каждой строке регистра "Продажи" соответствует несколько строк регистра "партии" по указанной связи?
|
|||
11
DEVIce
08.11.11
✎
16:43
|
(9). Зачем еще подзапрос? Сгруппировать можно и так.
|
|||
12
Evpatiy
08.11.11
✎
16:43
|
(9) При группировке у него сумма увеличится
|
|||
13
BOFFKA
08.11.11
✎
16:44
|
документ оформлен двумя строками. по регистрам прошёл тоже двумя. всё из одной партии
|
|||
14
DEVIce
08.11.11
✎
16:44
|
(12). Ну все правильно.
|
|||
15
Не Печенкин
08.11.11
✎
16:45
|
(13) ты ответишь на (8) ?
|
|||
16
DEVIce
08.11.11
✎
16:45
|
Вообще, как-бы принято в условии первыми пихать выражения по основной таблице. Это я так, поворчал. :)
|
|||
17
shuhard
08.11.11
✎
16:45
|
(13) тебе большими буквами группировка написать ?
|
|||
18
Михаил Козлов
08.11.11
✎
16:46
|
Группировать нужно до соединения, чтобы была 1 строка на номенклатуру.
|
|||
19
shuhard
08.11.11
✎
16:47
|
(18) угу
см. (9) |
|||
20
Evpatiy
08.11.11
✎
16:47
|
(14) Так у него суммы будут удвоены и утроены
|
|||
21
Evpatiy
08.11.11
✎
16:47
|
+(20) Не о том, видимо, подумал.
|
|||
22
BOFFKA
08.11.11
✎
16:48
|
Итак: есть номенклатура1, из одной партии, продано в реализации 8 штук (4+4),
при таком раскладе группировка ВЫБРАТЬ Продажи.Номенклатура, СУММА(Продажи.Количество) КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО Продажи.Номенклатура = ПартииТоваровНаСкладах.Номенклатура ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.Регистратор = &Регистратор И ПартииТоваровНаСкладах.КодОперации = &КодОперации И Продажи.Период МЕЖДУ &Период И &кон И Продажи.Контрагент = &Контрагент СГРУППИРОВАТЬ ПО Продажи.Номенклатура выдаёт 16 штук |
|||
23
DEVIce
08.11.11
✎
16:48
|
И таки да, выше совершенно справедливо заметили: надо связывать таблицы по регистратору. А то на один документ соберешь движения всех по номенклатуре.
|
|||
24
BOFFKA
08.11.11
✎
16:49
|
группировать вложенную Продажи ?
|
|||
25
DEVIce
08.11.11
✎
16:49
|
(22). Смотри (23).
|
|||
26
shuhard
08.11.11
✎
16:49
|
(22) все верно,
нет подзапроса - херовый результат неожиданно ? |
|||
27
DEVIce
08.11.11
✎
16:50
|
ВЫБРАТЬ
Продажи.Номенклатура, СУММА(Продажи.Количество) КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО Продажи.Номенклатура = ПартииТоваровНаСкладах.Номенклатура И Продажи.Регистратор = ПартииТоваровНаСкладах.Регистратор ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.Регистратор = &Регистратор И ПартииТоваровНаСкладах.КодОперации = &КодОперации И Продажи.Период МЕЖДУ &Период И &кон И Продажи.Контрагент = &Контрагент СГРУППИРОВАТЬ ПО Продажи.Номенклатура |
|||
28
DEVIce
08.11.11
✎
16:50
|
(26). У него нет связи по регистратору. Подзапрос тут нафиг не нужен.
|
|||
29
BOFFKA
08.11.11
✎
16:50
|
ВЫБРАТЬ
Продажи.Номенклатура, СУММА(Продажи.Количество) КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО Продажи.Номенклатура = ПартииТоваровНаСкладах.Номенклатура И Продажи.Регистратор = ПартииТоваровНаСкладах.Регистратор ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.Регистратор = &Регистратор И ПартииТоваровНаСкладах.КодОперации = &КодОперации И Продажи.Период МЕЖДУ &Период И &кон И Продажи.Контрагент = &Контрагент СГРУППИРОВАТЬ ПО Продажи.Номенклатура 16 |
|||
30
BOFFKA
08.11.11
✎
16:51
|
По регистратору тоже связывал. не помогает
|
|||
31
Не Печенкин
08.11.11
✎
16:51
|
(29) чукча не читатель?
|
|||
32
Evpatiy
08.11.11
✎
16:51
|
(29) Сунь партиТоваровНаСкладах в подзапрос и сгруппируй по номенклатуре
|
|||
33
Не Печенкин
08.11.11
✎
16:52
|
(30) покажи, наверняка строки с одинаковой номенклатурой
|
|||
34
shuhard
08.11.11
✎
16:52
|
(30) вроде до пятницы ещё дожить надо
|
|||
35
DEVIce
08.11.11
✎
16:53
|
(30). Ты блин вообще убери из ГДЕ ПартииТоваровНаСкладах.Регистратор и напиши Продажи.Регистратор. Ты запрос строишь корне неверно. У тебя таблицы местами перепутаны похоже. :)
|
|||
36
BOFFKA
08.11.11
✎
16:53
|
(33) это я в 22 написал. Да строки с одинаковой номенклатурой.
|
|||
37
DEVIce
08.11.11
✎
16:54
|
Кстати, обратите внимание, он данные берет только из Продажи, а соединяет партии, только чтобы наложить условия. Короче, запрос написан через *опу.
|
|||
38
shuhard
08.11.11
✎
16:54
|
(36) прикольно
ответ дан сразу группировка в подзапросе |
|||
39
DEVIce
08.11.11
✎
16:55
|
Накера ставить услоие на период, если выборка идет по регистратору? В индекс попасть что-ли хочет? И много всяких других косяков.
|
|||
40
BOFFKA
08.11.11
✎
16:55
|
И Продажи.Регистратор = &Регистратор
тоже 16 |
|||
41
DEVIce
08.11.11
✎
16:56
|
Автор. Напиши словами что хочешь получить.
|
|||
42
shuhard
08.11.11
✎
16:57
|
(40) автор ты читать умеешь ?
|
|||
43
Evpatiy
08.11.11
✎
16:57
|
(41) ОФФ: В лоб от архитектора :))
|
|||
44
BOFFKA
08.11.11
✎
16:58
|
(41) пишу отчет по Валовой.
Запрос для продаж такой ВЫБРАТЬ РАЗРЕШЕННЫЕ Продажи.Номенклатура КАК Номенклатура, Продажи.НДС КАК НДС, ПартииТоваровНаСкладах.ДокументОприходования КАК ДокументОприходования, Продажи.Подразделение КАК Подразделение, Продажи.Организация КАК Организация, Продажи.Контрагент КАК Контрагент, ПартииТоваровНаСкладах.Регистратор КАК Регистратор, ПартииТоваровНаСкладах.Количество КАК КоличествоПар, ПартииТоваровНаСкладах.Стоимость КАК СтоимостьПар, Продажи.Стоимость / Продажи.Количество * ЕСТЬNULL(ПартииТоваровНаСкладах.Количество, 0) КАК ПродажиСНДС, Продажи.Стоимость / Продажи.Количество * ПартииТоваровНаСкладах.Количество - Продажи.НДС / Продажи.Количество * ПартииТоваровНаСкладах.Количество КАК ПродажиБезНДС, Продажи.Стоимость / Продажи.Количество * ПартииТоваровНаСкладах.Количество - ПартииТоваровНаСкладах.Стоимость КАК ВаловаяПрибыль ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО Продажи.Номенклатура = ПартииТоваровНаСкладах.Номенклатура И Продажи.Регистратор = ПартииТоваровНаСкладах.Регистратор ГДЕ Продажи.Период МЕЖДУ &ДатаНач И &ДатаКон И Продажи.Количество > 0 И Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг И Продажи.Подразделение = &Подразделение И Продажи.Контрагент = &Контрагент И ПартииТоваровНаСкладах.КодОперации = &КодОперации И столкнулся с тем что в доках с одинаковой номенклатурой двоится инфа |
|||
45
DEVIce
08.11.11
✎
16:59
|
(44). Хыыыы. Не это конечно тоже словами написано, но имел в виду письменную речь, а не код. :)
|
|||
46
BOFFKA
08.11.11
✎
16:59
|
(45) я решил развернуто ответить)))
|
|||
47
DEVIce
08.11.11
✎
17:01
|
(46). С этим кодом понятно, ты чего хочешь чтобы он стал делать?
|
|||
48
BOFFKA
08.11.11
✎
17:03
|
мне нужно чтобы он мне дал две записи по 4 шт. Либо одну 8.
|
|||
49
BOFFKA
08.11.11
✎
17:04
|
Я не понимаю почему двоит. Такая группировка
ВЫБРАТЬ ПродажиТаб.Номенклатура, ПродажиТаб.Количество ИЗ (ВЫБРАТЬ Продажи.Номенклатура КАК Номенклатура, Продажи.Регистратор КАК Регистратор, СУММА(Продажи.Количество) КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор = &Регистратор СГРУППИРОВАТЬ ПО Продажи.Номенклатура, Продажи.Регистратор) КАК ПродажиТаб ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ПО ПродажиТаб.Регистратор = ПартииТоваровНаСкладах.Регистратор ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.КодОперации = &КодОперации Тоже 16 |
|||
50
shuhard
08.11.11
✎
17:06
|
(49) ни чё, что вложенный запрос должен идти по партиям ?
|
|||
51
BOFFKA
08.11.11
✎
17:13
|
ВЫБРАТЬ
Продажи.Номенклатура, Продажи.Количество, ПартииТаб.Количество КАК Количество1 ИЗ РегистрНакопления.Продажи КАК Продажи ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура, ПартииТоваровНаСкладах.Регистратор КАК Регистратор, СУММА(ПартииТоваровНаСкладах.Количество) КАК Количество ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ГДЕ ПартииТоваровНаСкладах.Номенклатура = &Номенклатура И ПартииТоваровНаСкладах.Период МЕЖДУ &Период И &кон И ПартииТоваровНаСкладах.КодОперации = &КодОперации СГРУППИРОВАТЬ ПО ПартииТоваровНаСкладах.Номенклатура, ПартииТоваровНаСкладах.Регистратор) КАК ПартииТаб ПО Продажи.Регистратор = ПартииТаб.Регистратор И Продажи.Регистратор = ПартииТаб.Регистратор ГДЕ Продажи.Регистратор = &Регистратор КОличество продажи правильное, но партии задвоены |
|||
52
shuhard
08.11.11
✎
17:16
|
(51) пациент безнадёжен
|
|||
53
BOFFKA
08.11.11
✎
17:24
|
(52) покажи как нужно. вдруг пациент прозреет
|
|||
54
DEVIce
08.11.11
✎
17:28
|
(48). Щас сделаю:
ВЫБРАТЬ ПЕРВЫЕ 1 "Номенклатура" КАК Номенклатура, 8 КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор = &Регистратор |
|||
55
DEVIce
08.11.11
✎
17:29
|
А не, вот так надо:
ВЫБРАТЬ ПЕРВЫЕ 1 &Номенклатура КАК Номенклатура, 8 КАК Количество ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор = &Регистратор |
|||
56
Buster007
08.11.11
✎
17:46
|
дык и по Период надо тоже связывать.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |