Имя: Пароль:
1C
1С v8
Полное соединение в запросе не работает.
0 Koliaff
 
17.07.14
13:24
ВЫБРАТЬ
    ИтоговаяТаблица.Менеджер,
    ИтоговаяТаблица.Контрагент,
    СУММА(ИтоговаяТаблица.Количество) КАК Количество,
    СУММА(ИтоговаяТаблица.Стоимость) КАК Стоимость,
    ИтоговаяТаблица.Номенклатура
ИЗ
    (ВЫБРАТЬ
        ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя КАК Менеджер,
        ПродажиОбороты.Контрагент КАК Контрагент,
        СУММА(ПродажиОбороты.КоличествоОборот) КАК Количество,
        СУММА(ПродажиОбороты.СтоимостьОборот) КАК Стоимость,
        ПродажиОбороты.Номенклатура КАК Номенклатура
    ИЗ
        РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
    
    СГРУППИРОВАТЬ ПО
        ПродажиОбороты.Контрагент,
        ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя,
        ПродажиОбороты.Номенклатура
    
    ОБЪЕДИНИТЬ ВСЕ
    
    ВЫБРАТЬ
        Контрагенты.ОсновнойМенеджерПокупателя,
        Контрагенты.Ссылка,
        0,
        0,
        NULL
    ИЗ
        Справочник.Контрагенты КАК Контрагенты) КАК ИтоговаяТаблица

СГРУППИРОВАТЬ ПО
    ИтоговаяТаблица.Менеджер,
    ИтоговаяТаблица.Контрагент,
    ИтоговаяТаблица.Номенклатура
ИТОГИ ПО
    ОБЩИЕ

================================================
Доброго времени суток. Хочу вывести количество купленного товара контрагентами в разрезе менеджеров. Сделать это так, чтобы выводились все контрагенты, а не только те, которые покупали товар. В результате запроса я получаю таблицу, в которой нет контрагентов с пустым количеством и суммой. Что я не так делаю ?
1 Borteg
 
17.07.14
13:27
контрагенты левое соединение регистр продаж
2 f_vadim
 
17.07.14
13:27
Я ослеп? Я не вижу тут соединения.
3 anaed
 
17.07.14
13:27
(0) А где полное соединение?
4 Koliaff
 
17.07.14
13:31
Вернее не так задал вопрос. Когда фильтр по номенклатуре не ставишь - все выводится, если поставил, то выводятся контрагенты только те, по которым были продажи.
5 Fram
 
17.07.14
13:31
Соединение с объединением путать, конечно, нехорошо, но запрос должен работать.
6 Fram
 
17.07.14
13:31
(4)добавь в фильтр ИЛИ Номенклатура есть NULL
7 Koliaff
 
17.07.14
13:32
(Borteg) Делал и левым соединением контрагенты, все равно при фильтре по "Номенклатура" все контрагенты по которым не было продаж пропадают из отчета
8 mikecool
 
17.07.14
13:32
(4) надо же подумать, что номенклатура есть только в записях продаж
9 France
 
17.07.14
13:34
убойный запрос... объединять продажи и справочник контрагентов...
10 anaed
 
17.07.14
13:35
(7) запрос к справочнику контрагентов, который соединяется левым с выборкой по продажам, в которой накладывается фильтр по номенклатуре.

Только зачем такое извращение?
11 Koliaff
 
17.07.14
13:35
(Fram) добавь в фильтр ИЛИ Номенклатура есть NULL
Растолкуй глупому ....
12 France
 
17.07.14
13:38
левосоединяй контрагентов с регистром продаж...
13 Koliaff
 
17.07.14
13:39
(France) С самого начала было левое соединение - не помогает. Попробуй сам ...
14 f_vadim
 
17.07.14
13:41
(13) "Попробуй сам ..."
наха-а-ал :)
15 mikecool
 
17.07.14
13:41
(14) да че там, пусть пробует сам!
16 France
 
