Запросы / Типы в запросе

//У составного поля набор реквизитов
//зависит от того, что в нём лежит, и
//обратиться к реквизиту напрямую нельзя.
//Сначала ВЫРАЗИТЬ приводит значение
//к одному типу, и только потом берут поле
Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |   Движения.Регистратор КАК Документ,
    |   ВЫБОР
    |       КОГДА ТИПЗНАЧЕНИЯ(
    |           Движения.Регистратор) =
    |           ТИП(Документ.ПриходнаяНакладная)
    |       ТОГДА ВЫРАЗИТЬ(
    |           Движения.Регистратор
    |           КАК Документ.ПриходнаяНакладная
    |           ).Склад
    |       ИНАЧЕ NULL
    |   КОНЕЦ КАК Склад
    |ИЗ
    |   РегистрНакопления.ОстаткиМатериалов
    |       КАК Движения";

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий(Цикл
    Сообщить(Выборка.Склад);
КонецЦикла;

//Проверка типа перед ВЫРАЗИТЬ не
//обязательна: значение чужого типа
//приведение превращает в NULL. Но с
//проверкой видно, что NULL получился
//намеренно, а не по недосмотру