SQL - Stany magazynowe z wybranego miesiąca

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

estezecik
Posty: 4
Rejestracja: 08 gru 2014, 09:35
Rola: Konsultant CDN XL
Wersja: 2013.2

SQL - Stany magazynowe z wybranego miesiąca

Post autor: estezecik »

Muszę przygotować zapytanie stany magazynowe na koniec miesiąca wybranego miesiąca. Zapytanie ma zwracać Numer towaru, kod towaru, producenta, no i ilość na koniec wybranego miesiąca. Problem polega na tym, że nie wiem z której tabeli dokładnie pobrać te dane. Przejrzałem TwrStany, TwrSatnybufor, TwrZasoby.

Monster
Posty: 182
Rejestracja: 20 mar 2012, 09:04
Rola: Konsultant CDN XL
Wersja: 2016
Lokalizacja: Wrocław

Re: SQL - Stany magazynowe z wybranego miesiąca

Post autor: Monster »

Stan magazynu historycznie nie jest przechowywany w żadnej tabeli.
Jest liczony jako suma przychodów i rozchodów danego indeksu za okres.

Przejrzyj sobie procedurę CDN.StanMagazynuNaDzien.

Ewentualnie wyjdź od wydruku stan magazynu na dzień (może wystarczy).

estezecik
Posty: 4
Rejestracja: 08 gru 2014, 09:35
Rola: Konsultant CDN XL
Wersja: 2013.2

Re: SQL - Stany magazynowe z wybranego miesiąca

Post autor: estezecik »

Procedura jest, ale jak ją przerobić, żeby wrzuciła stany do tabeli?

john_doe
Posty: 649
Rejestracja: 26 maja 2008, 22:15
Rola: Inny

Re: SQL - Stany magazynowe z wybranego miesiąca

Post autor: john_doe »

przecież masz, jak mówił przedmówca, w postaci procedury [StanMagazynuNaDzien]
gdybyś zajrzał do tego skryptu zobaczyłbyś, że jest tam parametr @Data.
Procedura jest, ale jak ją przerobić, żeby wrzuciła stany do tabeli?
?? wynik chcesz pakować do jakiejś swojej tabeli?

estezecik
Posty: 4
Rejestracja: 08 gru 2014, 09:35
Rola: Konsultant CDN XL
Wersja: 2013.2

Re: SQL - Stany magazynowe z wybranego miesiąca

Post autor: estezecik »

Zmodyfikowałem procedurę usuwając parametry @CDN_MagSesja, @CDN_MagWatek. Wywołana procedura zwraca mi błędne stany, sporo za duże. Może, ktoś bardziej biegły coś poradzi. Kod poniżej

Kod: Zaznacz cały

USE [Prezentacyjna10_1]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER   PROCEDURE [CDN].[TS0_StanMagazynuNaDzien] (@Data int, @CDN_Filtr varchar(2048)='1=1' )
AS
DECLARE @MAGTyp SMALLINT
SET NOCOUNT ON

SET @MAGTyp = 208

CREATE TABLE #TmpTwrKarty
(
        GIDNumer int
        PRIMARY KEY(GIDNumer)
)

IF IsNull(@CDN_Filtr,'')=''
  EXEC (N'Insert Into #TmpTwrKarty Select TwrKarty.Twr_GIDNumer FROM CDN.TwrKarty TwrKarty WHERE TwrKarty.Twr_Typ in (1,2)');
Else
  EXEC (N'Insert Into #TmpTwrKarty Select TwrKarty.Twr_GIDNumer FROM CDN.TwrKarty TwrKarty WHERE TwrKarty.Twr_Typ in (1,2) AND ' + @CDN_Filtr);

SET NOCOUNT OFF

