Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SET ANSI_NULLS ON
- GO
- SET QUOTED_IDENTIFIER ON
- GO
- -- =============================================
- -- Author: Piotr Osłowski, SEDKOMP
- -- Create date: 2011-07-19
- -- Modyfication date: 2011-09-05
- -- Description: Napełnia tablice do AutoZamawiacza
- -- =============================================
- ALTER PROCEDURE [CDN].[SED_BilansAutoZamawiacz_SElem]
- @elemId int,@twrId int,@ilosc decimal(11,4), @oswietlenieDekoracyjne int
- --
- AS
- BEGIN
- -- SET NOCOUNT ON added to prevent extra result sets from
- -- interfering with SELECT statements.
- SET NOCOUNT ON;
- DECLARE @ilosc1 decimal(11,4)
- --2011-09-08
- --DECLARE @oswietlenieDekoracyjne int
- --2012-05-16
- DECLARE @iloscZam DECIMAL(15,4)
- DECLARE @iloscZam2 DECIMAL(15,4)
- DECLARE @twrwartosc2 varchar(10)
- DECLARE @magLiterkaNag varchar(1) --magazyn z nagłówka na który zamawiamy
- DECLARE @magLiterkaZam varchar(1) --magazyn z którego zamawiamy
- select @twrwartosc2 = Twr_Wartosc2 FROM CDN.TwrKarty WHERE Twr_GIDNumer = @twrid
- --magazyn z nagłówka
- -- czy towar jest 'oświetleniem dekoracyjnym'
- declare @magNad int --id magazynu z nagłowka
- SELECT TOP 1 @magNad = BsN_MagNNumer, @oswietlenieDekoracyjne = CASE BSN_TwgGroNumer WHEN 117689 THEN 1 ELSE 0 END
- FROM [CDN].[SED_BilansAutoZamawiaczElem] as e WITH (NOLOCK)
- JOIN cdn.SED_BilansAutoZamawiacz as n WITH (NOLOCK) ON n.id = e.nadId
- JOIN CDN.BstNag WITH (NOLOCK) ON BsN_ID = BsNID
- where e.id = @elemId
- --obliczamy literkę magazynu z nagłówka
- SELECT @magLiterkaNag = Substring(Mag_Kod,1,1) FROM CDN.Magazyny WHERE MAG_GidNumer = @magNad
- -- czy towar jest 'oświetleniem dekoracyjnym'
- --SELECT TOP 1 @oswietlenieDekoracyjne = CASE BSN_TwgGroNumer WHEN 117689 THEN 1 ELSE 0 END
- -- FROM [CDN].[SED_BilansAutoZamawiaczElem] as e
- -- JOIN cdn.SED_BilansAutoZamawiacz as n ON n.id = e.nadId
- -- JOIN CDN.BstNag ON BsN_ID = BsNID
- -- where e.id = @elemId
- --kursor po magazynach
- declare @magId int
- if (select Count(*) from cdn.twrgrupy where TwG_GroNumer=148923 and TwG_GIDTyp=16 AND TwG_GIDNumer = @twrId ) = 0
- BEGIN
- declare kursor2 cursor forward_only FOR
- --2012-05-25
- SELECT magid FROM #magazynkiBazamowe WITH (NOLOCK)
- JOIN CDN.Magazyny ON magId = Mag_GIDNumer
- JOIN CDN.bilans_kolejka_asaj ON filia = @magLiterkaNag
- WHERE PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka) > 0
- AND @oswietlenieDekoracyjne = osdek
- ORDER BY
- CASE PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka)
- WHEN 0 THEN 99999999
- ELSE
- PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka)
- END, MAG_KOD
- open kursor2
- FETCH NEXT FROM kursor2 INTO @magId
- while @@FETCH_STATUS = 0
- begin
- ---------- SET @ilosc1 = CDN.SED_WezStanTowaru ( @magId, @twrId, @opcjaTylkoZalegacze)
- -- @ilosc - ilość do zamówienia
- -- @ilosc1 - ilość zamawiana w danym magazynie
- -- pobieramy ilość dostępną
- If @ilosc > 0
- Begin
- SET @ilosc1 = CDN.SED_WezStanTowaru ( @magId, @twrId, @oswietlenieDekoracyjne)
- SET @ilosc1 = IsNull(@ilosc1, 0)
- End
- --zaremować musimy ponieważ potrzebujemy ilości na stanie magazynu nie pomniejszanej do zapotrzebowania
- --If @ilosc1>@ilosc
- -- Begin
- -- SET @ilosc1 = @ilosc
- -- End
- --2012-05-23
- IF (@ilosc1 > 0) AND (@ilosc > 0)
- Begin
- --obliczamy literkę magazynu z ktorego pobieramy towar
- SELECT @magLiterkaZam = Substring(Mag_Kod,1,1) FROM CDN.Magazyny WHERE MAG_GidNumer = @magId
- Select @iloscZam = Tpm_IloscZam FROM CDN.TwrParMag WITH (NOLOCK) WHERE Tpm_MagNumer = @magId AND Tpm_TwrNumer = @twrId
- SET @iloscZam = IsNull(@iloscZam,0)
- if (
- (@iloscZam = 0)
- OR
- NOT (@twrwartosc2 in ('A', 'B'))
- OR
- NOT((@magLiterkaNag in ('A','F','J')) AND (@magLiterkaZam in ('A','F','J')))
- )
- Begin
- --dla @iloscZam = 1 procedura "tak jakby" nie wykonuje się, zamawiana jest ilość dostępna
- SET @iloscZam = 1
- End
- --SET @iloscZam2 = @iloscZam
- -- przypadek I
- -- na magazynie nie ma wystarczającej ilości
- -- zamawiamy dostępną ilość i jednocześnie będącą wielokrotnością IloscZam
- -- @ilosc1 - stan na magazynie z którego zamawiamy
- -- @ilosc - ile chcemy zamówić
- if @ilosc1 < @ilosc
- Begin
- SET @ilosc1 = FLOOR(@ilosc1 / @iloscZam) * @iloscZam
- End
- Else
- Begin
- --obliczanie najmniejszej wielokrotności ilościZam, większej (lub równej) od ilości zamawianej
- --przypadek II (odwortny do przypadek I)
- SET @iloscZam2 = @iloscZam
- WHILE @iloscZam2 < @ilosc
- Begin
- SET @iloscZam2 = @iloscZam2 + @iloscZam
- End
- SET @ilosc1 = CASE WHEN @ilosc1 < @iloscZam2 THEN @ilosc ELSE @iloscZam2 END
- End
- If @ilosc1>0
- Begin
- INSERT INTO CDN.SED_BilansAutoZamawiaczSElem (nadId, magId, ilosc)
- VALUES (@elemId, @magId, @ilosc1)
- SET @ilosc = @ilosc - @ilosc1
- End
- End
- FETCH NEXT FROM kursor2 INTO @magId
- End
- close kursor2
- DEALLOCATE kursor2
- --koniec kursora
- END --if (select Count(*)...
- --sprawdzamy czy udało się całą ilość zamówić:
- if @ilosc > 0
- Begin
- --@ilosc trzeba dopełnić do najniższej wielokrotności ilości zamawianej: Tpm_IloscZam (pod warunkiem, że jest większa od zera)
- Select @iloscZam = Tpm_IloscZam FROM CDN.TwrParMag WITH (NOLOCK) WHERE Tpm_MagNumer = @magNad AND Tpm_TwrNumer = @twrId
- SET @iloscZam = IsNull(@iloscZam,0)
- SET @iloscZam2 = @iloscZam
- IF @iloscZam > 0
- Begin
- WHILE @iloscZam2 < @ilosc
- Begin
- SET @iloscZam2 = @iloscZam2 + @iloscZam
- End
- SET @ilosc = @iloscZam2
- End
- INSERT INTO CDN.SED_BilansAutoZamawiaczSElem (nadId, ilosc, kntId)
- SELECT @elemId, @ilosc, Twr_PrdNumer FROM CDN.TwrKarty WITH (NOLOCK) WHERE Twr_GIDNumer = @twrId
- End
- SET NOCOUNT OFF;
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement