Пишу внешнюю обработку и застрял на отборах (
Нужно чтобы при выборе склада выбирались заказы именно этого склада и если склад не выбран, то выводились все заказы.

Вот запрос

```1c
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ДокЗаказКлиента.Ссылка КАК Заказ,
    | ДокЗаказКлиента.НомерЗаказаНаСайте КАК Номер,
    | ДокЗаказКлиента.КонтактнаяИнформация,
    | ДокЗаказКлиента.Контрагент,
    | ДокЗаказКлиента.СуммаДокумента,
    | ДокЗаказКлиента.ТипОплатыЗаказа,
    | ДокЗаказКлиента.СтатусЗаказаHybris КАК СтатусЗаказа,
    | ДокЗаказКлиента.Организация
    |ИЗ
    | Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента КАК ДокЗаказКлиента
    | ПО ПоступлениеТоваровУслуг.ЗаказКлиента.Ссылка = ДокЗаказКлиента.Ссылка
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ВозвратТоваровПоставщику КАК ВозвратТоваровПоставщику
    | ПО ПоступлениеТоваровУслуг.Ссылка = ВозвратТоваровПоставщику.ДокументПоступления.Ссылка
    |ГДЕ
    | ДокЗаказКлиента.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ) И КОНЕЦПЕРИОДА(&Дата, ДЕНЬ)
    | И ДокЗаказКлиента.Проведен = ИСТИНА
    | И ДокЗаказКлиента.ПометкаУдаления = ЛОЖЬ
    | И ДокЗаказКлиента.НомерЗаказаНаСайте <> ""
    | И ДокЗаказКлиента.СтатусЗаказа <> ЗНАЧЕНИЕ(Перечисление._СтатусыЗаказов.Принят)
    | И ДокЗаказКлиента.СтатусЗаказа <> ЗНАЧЕНИЕ(Перечисление._СтатусыЗаказов.ОтправленНаСборку)
    | И ДокЗаказКлиента.СтатусЗаказа <> ЗНАЧЕНИЕ(Перечисление._СтатусыЗаказов.Выполнен)
    | И ВозвратТоваровПоставщику.Ссылка ЕСТЬ NULL
    | И ДокЗаказКлиента.Склад = &Склад";

    Запрос.УстановитьПараметр("Дата", ДатаРейса);
    Запрос.УстановитьПараметр("Склад", ?(ЗначениеЗаполнено(СкладОтгрузки),СкладОтгрузки,Справочники.Склады.ПустаяСсылка()));
```
---
```1c
    | И ВЫБОР
    | КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) ТОГДА ИСТИНА
    | ИНАЧЕ ДокЗаказКлиента.Склад = &Склад
    | КОНЕЦ
```
---
```1c
    | И ВЫБОР
    | КОГДА &Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка) ТОГДА ИСТИНА
    | ИНАЧЕ ДокЗаказКлиента.Склад = &Склад
    | КОНЕЦ
```
---
```1c
    | И (&Склад = Значение(Справочник.Склады.ПустаяСсылка) ИЛИ ДокЗаказКлиента.Склад = &Склад)";
```
---
```1c
    | И &УсловиеСклад";

    Запрос.УстановитьПараметр("Дата", ДатаРейса);

    Если ЗначениеЗаполнено(СкладОтгрузки) Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "&УсловиеСклад", "ДокЗаказКлиента.Склад = &Склад");
    Запрос.УстановитьПараметр("Склад", СкладОтгрузки);
    Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "И &УсловиеСклад", ");
    КонецЕсли;
```
 Еще проверка на ПометкаУдаления избыточна, так как есть проверка на Проведен.
---
Немного поправлю (как в типовых):

```1c
    | УСЛОВИЕСКЛАД";

    Запрос.УстановитьПараметр("Дата", ДатаРейса);

    Если ЗначениеЗаполнено(СкладОтгрузки) Тогда
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "УСЛОВИЕСКЛАД", "И ДокЗаказКлиента.Склад = &Склад");
    Запрос.УстановитьПараметр("Склад", СкладОтгрузки);
    Иначе
    Запрос.Текст = СтрЗаменить(Запрос.Текст, "УСЛОВИЕСКЛАД", ");
    КонецЕсли;
```
---
Немного поправлю (как в типовых):

| УСЛОВИЕСКЛАД";
Как раз в типовых наиболее частое применение это как указано в (3)
Ваш же пример самый не используемый, так как не читаемый (трудно в большом тексте запроса сразу найти) и не позволяет такой текст запроса открыть в конфигураторе.
Еще может использоваться служебное подстановочное слово обрамленное "%" или "#", но не так часто это применяется, но хотя бы быстро находимо в тексте.

Попробуйте в глобальном поиске конфигуратора найти:
СтрЗаменить(Запрос.Текст, "
---
там же вроде когда первый раз открываешь - не склад.пустаяссылка, а просто ничего нет, это не тип склад, это никакой не тип.
надо делать проверку на пустое значение
да?
---
Спасибо огромное все кто ответил, очень помогло!