В начало

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

 

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

 

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

ВЫБРАТЬ

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

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

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

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

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

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

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

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

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

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

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

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

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

 

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

           

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

 

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

ВЫБРАТЬ

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

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

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

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

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

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

;

ВЫБРАТЬ

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

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

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

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

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

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

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

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

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

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

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

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

 

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

 

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

 

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

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

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

 

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