17.07.14
13:41
(13) ВЫБРАТЬ
    Контрагенты.ОсновнойМенеджерПокупателя,
    Контрагенты.Ссылка,
    ПродажиОбороты.Номенклатура,
    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
    СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот
ИЗ
    Справочник.Контрагенты КАК Контрагенты
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.Продажи.Обороты КАК ПродажиОбороты
        ПО Контрагенты.Ссылка = ПродажиОбороты.Контрагент

СГРУППИРОВАТЬ ПО
    Контрагенты.ОсновнойМенеджерПокупателя,
    Контрагенты.Ссылка,
    ПродажиОбороты.Номенклатура
17 catena
 
17.07.14
13:42
(7)А что должно выводиться у контрагентов, у которых не было продаж с установленным фильтром по номенклатуре? Физический смысл выборки какой?
18 France
 
17.07.14
13:43
(13) попробовал))
19 Fram
 
17.07.14
13:44
(11) а че непонятно? скопируй результат без фильтра в эксель и поставь там фильтр. может так станет понятно
20 hhhh
 
17.07.14
13:46
(13) если контрагенты у вас без продаж, то у них номенклатура равна NULL. Вот по-нормальному на бумажке выпишите значение NULL и значение вашего фильтра и сравните их. Проверьте попадает значение NULL в ваш фильтр.
21 France
 
17.07.14
13:49
да фильтры ему пока не помогут.. у него запрос вообще не в тему требований..
22 Koliaff
 
17.07.14
13:55
(France) Сейчас пробую опять левым соединением. У меня запрос чуть сложнее, чем в (0). Сейчас попробую отпишусь.
23 France
 
17.07.14
13:57
(22) уже боюсь, что докажешь неработоспособность моего творения00..
24 Fram
 
17.07.14
13:58
(16)(23) ну и чем результат твоего запроса будет отличаться от (0)
25 France
 
17.07.14
14:03
(24) ну, хотя бы тем, что не нужно условие на нул для номенклатуры ставить..
зы.. ну и, получается, привычностью для меня  левосоединения))
26 France
 
17.07.14
14:03
(24) блин...возвращаю запись)) практически ничем кроме того, что мне левосовединение оказалось удобнее))
27 Koliaff
 
17.07.14
14:04
ВЫБРАТЬ
    ИтоговаяТаблица.Менеджер,
    ИтоговаяТаблица.Контрагент,
    ИтоговаяТаблица.Номенклатура КАК Номенклатура,
    СУММА(ИтоговаяТаблица.КоличествоВыставка) КАК КоличествоВыставка,
    СУММА(ИтоговаяТаблица.КоличествоПродано) КАК КоличествоПродано,
    СУММА(ИтоговаяТаблица.СтоимостьВыставка) КАК СтоимостьВыставка,
    СУММА(ИтоговаяТаблица.СтоимостьПродано) КАК СтоимостьПродано
{ВЫБРАТЬ
    Менеджер.*,
    Контрагент.*,
    Номенклатура.*,
    КоличествоВыставка,
    КоличествоПродано,
    СтоимостьВыставка,
    СтоимостьПродано}
