Приветствую, Форумчане!
1с8.3.12, самопис, БСП, УФ

В запросе СКД из регистра накопления "ДвиженияТМЦ" берутся данные:

```1c
    ВЫБРАТЬ
    ДвижениеТМЦОстаткиИОбороты.Заказ,
    ДвижениеТМЦОстаткиИОбороты.Модель,
    ДвижениеТМЦОстаткиИОбороты.Размеры,
    ДвижениеТМЦОстаткиИОбороты.Полировка,
    **************************
    ИЗ
    РегистрНакопления.ДвижениеТМЦ.ОстаткиИОбороты(
```

Из-за косяков предшественников значения Заказ (документ), Модель, Размеры, Полировка (справочники) могут принимать разные значения: Ссылка, NULL, Неопределено, ""... Исправить документы бросающие в регистр данные пока не представляет возможным, тем более ссылки древних периодов...

Как можно в запросе СКД написать следующее типа:

1. Если ДвижениеТМЦОстаткиИОбороты.Заказ не является ссылкой на документ, тогда принимать значение Неопределено (или "", или Пустая ссылка)
2. Если ДвижениеТМЦОстаткиИОбороты.Размеры не является ссылкой на справочник, тогда принимать значение Неопределено (или "", или Пустая ссылка)?
---
```1c
    ВЫБОР КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ.Ссылка IS NULL ТОГДА Неопределено ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ КОНЕЦ
```
---
Исправить документы бросающие в регистр данные пока не представляет возможным,А что мешает привести "косяки" в регистре хотя бы к единому виду?
---
Не разрешают :-)
Давно руки чешутся, но у них линейка длинная... Ежики плакали, но продолжали есть кактус...
---
```1c
    ВЫБОР КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ.Ссылка IS NULL ТОГДА Неопределено ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ КОНЕЦ
```
---
А если значение уже "Неопределено"? Неопределено = IS NULL?
---
Заказ.Ссылка будет NULL
---
```1c
    ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(ДвижениеТМЦОстаткиИОбороты.Заказ) = ТИП(Документ.НужныйДокумент) // Перечислить через ИЛИ нужные типы
    ТОГДА ДвижениеТМЦОстаткиИОбороты.Заказ
    ИНАЧЕ
    Неопределенно
    КОНЕЦ
```
---
Справочники оказались составными, причем их много. Указанный пример сильно загрузит выполнение запроса если их перечислять через "Или"?
---
Указанный пример сильно загрузит выполнение запроса
Вы не передаете в запрос справочники а просто перечисляете типы.
Нагрузка практически не изменится.
---
+ Можно сделать список типов и передать в запрос параметром.
---
```1c
    ВЫБОР
    КОГДА ЕСТЬNULL(ДвижениеТМЦОстаткиИОбороты.Заказ, НЕОПРЕДЕЛЕНО) = НЕОПРЕДЕЛЕНО
    ТОГДА НЕОПРЕДЕЛЕНО
    ИНАЧЕ
    ДвижениеТМЦОстаткиИОбороты.Заказ
    КОНЕЦ
```
---
Чёрд!!! Всё вкусное... Что лучше то съесть? :-)

```1c
    КОГДА ЕСТЬNULL(ДвижениеТМЦОстаткиИОбороты.Заказ, НЕОПРЕДЕЛЕНО) = НЕОПРЕДЕЛЕНО

    ВЫБОР КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ.Ссылка IS NULL ТОГДА Неопределено ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ КОНЕЦ

    КОГДА ТИПЗНАЧЕНИЯ(ДвижениеТМЦОстаткиИОбороты.Заказ) = ТИП(Документ.НужныйДокумент)
```
---
А если:

```1c
    ДвижениеТМЦОстаткиИОбороты.Модель = Пустая ссылка?
```

Т.е. у меня эти значения в регистре могут принимать значения: Пустая ссылка, "", Неопределено, Null
---
```1c
    ВЫБОР
    КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ В (&МассивПустыхСсылок) ТОГДА НЕОПРЕДЕЛЕНО
    ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ
    КОНЕЦ
```

Где &МассивПустыхСсылок = массив который заполнен всеми пустыми ссылками составного типа, плюс пустая строка, неопределено и null
---
как у вас могут принимать значения Null? они образуются только при соединениях или если их специально записывают в регистр, но такого я за 5 лет не встречал
---
Победителем стал
---
ВЫБОР КОГДА ДвижениеТМЦОстаткиИОбороты.Заказ.Ссылка IS NULL ТОГДА Неопределено ИНАЧЕ ДвижениеТМЦОстаткиИОбороты.Заказ КОНЕЦ
---
Вот запрос на проверку остатков:

Функция ТекстЗапросаОстатков()

 Возврат
 "ВЫБРАТЬ
 | ДвижениеТМЦОстатки.Склад,
 | ДвижениеТМЦОстатки.Заказ,
 | ДвижениеТМЦОстатки.Модель,
 | ДвижениеТМЦОстатки.Размеры,
 | ДвижениеТМЦОстатки.Полировка,
 | ДвижениеТМЦОстатки.Номенклатура,
 | ДвижениеТМЦОстатки.КоличествоОстаток КАК Количество,
 | ДвижениеТМЦОстатки.СуммаОстаток КАК Сумма,
 | ДвижениеТМЦОстатки.Подразделение
 |ИЗ
 | РегистрНакопления.ДвижениеТМЦ.Остатки(
 | &ДатаОстатков, Склад В (&Склады)) КАК ДвижениеТМЦОстатки";

КонецФункции // ()

Если я применю в этом запросе то, что здесь ранее говорилось, то сработает?

Дело в том, что Ваши коды были применены для вывода отчета, из-за этих перекосов отчет выдавал задвоение строк. Теперь при выводе отчета строки схлопываются в одну.

Этот код проверяет останки. Если Ваши решения вставить в этот запрос, то коды сработают по итогам количества?