SELECT
IsNull(DokSprzedaz.Ilosc,0) As IloscDoSprzedazy,
IsNull(DokMagazyn.Ilosc,0) As W_Magazynie,
IsNull(DokSprzedaz.Wartosc,0) As Wartosc,
COALESCE(DokSprzedaz.Twr_Kod,DokMagazyn.Twr_Kod) As KodTowaru,
COALESCE(DokSprzedaz.Twr_Nazwa,DokMagazyn.Twr_Nazwa) As NazwaTowaru,
COALESCE(DokSprzedaz.Twr_Jm,DokMagazyn.Twr_Jm) As JmTowaru

FROM
(
  SELECT
  Twr_Kod, Twr_Nazwa,
  ISNULL(SUM(CDN.TrSIlosc(TrS_Ilosc,TrN_GIDTyp,TrN_GIDNumer,TrS_GIDLp,TrS_SubGIDLp,TrS_ZwrTyp,TrN_Stan)),0) AS Ilosc,
  ISNULL(SUM(CDN.TrSKsiegowa(TrS_KosztKsiegowy,TrS_Ilosc,TrN_GIDTyp,TrN_GIDNumer,TrS_GIDLp,TrS_SubGIDLp,TrS_ZwrTyp,TrN_Stan,TrN_ZmodyfikowanoZasob)),0) AS Wartosc,
  max(Twr_Jm) as Twr_Jm
  FROM
  #TmpTwrKarty
  JOIN CDN.TwrKarty ON Twr_GIDNumer=GIDNumer
  JOIN CDN.TraElem  ON Twr_GIDNumer=TrE_TwrNumer
  JOIN CDN.TraSElem ON TrS_GIDNumer=TrE_GIDNumer
  JOIN CDN.MagWybor ON TrS_MagNumer=MgW_MagNumer
  JOIN CDN.TraNag   ON TrN_GIDNumer=TrE_GIDNumer
  WHERE Trn_DataMag<=@Data
  GROUP BY Twr_Kod, Twr_Nazwa
)As DokSprzedaz
FULL JOIN
(
  SELECT
  Twr_Kod, Twr_Nazwa,
  ISNULL(SUM(CDN.MasIlosc(MaS_Ilosc,MaN_TrNTyp,MaN_Stan)),0) AS Ilosc, max(Twr_Jm) as Twr_Jm
  FROM
  CDN.MagNag
  JOIN CDN.MagsElem ON MaN_GIDNumer=MaS_GIDNumer
  JOIN CDN.MagWybor ON MaS_MagNumer=MgW_MagNumer 
  JOIN CDN.TwrKarty ON Twr_GIDNumer=MaS_TwrNumer
  JOIN #TmpTwrKarty ON Twr_GIDNumer=GIDNumer
  WHERE Man_Data3<= @Data
  GROUP BY Twr_Kod, Twr_Nazwa
) As DokMagazyn ON DokSprzedaz.Twr_Kod=DokMagazyn.Twr_Kod
WHERE IsNull(DokSprzedaz.Ilosc,0) <>0 OR IsNull(DokMagazyn.Ilosc,0) <> 0 OR IsNull(DokSprzedaz.Wartosc,0) <> 0

farbex
Posty: 111
Rejestracja: 15 sty 2010, 15:17
Rola: Administrator CDN XL
Lokalizacja: Ciechanów
Kontakt:

Re: SQL - Stany magazynowe z wybranego miesiąca

Post autor: farbex »

Witam.

Ja @CDN_MagSesja i @CDN_MagWatek uzupełniam zawsze na podstawie zapytania:

Kod: Zaznacz cały

DECLARE @SesjaID INT
SET @SesjaID=(SELECT MAX(MgW_SesjaID) FROM CDN.MagWybor)

SELECT        MgW_SesjaID, MgW_Watek
FROM            CDN.MagWybor
WHERE        MgW_SesjaID=@SesjaID AND MgW_MagNumer=--podaj GIDNumer magazynu
i wtedy działa.
Przemysław Klimkowski
farbex.com.pl

ODPOWIEDZ