ИЗ
    (ВЫБРАТЬ
        ПродажиКонтрагентам.Номенклатура КАК Номенклатура,
        СУММА(ЕСТЬNULL(ПродажиКонтрагентам.КоличествоВыставка, 0)) КАК КоличествоВыставка,
        СУММА(ЕСТЬNULL(ПродажиКонтрагентам.КоличествоПродано, 0)) КАК КоличествоПродано,
        СУММА(ЕСТЬNULL(ПродажиКонтрагентам.СтоимостьВыставка, 0)) КАК СтоимостьВыставка,
        СУММА(ЕСТЬNULL(ПродажиКонтрагентам.СтоимостьПродано, 0)) КАК СтоимостьПродано,
        Контрагенты.Ссылка КАК Контрагент,
        Контрагенты.ОсновнойМенеджерПокупателя КАК Менеджер
    ИЗ
        Справочник.Контрагенты КАК Контрагенты
            ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                ВЫБОР
                    КОГДА Выставка.Контрагент ЕСТЬ NULL
                        ТОГДА НеВыстаска.Контрагент
                    ИНАЧЕ Выставка.Контрагент
                КОНЕЦ КАК Контрагент,
                ВЫБОР
                    КОГДА Выставка.КонтрагентОсновнойМенеджерПокупателя ЕСТЬ NULL
                        ТОГДА НеВыстаска.КонтрагентОсновнойМенеджерПокупателя
                    ИНАЧЕ Выставка.КонтрагентОсновнойМенеджерПокупателя
                КОНЕЦ КАК Менеджер,
                ВЫБОР
                    КОГДА Выставка.Номенклатура ЕСТЬ NULL
                        ТОГДА НеВыстаска.Номенклатура
                    ИНАЧЕ Выставка.Номенклатура
                КОНЕЦ КАК Номенклатура,
                СУММА(ВЫБОР
                        КОГДА Выставка.КоличествоОборот ЕСТЬ NULL
                            ТОГДА 0
                        ИНАЧЕ Выставка.КоличествоОборот
                    КОНЕЦ) КАК КоличествоВыставка,
                СУММА(ВЫБОР
                        КОГДА НеВыстаска.КоличествоОборот ЕСТЬ NULL
                            ТОГДА 0
                        ИНАЧЕ НеВыстаска.КоличествоОборот
                    КОНЕЦ) КАК КоличествоПродано,
                СУММА(ВЫБОР
                        КОГДА Выставка.СтоимостьОборот ЕСТЬ NULL
                            ТОГДА 0
                        ИНАЧЕ Выставка.СтоимостьОборот
                    КОНЕЦ) КАК СтоимостьВыставка,
                СУММА(ВЫБОР
                        КОГДА НеВыстаска.СтоимостьОборот ЕСТЬ NULL
                            ТОГДА 0
                        ИНАЧЕ НеВыстаска.СтоимостьОборот
                    КОНЕЦ) КАК СтоимостьПродано
            ИЗ
                (ВЫБРАТЬ
                    ПродажиОбороты.Номенклатура КАК Номенклатура,
                    СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
                    СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
                    ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя КАК КонтрагентОсновнойМенеджерПокупателя,
                    ПродажиОбороты.Контрагент КАК Контрагент
                ИЗ
                    РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , ДокументПродажи.Выставка) КАК ПродажиОбороты
                
                СГРУППИРОВАТЬ ПО
                    ПродажиОбороты.Номенклатура,
                    ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя,
                    ПродажиОбороты.Контрагент) КАК Выставка
                    ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                        ПродажиОбороты.Номенклатура КАК Номенклатура,
                        СУММА(ПродажиОбороты.КоличествоОборот) КАК КоличествоОборот,
                        СУММА(ПродажиОбороты.СтоимостьОборот) КАК СтоимостьОборот,
                        ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя КАК КонтрагентОсновнойМенеджерПокупателя,
                        ПродажиОбороты.Контрагент КАК Контрагент
                    ИЗ
                        РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, , НЕ ДокументПродажи.Выставка) КАК ПродажиОбороты
                    
                    СГРУППИРОВАТЬ ПО
                        ПродажиОбороты.Номенклатура,
                        ПродажиОбороты.Контрагент.ОсновнойМенеджерПокупателя,
                        ПродажиОбороты.Контрагент) КАК НеВыстаска
                    ПО Выставка.Номенклатура = НеВыстаска.Номенклатура
                        И Выставка.КонтрагентОсновнойМенеджерПокупателя = НеВыстаска.КонтрагентОсновнойМенеджерПокупателя
                        И Выставка.Контрагент = НеВыстаска.Контрагент
            
            СГРУППИРОВАТЬ ПО
                ВЫБОР
                    КОГДА Выставка.Контрагент ЕСТЬ NULL
                        ТОГДА НеВыстаска.Контрагент
                    ИНАЧЕ Выставка.Контрагент
                КОНЕЦ,
                ВЫБОР
                    КОГДА Выставка.Номенклатура ЕСТЬ NULL
                        ТОГДА НеВыстаска.Номенклатура
                    ИНАЧЕ Выставка.Номенклатура
                КОНЕЦ,
                ВЫБОР
                    КОГДА Выставка.КонтрагентОсновнойМенеджерПокупателя ЕСТЬ NULL
                        ТОГДА НеВыстаска.КонтрагентОсновнойМенеджерПокупателя
                    ИНАЧЕ Выставка.КонтрагентОсновнойМенеджерПокупателя
                КОНЕЦ) КАК ПродажиКонтрагентам
            ПО (ПродажиКонтрагентам.Контрагент = Контрагенты.Ссылка)
    
    СГРУППИРОВАТЬ ПО
        ПродажиКонтрагентам.Номенклатура,
        Контрагенты.Ссылка,
        Контрагенты.ОсновнойМенеджерПокупателя) КАК ИтоговаяТаблица
{ГДЕ
    ИтоговаяТаблица.Менеджер.*,
    ИтоговаяТаблица.Контрагент.*,
    ИтоговаяТаблица.Номенклатура.*,
    ИтоговаяТаблица.КоличествоВыставка,
    ИтоговаяТаблица.КоличествоПродано,
    ИтоговаяТаблица.СтоимостьВыставка,
    ИтоговаяТаблица.СтоимостьПродано}

