Имя: Пароль:
1C
1С v8
Соединение по условию
0 skyadmin
 
02.06.16
08:14
Сделал такой простенький запрос, смысл которого в том, что если выбран контрагент, то выводилась только та номенклатура, которая есть у контрагента.

ВЫБРАТЬ
    СправочникНоменклатура.Ссылка КАК Номенклатура
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
    ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураПоставщика.СрезПоследних(, {Контрагент В ИЕРАХИИ(&Контрагент)}) КАК НоменклатураПоставщика
        ПО НоменклатураПоставщика.Номенклатура = СправочникНоменклатура.Ссылка

Вопрос в том , как сделать в запросе или СКД так, чтобы правого соединения небыло вообще, если контрагент не выбран, чтобы воводилась вся номенклатура, а не только та что есть у контрагентов? При таком запросе не выводиться номенклатура, если она не зарегистрирована хотябы у одного контрагента...
1 Рэйв
 
02.06.16
08:26
тебе вообще не нужно соединение.
Сделай запрос на срез последних к регистру как у тебя написано, там уже будет номенклатура
2 Enterprise
 
02.06.16
08:28
(1) Но не вся
3 Рэйв
 
02.06.16
08:29
(2)Как раз та, которая принадлежит контрагентам в фильтре
4 Рэйв
 
02.06.16
08:30
(0)А чтобы вся выводлась тогда тебе нужно левое соединение а не правое
5 skyadmin
 
02.06.16
08:35
Надо что то вроде такого результата

Если Контрагент.Выбран() ТОГДА
  ПРАВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураПоставщика.СрезПоследних(, {Контрагент В ИЕРАХИИ(&Контрагент)}) КАК НоменклатураПоставщика
        ПО НоменклатураПоставщика.Номенклатура = СправочникНоменклатура.Ссылка
КонецЕсли

Если сделать левое соединение, тогда будет выводиться и та, что не нужна..
Ладно спасибо, поэксперементирую еще..
6 Enterprise
 
02.06.16
08:37
(5) Ну добавь еще в конце условие, которое отберет нужные строки
7 Enterprise
 
02.06.16
08:42
- ВЫБРАТЬ
-    СправочникНоменклатура.Ссылка КАК Номенклатура,
-    НоменклатураПоставщика.Номенклатура КАК НоменклатураПоставщика
- ИЗ
-    Справочник.Номенклатура КАК СправочникНоменклатура
-    ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураПоставщика.СрезПоследних(, {Контрагент В ИЕРАХИИ(&Контрагент)}) КАК НоменклатураПоставщика
-        ПО НоменклатураПоставщика.Номенклатура = СправочникНоменклатура.Ссылка
- ГДЕ ВЫБОР КОГДА &ПустойКонтрагент
-          ТОГДА ИСТИНА
-     ИНАЧЕ НЕ НоменклатураПоставщика.Номенклатура ЕСТЬ NULL
-     КОНЕЦ

Ну это если грубо)
8 skyadmin
 
02.06.16
08:58
Спасибо))
9 skyadmin
 
02.06.16
14:21
Довольно странно, но на СКД заработало все как нужно в таком запросе.
В группировках только номенклатура и характеристика, а контрагент в отборе.

ВЫБРАТЬ РАЗЛИЧНЫЕ
    СправочникНоменклатура.Ссылка КАК Номенклатура,
    ХарактеристикиНоменклатуры.Ссылка КАК ХарактеристикаНоменклатуры,
    НоменклатураПоставщика.Контрагент
ИЗ
    Справочник.Номенклатура КАК СправочникНоменклатура
        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
        ПО (ХарактеристикиНоменклатуры.Владелец = СправочникНоменклатура.Ссылка)
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.НоменклатураПоставщика.СрезПоследних(, ) КАК НоменклатураПоставщика
        ПО (НоменклатураПоставщика.Номенклатура = СправочникНоменклатура.Ссылка)
ГДЕ
    СправочникНоменклатура.ЭтоГруппа = ЛОЖЬ
    И СправочникНоменклатура.ПометкаУдаления = ЛОЖЬ
    И ВЫБОР
            КОГДА ХарактеристикиНоменклатуры.ПометкаУдаления ЕСТЬ NULL
                ТОГДА ИСТИНА
            ИНАЧЕ ХарактеристикиНоменклатуры.ПометкаУдаления = ЛОЖЬ
        КОНЕЦ
10 skyadmin
 
02.06.16
15:15
Похоже, что при наличии отбора скд меняет соединение на внутреннее.