Здравствуйте. Помогите пожалуйста с запросом.

Есть регистр сведений Сток (измерения: Номенклатура, Клиент. ресурсы: Количество, Цена). Хочу получить данные по нач. остатку и продажам некоторых товаров для конкретного контрагента. Сделал запрос:

```1c
    ВЫБРАТЬ
    СтокСрезПервых.Номенкл,
    СтокСрезПервых.Цена,
    СтокСрезПервых.Количество КАК КолНач,
    РеализацияТМЦ.Количество КАК Продано

    ИЗ
    РегистрСведений.Сток.СрезПервых(&ДатаНач, Клиент = &Клиент) КАК СтокСрезПервых

    ЛЕВОЕ СОЕДИНЕНИЕ
    Документ.РеализацияТМЦ.Основная КАК РеализацияТМЦ
    ПО
    СтокСрезПервых.Номенкл = РеализацияТМЦ.Аналитика1
    ГДЕ
    РеализацияТМЦ.Ссылка.Контрагент = &Клиент

    Запрос.УстановитьПараметр("Клиент", "Справочник.Ссылка.Контрагенты") // например "ООО Альфа"
```

При таких условиях результат запроса выходит пустой, а вот если убрать последнее условие (РеализацияТМЦ.Ссылка.Контрагент = &Клиент) тогда результат выводит данные. В регистре на заданную дату есть товары и в документах РеализацияТМЦ тоже есть эти товары, но нет продаж именно "ООО Альфа"

Объясните, пожалуйста, почему результат пустой? Ведь Левое Соединение "показывает все записи из левой таблицы (в данном случае СтокСрезПервых) и записи из правой удовлетворяющие условию связи" т.е. в правой таблице нет ничего т.к. нет товаров проданых "ООО Альфа", но в левой же есть!
---
wmonref1, не совсем понятен смысл задумки - похоже на какой-то костыль. Ответ тут сложно сформулировать, т.к. если вы правую таблицу присоединяете, то получаете всю левую и часть правой, которая прошла по условию связи. Но Вы потом через условие ГДЕ, прописанное для второй таблицы, удаляете и те записи, которые были в первой, и для которых во второй ничего не нашлось. Решением, обычно, является перенесение условия из фильтра в связь. Но мне до сих пор не понятно, что должно происходить.
---
wmonref1, вот это:
```1c
    ГДЕ
    РеализацияТМЦ.Ссылка.Контрагент = &Клиент
```

делает соединение внутренним. Переносите условие в соединение таблиц.
---
spacecraft, Как именно, не подскажете?

```1c
    ПО
    СтокСрезПервых.Номенкл = РеализацияТМЦ.Аналитика1
    И СтокСрезПервых.Клиент = РеализацияТМЦ.Ссылка.Контрагент
```

Так?
---
wmonref1, а если будет три реализации с полем Аналитика1, равным одной номенклатуре из регистра Сток, то которого контрагента будете брать?
---
starik-2005,

РегистрСведений.Сток.СрезПервых(&ДатаНач, Клиент = &Клиент) КАК СтокСрезПервых

Запрос будет делаться только для этого контрагента который здесь (&Клиент)
---
wmonref1, не совсем понятен смысл задумки - похоже на какой-то костыль. Ответ тут сложно сформулировать, т.к. если вы правую таблицу присоединяете, то получаете всю левую и часть правой, которая прошла по условию связи. Но Вы потом через условие ГДЕ, прописанное для второй таблицы, удаляете и те записи, которые были в первой, и для которых во второй ничего не нашлось. Решением, обычно, является перенесение условия из фильтра в связь. Но мне до сих пор не понятно, что должно происходить.
---
starik-2005, Теперь я понял что условие ГДЕ удаляет и записи в первой таблице...

```1c
    ПО
    СтокСрезПервых.Номенкл = РеализацияТМЦ.Аналитика1
    И СтокСрезПервых.Клиент = РеализацияТМЦ.Ссылка.Контрагент
```

Это решение правильное?
---
wmonref1, Вы мне скажите.
---
starik-2005, :)

судя по результатам запроса (и по моей скромной логике) - да.
---
wmonref1, условие ГДЕ ничего не удаляет. Это вообще не правильный термин применительно к запросу.
При левом соединении условие ГДЕ накладываемое на правую таблицу делает соединение внутренним. Просто будут выбираться данные из таблиц, которые есть в обоих таблицах, подходящих под условие.
На счет правильности, это вам решать. Данные получаются нужные? Тогда правильно.
---
spacecraft, вот есть же умные люди, однако - ничего у них не удаляет фильтр. Походу, и я уже тезаурусом не владею в достаточной степени и это называется теперь по-другому, или иные какие причины поспособствовали Вам в терминологии ошибиться...
---
starik-2005, я не сомневаюсь в Вашей компетенции. Но в какой момент и в каком месте запрос в 1С что-то в состоянии удалить? Он только читает/выбирает данные. Физически ничего и ни где не может удалить/очистить (удаление временной таблицы не в счет, там другой принцип).
---
spacecraft, все дело в словах и в понимании этих слов. Есть, допустим, таблица со следующими строками: "123,212,333,444". Запрос "sel ect * fr om t where fld like '%3%'" получит в результат таблицу t и удалит из него (из результата) строки, которые не проходят по фильтру. Можно и другими словами сказать: запрос выберет только те строки, которые соответствуют фильтру. Это аналогичные, собственно, утверждения. Только в одних случаях мы "удаляем" (т.е. скрываем) часть результата, который не проходит фильтр; а во втором случае мы говорим, что в результат попадают только строки, которые соответствуют фильтру. Лично я имел ввиду именно процессы, которые происходят в СУБД. Сначала СУБД собирает общую таблицу по левому соединению, потом удаляет из нее все то, что не попало в результирующий фильтр. MS SQL и PjstgreSQL в момент анализа запроса уже могут отсечь информацию, не проходящую результирующий фильтр (ГДЕ), но в ряде случаев (с временными таблицами, например, или с виртуальными таблицами результатов подзапросов) происходит фильтрация уже полученной избыточной выборки, из которой "удаляются" данные. Или тупо создается еще одна таблица результата, в которую копируются данные из предварительной избыточной выборки с учетом результирующего фильтра.
---
starik-2005, Или тупо создается еще одна таблица результата, в которую копируются данные из предварительной избыточной выборки с учетом результирующего фильтра
Вот верное утверждение. Ничего не удаляется, а создается таблица с нужными данными. Все остальное это Ваше измышление. Ничего более.
---
spacecraft, ну как хотите )))

Всегда уважал людей, которые думают по шаблону. С ними часто проще иметь дело - высокая предсказуемость.
---
starik-2005, я сразу сказал, что не сомневаюсь в Вашей компетенции. И понял, что имели ввиду. Но объясняя это другим, кто только пытается разобраться... могут понять буквально и соответственно не верно.
---
spacecraft, а у меня задача тут - развивать людей. Обычно развития больше там, где кто-то что-то недопонял или понял неверно. А если все и сразу понятно, то через пару часов возникнет новый вопрос, и пошло-поехало по-новой )))

ЗЫ: Кстати, знаете, с какими глаголами "не" пишется слитно?
---
Спасибо всем! Тема закрыта.