В начало

Запрос к остаткам на складе

            Есть документ «РасходнаяНакладная» и два регистра накопления: «ОстаткиТоварам» и «ОстаткиПоСкладам». Необходимо сформировать запрос по остаткам товаров на конкретном складе.

Листинг 1. Простой запрос

ВЫБРАТЬ

      ДокРасхоменклатура,

      ДокРасхоличество,

      ОстТоволичествоОстаток,

      ОстТовтоимостьОстаток,

      ОстСклоличествоОстаток КАК ОстатокНаСкладе

ИЗ ДокументасходнаяНакладная.Товары КАК ДокРасх

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакоплениястаткиТоваров.Остатки КАК ОстТов

   ПО ДокРасхоменклатура = ОстТов.Номенклатура

   ЛЕВОЕ СОЕДИНЕНИЕ

      РегистрНакоплениястаткиПоСкладам.Остатки(,Склад=&Склад) КАК ОстСкл

      ПО ДокРасхоменклатура = ОстСкл.Номенклатура

ГДЕ Ссылка = &Ссылка

 

Рис. 1. Результат простого запроса

           

Запрос в листинге 1 не особо скоростной, поэтому оптимально будет сделать другой запрос.

Листинг 2. Усовершенствованный запрос

ВЫБРАТЬ

      Номенклатура,

      СУММА (Количество) КАК Количество

ПОМЕСТИТЬ ДокРасх

ИЗ ДокументасходнаяНакладная.Товары

ГДЕ Ссылка = &Ссылка И НЕ Номенклатураслуга

СГРУППИРОВАТЬ ПО Номенклатура

;

ВЫБРАТЬ

      ДокРасхоменклатура,

      ДокРасхоличество,

      ЕСТЬNULL(РегОстоличествоОстаток,0) КАК КоличествоОстаток,

      ЕСТЬNULL(РегОсттоимостьОстаток,0) КАК СтоимостьОстаток,

      ЕСТЬNULL(РегСклоличествоОстаток,0) КАК ОстатокНаСкладе

ИЗ ДокРасх КАК ДокРасх

ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакоплениястаткиТоваров.Остатки(&МоментВремени, Номенклатура В(ВЫБРАТЬ Номенклатура ИЗ ДокРасх КАК ДокРасх)) КАК РегОст

   ПО ДокРасхоменклатура = РегОст.Номенклатура

   ЛЕВОЕ СОЕДИНЕНИЕ

   РегистрНакоплениястаткиПоСкладам.Остатки(&МоментВремени, Склад=&Склад И Номенклатура В(ВЫБРАТЬ Номенклатура ИЗ ДокРасх КАК ДокРасх)) КАК РегСкл

   ПО ДокРасхоменклатура = РегСкл.Номенклатура

 

Рис. 2. Результат выполнения усовершенствованного запроса

 

Если использовать данные запросы в документе, например, «РасходнаяНакладная», то нужно еще присвоить значения параметрам, а именно

ЗапросстановитьПараметр("Склад", Склад);    

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

ЗапросстановитьПараметр("МоментВремени", МоментВремени());

 

ПРИМЕЧАНИЕ: запрос сформирован и проверен в консоле запросов