СГРУППИРОВАТЬ ПО
    ИтоговаяТаблица.Номенклатура,
    ИтоговаяТаблица.Контрагент,
    ИтоговаяТаблица.Менеджер
ИТОГИ ПО
    ОБЩИЕ
{ИТОГИ ПО
    Менеджер.*,
    Контрагент.*,
    Номенклатура.*}
28 Koliaff
 
17.07.14
14:07
ВОт исходный мой запрос. Он не работает, когда выбирается фильтр по номенклатуре... Не выводит пустых контрагентов. Хотя без фильтра по номенклатуре пустые контрагенты (без продаж) есть. Так что жду ответа от (Fram) :
"добавь в фильтр ИЛИ Номенклатура есть NULL"

Растолкуй пожалуйста где это условие поставить ...
29 AlexITGround
 
17.07.14
14:11
(26) как это ничем не будет отличаться, что вы курите - оставьте попробовать
30 Fram
 
17.07.14
14:11
(28) Фильтр накладывается в построителе или СКД?.. Тогда мое предложение не катит.
Ты так и не понял почему не выводятся пустые?
31 France
 
17.07.14
14:15
(29) ну, давай, и тебя послушаем.. запрос в 0, и мой левосоединенный должен вернуть один и тот же результат..
32 Fram
 
17.07.14
14:15
(30)+ хотя почему не катит.. катит
33 anaed
 
17.07.14
14:16
Фильтруй номенклатуру через параметр в выборке по продажам, а не отбором по итоговой выборке.
34 Fram
 
17.07.14
14:17
(32)+ загнался совсем.. все таки в пользовательском режиме построителя и СКД не катит ))
35 France
 
17.07.14
14:19
(34) давай, тебе тоже пора определяться))..
36 AlexITGround
 
17.07.14
14:23
(31) читаем внимательно "ОБЪЕДИНИТЬ ВСЕ"
37 AlexITGround
 
17.07.14
14:24
+ 36 левым соединением избегаем дублей

кстати, я не заметил где ограничение по номенклатуре в запросе из 27
38 AlexITGround
 
17.07.14
14:26
(33) соглашусь с человеком, только вот в упор не вижу ограничения в запросе
39 France
 
17.07.14
14:27
(36) это ничего не меняет.. я тоже вначале читал "ОБЪЕДИНИТЬ ВСЕ"..  
первая часть запроса вернет всех, у кого были продажи.. вторая часть просто всех контрагентов. и, самый верхний уровень выборки свернет все аккуратненько. Сработает как левосоединение.. (37) без "Или НУЛЛ" и 27 не взлетит, если ставить  в Где..
40 catena
 
