Advertisement
piotrek77

PROCEDURE [CDN].[SED_BilansAutoZamawiacz_SElem]

May 16th, 2012
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 7.92 KB | None | 0 0
  1. SET ANSI_NULLS ON
  2. GO
  3. SET QUOTED_IDENTIFIER ON
  4. GO
  5.  
  6. -- =============================================
  7. -- Author:              Piotr Osłowski, SEDKOMP
  8. -- Create date: 2011-07-19
  9. -- Modyfication date: 2011-09-05
  10. -- Description: Napełnia tablice do AutoZamawiacza
  11. -- =============================================
  12. ALTER PROCEDURE [CDN].[SED_BilansAutoZamawiacz_SElem]
  13.         @elemId int,@twrId int,@ilosc decimal(11,4), @oswietlenieDekoracyjne int
  14. --
  15. AS
  16. BEGIN
  17.         -- SET NOCOUNT ON added to prevent extra result sets from
  18.         -- interfering with SELECT statements.
  19.         SET NOCOUNT ON;
  20.        
  21.  
  22.        
  23.         DECLARE @ilosc1 decimal(11,4)
  24.        
  25.        
  26.         --2011-09-08
  27.         --DECLARE @oswietlenieDekoracyjne int
  28.        
  29.  
  30.         --2012-05-16
  31.         DECLARE @iloscZam DECIMAL(15,4)
  32.         DECLARE @iloscZam2 DECIMAL(15,4)
  33.         DECLARE @twrwartosc2 varchar(10)
  34.        
  35.         DECLARE @magLiterkaNag varchar(1) --magazyn z nagłówka na który zamawiamy
  36.         DECLARE @magLiterkaZam varchar(1) --magazyn z którego zamawiamy
  37.        
  38.         select @twrwartosc2 = Twr_Wartosc2 FROM CDN.TwrKarty WHERE Twr_GIDNumer = @twrid
  39.        
  40.        
  41.         --magazyn z nagłówka
  42.         -- czy towar jest 'oświetleniem dekoracyjnym'  
  43.         declare @magNad int --id magazynu z nagłowka
  44.         SELECT TOP 1 @magNad = BsN_MagNNumer, @oswietlenieDekoracyjne  = CASE BSN_TwgGroNumer WHEN 117689 THEN 1 ELSE 0 END
  45.           FROM [CDN].[SED_BilansAutoZamawiaczElem] as e WITH (NOLOCK)
  46.           JOIN cdn.SED_BilansAutoZamawiacz as n WITH (NOLOCK) ON n.id = e.nadId
  47.           JOIN CDN.BstNag WITH (NOLOCK) ON BsN_ID =  BsNID
  48.           where e.id = @elemId
  49.  
  50.  
  51.  
  52.  
  53.         --obliczamy literkę magazynu z nagłówka
  54.         SELECT @magLiterkaNag = Substring(Mag_Kod,1,1) FROM CDN.Magazyny WHERE MAG_GidNumer = @magNad
  55.  
  56.  
  57. -- czy towar jest 'oświetleniem dekoracyjnym'  
  58.         --SELECT TOP 1  @oswietlenieDekoracyjne  = CASE BSN_TwgGroNumer WHEN 117689 THEN 1 ELSE 0 END
  59.         --  FROM [CDN].[SED_BilansAutoZamawiaczElem] as e
  60.         --  JOIN cdn.SED_BilansAutoZamawiacz as n ON n.id = e.nadId
  61.         --  JOIN CDN.BstNag ON BsN_ID =  BsNID
  62.         --  where e.id = @elemId
  63.        
  64.        
  65.        
  66.         --kursor po magazynach
  67.         declare @magId int
  68.  
  69.  
  70. if (select Count(*) from cdn.twrgrupy where  TwG_GroNumer=148923 and TwG_GIDTyp=16 AND TwG_GIDNumer = @twrId  ) = 0
  71.  
  72. BEGIN
  73.  
  74.  
  75.  
  76. declare kursor2 cursor forward_only FOR
  77. --2012-05-25
  78. SELECT magid FROM #magazynkiBazamowe WITH (NOLOCK)
  79. JOIN CDN.Magazyny ON magId = Mag_GIDNumer
  80. JOIN CDN.bilans_kolejka_asaj ON filia = @magLiterkaNag
  81. WHERE PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka) > 0
  82.  
  83. AND @oswietlenieDekoracyjne = osdek
  84. ORDER BY
  85.     CASE PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka)
  86.     WHEN 0 THEN 99999999
  87.     ELSE
  88.     PATINDEX('%'+Substring(MAG_Kod,1,1)+'%',kolejka)
  89.     END, MAG_KOD
  90.  
  91. open kursor2
  92. FETCH NEXT FROM kursor2 INTO @magId
  93.  
  94.         while @@FETCH_STATUS = 0
  95.         begin
  96.  
  97.  
  98. ----------      SET @ilosc1 = CDN.SED_WezStanTowaru ( @magId, @twrId, @opcjaTylkoZalegacze)
  99.  
  100. -- @ilosc  - ilość do zamówienia
  101. -- @ilosc1 - ilość zamawiana w danym magazynie
  102.  
  103. -- pobieramy ilość dostępną
  104.         If @ilosc > 0
  105.                 Begin
  106.         SET @ilosc1 = CDN.SED_WezStanTowaru ( @magId, @twrId, @oswietlenieDekoracyjne)
  107.         SET @ilosc1 = IsNull(@ilosc1, 0)
  108.                 End
  109.        
  110.                
  111. --zaremować musimy ponieważ potrzebujemy ilości na stanie magazynu nie pomniejszanej do zapotrzebowania            
  112.         --If @ilosc1>@ilosc
  113.         --      Begin
  114.         --              SET @ilosc1 = @ilosc
  115.         --      End
  116.        
  117.                
  118. --2012-05-23      
  119.         IF (@ilosc1 > 0) AND (@ilosc > 0)
  120.                 Begin
  121.                        
  122.                        
  123.                        
  124.                         --obliczamy literkę magazynu z ktorego pobieramy towar
  125.                         SELECT @magLiterkaZam = Substring(Mag_Kod,1,1) FROM CDN.Magazyny WHERE MAG_GidNumer = @magId
  126.                        
  127.                         Select @iloscZam = Tpm_IloscZam FROM CDN.TwrParMag WITH (NOLOCK) WHERE Tpm_MagNumer = @magId AND Tpm_TwrNumer = @twrId
  128.                         SET @iloscZam = IsNull(@iloscZam,0)
  129.                        
  130.                         if (  
  131.                                                 (@iloscZam = 0)
  132.                                                         OR
  133.                                                 NOT (@twrwartosc2 in ('A', 'B'))
  134.                                                         OR  
  135.                                                 NOT((@magLiterkaNag in ('A','F','J')) AND (@magLiterkaZam in ('A','F','J')))  
  136.                                 )
  137.                                 Begin
  138. --dla @iloscZam = 1 procedura "tak jakby" nie wykonuje się, zamawiana jest ilość dostępna  
  139.                                         SET @iloscZam = 1
  140.                                 End
  141.                         --SET @iloscZam2 = @iloscZam
  142.  
  143.  
  144.                                
  145.                                
  146.                        
  147. -- przypadek I
  148. -- na magazynie nie ma wystarczającej ilości                        
  149. -- zamawiamy dostępną ilość i jednocześnie będącą wielokrotnością IloscZam
  150. -- @ilosc1 - stan na magazynie z którego zamawiamy
  151. -- @ilosc - ile chcemy zamówić
  152.                         if @ilosc1 < @ilosc            
  153.                                 Begin
  154.                                        
  155.                                         SET @ilosc1 = FLOOR(@ilosc1 / @iloscZam) * @iloscZam
  156.                                 End
  157.                                 Else
  158.                                 Begin
  159. --obliczanie najmniejszej wielokrotności ilościZam, większej (lub równej) od ilości zamawianej
  160. --przypadek II (odwortny do przypadek I)
  161.                                         SET @iloscZam2 = @iloscZam
  162.                                         WHILE @iloscZam2 < @ilosc
  163.                                                 Begin
  164.                                                 SET @iloscZam2 = @iloscZam2 + @iloscZam
  165.                                                 End
  166.                                         SET @ilosc1 = CASE WHEN @ilosc1 < @iloscZam2 THEN @ilosc ELSE @iloscZam2 END
  167.                                 End    
  168.                                
  169.  
  170.          
  171.                
  172.                         If @ilosc1>0
  173.                         Begin
  174.                             INSERT INTO CDN.SED_BilansAutoZamawiaczSElem (nadId, magId, ilosc)
  175.                             VALUES (@elemId, @magId, @ilosc1)
  176.                            
  177.                             SET @ilosc = @ilosc - @ilosc1
  178.                         End
  179.                 End
  180.                 FETCH NEXT FROM kursor2 INTO @magId
  181.             End
  182. close kursor2
  183. DEALLOCATE kursor2
  184. --koniec kursora
  185.  
  186. END --if (select Count(*)...
  187.  
  188.  
  189. --sprawdzamy czy udało się całą ilość zamówić:
  190.  
  191. if @ilosc > 0
  192.         Begin
  193.        
  194. --@ilosc trzeba dopełnić do najniższej wielokrotności ilości zamawianej: Tpm_IloscZam (pod warunkiem, że jest większa od zera)
  195.  
  196.  
  197.         Select @iloscZam = Tpm_IloscZam FROM CDN.TwrParMag WITH (NOLOCK) WHERE Tpm_MagNumer = @magNad AND Tpm_TwrNumer = @twrId
  198.         SET @iloscZam = IsNull(@iloscZam,0)
  199.         SET @iloscZam2 = @iloscZam
  200.        
  201.         IF @iloscZam > 0
  202.                         Begin
  203.                                 WHILE @iloscZam2 < @ilosc
  204.                                                 Begin
  205.                                                 SET @iloscZam2 = @iloscZam2 + @iloscZam
  206.                                                 End
  207.                                 SET @ilosc = @iloscZam2
  208.                         End
  209.        
  210.         INSERT INTO CDN.SED_BilansAutoZamawiaczSElem (nadId, ilosc, kntId)
  211.         SELECT @elemId, @ilosc,  Twr_PrdNumer FROM CDN.TwrKarty WITH (NOLOCK) WHERE Twr_GIDNumer = @twrId
  212.        
  213.        
  214.        
  215.         End
  216.  
  217.  
  218.  
  219.          
  220.                        
  221.  
  222.        
  223.         SET NOCOUNT OFF;
  224. END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement