Задание - аналог задания на спеца. Требуется списать расходной накладной товар со скдада по FIFO. Когда делаю проверку по остаткам - не пишет на каком складу(ВыборкаНоменклатура.Склад) не хватает(. Что нужно исправить? учет ведется в разрезе складов.

```1c
    Запрос.Текст =
    "ВЫБРАТЬ
    | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
    | СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
    | РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад
    |ПОМЕСТИТЬ РасходнаяНакладная
    |ИЗ
    | Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
    |ГДЕ
    | РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    | РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
    | РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад
    |;
    |
    |////////////////////////////////////////////////////////////­////////////////////
    |ВЫБРАТЬ
    | РасходнаяНакладная.Номенклатура КАК Номенклатура,
    | РасходнаяНакладная.Количество КАК Количество,
    | РасходнаяНакладная.Сумма КАК Сумма,
    | ОстаткиНоменклатурыОстатки.Партия КАК Партия,
    | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
    | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СтоимостьОстаток, 0) КАК СтоимостьОстаток,
    | ОстаткиНоменклатурыОстатки.Склад КАК СкладСрег,
    | РасходнаяНакладная.Склад
    |ИЗ
    | РасходнаяНакладная КАК РасходнаяНакладная
    | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
    | &МоментВремени,
    | Номенклатура В
    | (ВЫБРАТЬ
    | РасходнаяНакладная.Номенклатура
    | ИЗ
    | РасходнаяНакладная)) КАК ОстаткиНоменклатурыОстатки
    | ПО РасходнаяНакладная.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
    |ГДЕ
    | РасходнаяНакладная.Склад = ОстаткиНоменклатурыОстатки.Склад
    |
    |УПОРЯДОЧИТЬ ПО
    | ОстаткиНоменклатурыОстатки.Партия.МоментВремени
    |ИТОГИ
    | МАКСИМУМ(Количество),
    | МАКСИМУМ(Сумма),
    | СУММА(КоличествоОстаток)
    |ПО
    | Номенклатура";

    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("МоментВремени", МоментВремени());

    Результат = Запрос.Выполнить();
    ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); //с иерархией

    Пока ВыборкаНоменклатура.Следующий() Цикл
    //выб= ВыборкаНоменклатура.Выбрать().Следующий();
    // проверим остатки
    Если (ВыборкаНоменклатура.Количество > ВыборкаНоменклатура.КоличествоОстаток) Тогда

    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = "Не хватает "+ (ВыборкаНоменклатура.Количество-ВыборкаНоменклатура.КоличествоОстаток) +
    " позиций номенклатуры " + ВыборкаНоменклатура.Номенклатура + "."+ "На складе"+ВыборкаНоменклатура.Склад;
    Сообщение.Сообщить();

    Отказ = Истина;
    Продолжить;
    КонецЕсли;
```
---
ну, кстати, да... сами же и ответили на свой вопрос

вы выбираете иерархическую структуру, то есть дерево по сути

По верхнему уровню у вас есть обход, но в нём нет склада. Склад у вас на втором уровне.

Это легко проверить, например, так:

```1c
    ДЗ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    ОткрытьЗначение(ДЗ);
```

только в управляемых формах работать не будет - нужно запускать в обычном приложении

что нужно сделать - нужно "вытащить" склад на верхний уровень:

```1c
    |ИТОГИ
    | МАКСИМУМ(Количество),
    | МАКСИМУМ(Сумма),
    | СУММА(КоличествоОстаток),
    | МАКСИМУМ(Склад) как Склад
    |ПО
    | Номенклатура";
```

можно МАКСИМУМ или МИНИМУМ - по фигу, скад же реквизит шапки.... Его кстати, можно просто так и вывести, не из выборки.
---
|ГДЕ
        | РасходнаяНакладная.Склад = ОстаткиНоменклатурыОстатки.Склад

за вот это со спеца можно и домой пойти сразу :) Это должно быть в параметрах виртуальной таблицы.. там же, где и номенклатура.

В остальном похоже на правду вроде.. В консоле запросов нужно отладить и посмотреть чтоб там склад точно выводился.
---
romansun, спасибо за своет, в следующий раз на виртуальную наложу, но в кода когда сообщениевывожу о нехватке склад не видится ВыборкаНоменклатура.Склад. Когда запрос ввывожу в прямом виде ВЫполнить().ВЫбрать()- без обхода по групировка, то склад в выражении ВыборкаНоменклатура.Склад выводится, может что нужно в обходе поменять?
---
ну, кстати, да... сами же и ответили на свой вопрос

вы выбираете иерархическую структуру, то есть дерево по сути

По верхнему уровню у вас есть обход, но в нём нет склада. Склад у вас на втором уровне.

Это легко проверить, например, так:

```1c
    ДЗ = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);
    ОткрытьЗначение(ДЗ);
```

только в управляемых формах работать не будет - нужно запускать в обычном приложении

что нужно сделать - нужно "вытащить" склад на верхний уровень:

```1c
    |ИТОГИ
    | МАКСИМУМ(Количество),
    | МАКСИМУМ(Сумма),
    | СУММА(КоличествоОстаток),
    | МАКСИМУМ(Склад) как Склад
    |ПО
    | Номенклатура";
```

можно МАКСИМУМ или МИНИМУМ - по фигу, скад же реквизит шапки.... Его кстати, можно просто так и вывести, не из выборки.
---
romansun, спасибо, получилось проверка) не знал что есть ОткрытьЗначение().

А можно ли сделать, так не создавая дополнительного запроса или модифицировать прежний,
чтобы себестоимость, которая высчитывается так:

```1c
    // Создаем движения
    ТекСебестоимость = 0;

    ОсталосьСписать = ВыборкаНоменклатура.Количество;
    ВыборкаДетальныеЗаписи = ВыборкаНоменклатура.Выбрать();

    Пока (ОсталосьСписать > 0) И ВыборкаДетальныеЗаписи.Следующий() Цикл
    Списываем = Мин(ОсталосьСписать, ВыборкаДетальныеЗаписи.КоличествоОстаток);

    // регистр ОстаткиНоменклатуры Расход
    Движение = Движения.ОстаткиНоменклатуры.Добавить();
    Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
    Движение.Период = Дата;
    Движение.Номенклатура= ВыборкаДетальныеЗаписи.Номенклатура;
    Движение.Склад = ВыборкаДетальныеЗаписи.Склад;
    Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
    Движение.Количество = Списываем;
    //расчет себестоимости
    Движение.Стоимость = (Списываем * ВыборкаДетальныеЗаписи.СтоимостьОстаток) /
    ВыборкаДетальныеЗаписи.КоличествоОстаток;

    ТекСебестоимость = ТекСебестоимость + Движение.Стоимость;
    ОсталосьСписать = ОсталосьСписать - Списываем;
    КонецЦикла;
```

не бралась в расчте склада с которого ее списывают.
Тоесть к примеру поступил товар1 на ОСНОВНОЙ склад, потом товар1 на ДОПОЛНИТЕЛЬНЫЙ, затем на СКЛАД1 и себестоимость считалась сначала с 1 склада, 2 склад и потом 3 склада
---
Manticor, тогда постановка задачи должна быть уже другой: расчет себестоимости в целом по компании, а не по складам!
---
Может для этой цели создать еще один регистр накопления и там хранить ПАРТИЮ(документ приход.), стоиомость и количество? - тоесть без учета склада. И уже из этого накопительного считать себестоимость не завязанную на склад??