17.07.14
14:27
Как вариант (если уж так хочется при любом фильтре все равно видеть всех контрагентов без продаж) - отдельно собирать продажи с отборами построителя, отдельно собирать контрагентов без продаж, потом объединять и в результирующем объединении дать для построителя другой псевдоним Номенклатуре, чтоб не накладывал туда свой отбор.
41 AlexITGround
 
17.07.14
14:30
(39) как свернет аккуратненько, если в одной СправочникСсылка.Номенклатура, а во второй NULL?
42 Fram
 
17.07.14
15:17
(41) Это не помешает запросу сгруппировать по этому полю
43 Starik113
 
17.07.14
15:25
40 Прав
44 France
 
17.07.14
15:30
(41) будет лишняя пустая запись Контрагента с номенклатура нулл по контрагентам с ненулевыми продажами. остальные данные совпадут.. на итоговый суммовой результат это не повлияет.
45 AlexITGround
 
17.07.14
15:47
(42) естественно не помешает
(44) и уже результаты будут разные
46 Fram
 
17.07.14
15:48
(45) почему разные?
47 France
 
17.07.14
15:48
(45) данные по продажам будут одинаковые..
48 Fram
 
17.07.14
15:50
(47) да все будет одинаковое, исключая ИТОГИ
49 AlexITGround
 
17.07.14
15:54
сорри, ребят, конечно же :)
50 Fram
 
17.07.14
15:54
(48) Разве что, если в продажах есть пустой контрагент, то он в случае (16) не попадет в результат
51 AlexITGround
 
17.07.14
15:55
(50) какой контрагент?
52 AlexITGround
 
17.07.14
15:55
битая ссылка что ли...?
53 France
 
17.07.14
15:56
(48) я свои голословные заявления заранее проверил)) лишняя запись есть, но сейчас не очь хочется разбираться (52) зачем же только битая сслыка.. дорвался кто нибудь до корректировки записей регистра..
54 Fram
 
17.07.14
16:05
(53) откуда лишняя запись?
55 France
 
17.07.14
16:19
(54) допустим, что по контрагенту есть продажи. контрагент попал в итоговую выборку по регистру продаж, но при этом в объединении будет запись Контрагент с Номенклатурой НУЛЛ... онный и попадает.. Номенклатура и НУЛЛ не свернуться)
56 AlexITGround
 
17.07.14
16:28
(55) "Контрагент с Номенклатурой НУЛЛ"

т.е. как при объединении вдруг в обоих таблицах вырисуется NULL без к-л соединения?
не понял, поясни плиз мысль свою
57 France
 
17.07.14
16:33
(56)не в обоих.
в первой таблице будет "Контрагент\номенклатура\Кол-во" - это обороты регистра продаж
во второй  "Контрагент\НУЛЛ\0 - в любом случае.
результат группировки записей по Контрагент\Номенклатура - 2 записи..
58 AlexITGround
 
17.07.14
16:42
(57) именно об этом я и думал, когда вел разговор, но в обоих запросах и в (0) и в (16) результат будет один и тот же, в конце свернется все. Аль не так?
59 France
 
17.07.14
16:45
(58) не свернулись у меня... не стал разбирать, но кажись (57)
60 AlexITGround
 
17.07.14
16:55
(59) у меня разница получилась аж в 2к записей, ну что ж буду смотреть, ради интереса...неужели я в 49 зря сдался :)
отпишусь
61 France
 
17.07.14
16:56
(60) у тебя будут записи с пустым контрагентом, записи с группами контрагентов))
62 France
 
17.07.14
16:56
на группы глянь))
63 AlexITGround
 
17.07.14
16:59
(62) совершенно верно, необходимо добавлять условие на родителя
64 France
 
17.07.14
17:04
(63) после этого полностью совпали, или есть "лишьняя" запись??
65 France
 
17.07.14
17:05
лишьняя - блин, сол\фасол получилось..))
66 Fram
 
17.07.14
17:07
(55) понял уже.. посыпаю голову пеплом ))
67 Fram
 
17.07.14
17:09
(60) надо учится отстаивать свою точку зрения )) особенно, когда ты прав