29.12.2009 15:06
kadr
 
Цитата:
Starter по nlv и case - можно попросить формулу написать ? {приход}/{количество} только с учетом того чтобы не валилось если {количество}=0 ?
таки 0 или null?
null
Код:
select {приход}/nvl({количество},1)  from dual;
0
Код:
select decode({количество},0,{приход},{приход}/{количество}) from dual;
Цитата:
Starter с учетом оперативных продаж. то, что называется "оперативно доступно"
что-то вроде такого
Код:
select A.*,
decode(A.PackSize,-1,nvl(G.SaleQ,0),null)
,decode(A.PackSize,-1,A.Quantity-nvl(G.SaleQ,0),null) OperQuantity
,decode(A.PackSize,-1,A.FreeQuantity-nvl(G.SaleQ,0),null) OperFree
from (select
L.ID StoreLoc,L.Name StoreLocTitle,'00435' Article,-1 PackSize
,nvl(G.Quantity,0) Quantity
,nvl(G.ReservedQuantity,0) ReservedQuantity
,nvl(G.IncomingQuantity,0) IncomingQuantity
,nvl(G.AwaitedQuantity,0) AwaitedQuantity
,nvl(G.FoundQuantity,0) FoundQuantity
,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(+)='00435'
union
select
L.ID StoreLoc,L.Name StoreLocTitle,G.Article,G.PackSize,G.Quantity
,G.ReservedQuantity,G.IncomingQuantity,G.AwaitedQuantity,G.FoundQuantity
,G.Quantity+G.FoundQuantity-(G.ReservedQuantity+G.IncomingQuantity) FreeQuantity
from Supermag.SMGoodsPacks G, Supermag.SMStoreLocations L
where L.ID=G.StoreLoc
and G.Article='00435') A, (select G.LocID,sum(G.SaleQuantity-G.ReturnQuantity) SaleQ
from Supermag.SMOperGoods G
where G.Article='00435'
group by G.LocID) G
where A.StoreLoc=G.LocID(+)
order by A.StoreLocTitle,A.PackSize
29.12.2009 16:48
Mtirt
 
На основе этого запроса создать функцию:
Цитата:
create or replace function article_ost(Mystoreloc in integer, Myarticle in Varchar2) return varchar2 is
Result number;
begin
select decode(A.PackSize,-1,A.FreeQuantity-nvl(G.SaleQ,0),null) OperFree into result
from (select
L.ID StoreLoc, Article,-1 PackSize
,nvl(G.Quantity,0) Quantity
,nvl(G.ReservedQuantity,0) ReservedQuantity
,nvl(G.IncomingQuantity,0) IncomingQuantity
,nvl(G.AwaitedQuantity,0) AwaitedQuantity
,nvl(G.FoundQuantity,0) FoundQuantity
,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
union
select
L.ID StoreLoc,G.Article,G.PackSize,G.Quantity
,G.ReservedQuantity,G.IncomingQuantity,G.AwaitedQuantity,G.FoundQuantity
,G.Quantity+G.FoundQuantity-(G.ReservedQuantity+G.IncomingQuantity) FreeQuantity
from Supermag.SMGoodsPacks 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(+)
order by A.PackSize
return Result;
end
И в бизнес-анализе использовать как
Цитата:
supermag.article_ost({Место хранения. Код места хранения},{Карточка товара. Артикул})
Честно говорю, на запрос надо смотреть, возможно он избыточен, просто я быстро изменила то, что предложил kadr.
29.12.2009 17:52
Starter
 
Выдает: Предупреждение: Функция создана с ошибками компиляции
30.12.2009 07:04
Mtirt
 
В заголовке ошибка, надо:
Цитата:
create or replace function article_ost(Mystoreloc in integer, Myarticle in Varchar2) return number is
30.12.2009 10:21
Starter
 
Без разницы. так же ошибки компиляции. Если один в один вставлять как написано, то он запрашивает:
Введите значение для myarticle:
Введите значение для mystoreloc:
Без разницы что вводишь (вводил &myarticle и &mystoreloc), выдает ошибки компиляции.
Если в тексте функции поменять &myarticle и &mystoreloc на просто myarticle и mystoreloc, то ничего не запрашивает, но ошибки компиляции все равно остаются.
После смены заголовка то же самое.
30.12.2009 10:38
Mtirt
 
Эту я скомпилила...
Цитата:
create or replace function article_ost(Mystoreloc in integer, Myarticle in Varchar2) return number is
Result number;
begin
select decode(A.PackSize,-1,A.FreeQuantity-nvl(G.SaleQ,0),null) OperFree into result
from (select
L.ID StoreLoc, Article,-1 PackSize
,nvl(G.Quantity,0) Quantity
,nvl(G.ReservedQuantity,0) ReservedQuantity
,nvl(G.IncomingQuantity,0) IncomingQuantity
,nvl(G.AwaitedQuantity,0) AwaitedQuantity
,nvl(G.FoundQuantity,0) FoundQuantity
,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
union
select
L.ID StoreLoc,G.Article,G.PackSize,G.Quantity
,G.ReservedQuantity,G.IncomingQuantity,G.AwaitedQuantity,G.FoundQuantity
,G.Quantity+G.FoundQuantity-(G.ReservedQuantity+G.IncomingQuantity) FreeQuantity
from Supermag.SMGoodsPacks 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(+)
order by A.PackSize;
return Result;
end;
30.12.2009 10:48
Starter
 
Неа, не проходит. Предупреждение: Функция создана с ошибками компиляции.
может ее сперва удалить, а потом еще раз попробовать создать ? хотя вроде и так должно бы работать.
30.12.2009 14:05
kadr
 
А сообщи нам каким инструментом ты пользуешься
30.12.2009 14:08
kadr
 
строка
Код:
,G.ReservedQuantity,G.IncomingQuantity,G.AwaitedQu antity,G.FoundQuantity
содержит ошибку
парвильно
Код:
,G.ReservedQuantity,G.IncomingQuantity,G.AwaitedQuantity,G.FoundQuantity
30.12.2009 16:04
Starter
 
инструмент - SQL+ под пользователем supermag. после исправления функция была добавлена, без ошибок. однако задача все равно не запускается. в логе ошибка:

========
***** Результирующий запрос *****

SELECT (CRD.Article),(CRD.ShortName),(LOC.Name),round((SUM(((nvl(REM.Quantity,0)+nvl(REM.FoundQuantity,0)-nvl(REM.ReservedQuantity,0)-nvl(REM.IncomingQuantity,0))-nvl(REMOP.Quantity,0)))),3),round((SUM(supermag.smgetsellingpricebi(CRD.Article,null,LOC.ID,supermag.getaccountpriceforloc(LOC.ID)))),4),round((SUM(supermag.article_ost(LOC.ID,CRD.Article))),4)
FROM SMGoods REM,SMStoreLocations LOC,SVAOperGoods REMOP,SVCardName CRD,SVLocCard LC
WHERE LC.StoreLoc=LOC.ID and LC.Article=REM.Article(+) and LC.StoreLoc=REM.StoreLoc(+) and LC.Article=REMOP.Article(+) and LC.StoreLoc=REMOP.StoreLoc(+) and LC.Article=CRD.Article and CRD.article in (select article from supermag.ttidgroup) and LOC.ID=2
GROUP BY (CRD.Article),(CRD.ShortName),(LOC.Name)
ORDER BY 1 ASC,2 ASC,3 ASC
ORA-06575: Пакет или функция ARTICLE_OST в неверном состоянии
Часовой пояс GMT +3, время: 14:50.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.