Попробуй. Немного упростила запрос.
Он не учитывает случая, когда по месту хранения "Остатки в упаковках".
Цитата: create or replace function article_ost(Mystoreloc in integer, Myarticle in Varchar2) return number is
Result number;
begin
select A.FreeQuantity-nvl(G.SaleQ,0) into result
from (select
L.ID StoreLoc, Article,
nvl(G.Quantity+G.FoundQuantity-(G.ReservedQuantity+G.IncomingQuantity),0) FreeQuantity
from Supermag.SMGoods G, Supermag.SMStoreLocations L
where L.ID=G.StoreLoc(+)
and G.Article(+)=Myarticle
and l.id(+)=Mystoreloc)a,
(select G.LocID,sum(G.SaleQuantity-G.ReturnQuantity) SaleQ
from Supermag.SMOperGoods G
where G.Article=Myarticle and g.locid=Mystoreloc
group by G.LocID) G
where A.StoreLoc=G.LocID(+);
return Result;
end article_ost;