codice:
Use TempDb
go
-- creazione e popolamento tabella di test
create table dbo.TabLotti
(
Lotto varchar(10),
Articolo varchar(10),
Data datetime,
QtaProdotta int,
QtaImpegnata int
)
go
insert dbo.TabLotti values('Lotto01','art1', '20060101',5,2)
insert dbo.TabLotti values('Lotto01','art1', '20060102',2,2)
insert dbo.TabLotti values('Lotto02', 'art1','20060101',4,3)
insert dbo.TabLotti values('Lotto02', 'art1','20060102',6,2)
insert dbo.TabLotti values('Lotto05', 'art1','20060101',3,2)
insert dbo.TabLotti values('Lotto05', 'art1','20060102',3,2)
go
Create Function dbo.fnProgQtaDisponibile
--Funzione di utilità per il calcolo Progressivo disponibilità
(
@Art varchar(10),
@Lotto varchar(10),
@Data DateTime,
@QtaDispGiornoLotto int
)
Returns int
AS
Begin
Return
(
(
select IsNull(sum(T2.QtaProdotta-T2.QtaImpegnata),0)
from tabLotti T2
where T2.Articolo=@Art
and ((T2.Data<=@Data and T2.Lotto<@Lotto) or (T2.Data<@Data))
) + @QtaDispGiornoLotto
)
End
go
-- corpo sp principale da creare
-- N.B. non verifica se la disponibiltà copre interamente la richiesta
declare @Art varchar(10) -- articolo
declare @QtaRic int -- qta richiesta
set @Art='art1'
--set @QtaRic= 1
--set @QtaRic= 4
--set @QtaRic= 5
set @QtaRic= 6
select T1.Data,
T1.Lotto,
T1.QtaProdotta,
T1.QtaImpegnata,
(T1.QtaProdotta-T1.QtaImpegnata) as QtaDisponibile,
--dbo.fnProgQtaDisponibile(@Art,T1.Lotto,T1.Data,(T1.QtaProdotta-T1.QtaImpegnata)) as ProgressivoQtaDisponibile,
(case when
dbo.fnProgQtaDisponibile(@Art,T1.Lotto,T1.Data,(T1.QtaProdotta-T1.QtaImpegnata))<=@QtaRic
then
(T1.QtaProdotta-T1.QtaImpegnata)
else
@QtaRic - dbo.fnProgQtaDisponibile(@Art,T1.Lotto,T1.Data,0)
end) as QtaDaImpegnare
from tabLotti T1
where (T1.Articolo=@Art)
and (T1.QtaProdotta > T1.QtaImpegnata)
and (case when
dbo.fnProgQtaDisponibile(@Art,T1.Lotto,T1.Data,(T1.QtaProdotta-T1.QtaImpegnata))<=@QtaRic
then
(T1.QtaProdotta-T1.QtaImpegnata)
else
@QtaRic - dbo.fnProgQtaDisponibile(@Art,T1.Lotto,T1.Data,0)
end)> 0
order by T1.Data,T1.Lotto
go
-- pulizia
drop Function dbo.fnProgQtaDisponibile
drop table dbo.TabLotti
Ciao sspintux