Magazyn na dokumencie.

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

Moderator: mikey

m_pk
Posty: 47
Rejestracja: 20 wrz 2017, 13:39
Rola: Inny
Lokalizacja: ZST
Kontakt:

Magazyn na dokumencie.

Post autor: m_pk »

Witam,

Mam pytanie. Piszę zapytanie SQL i chce zawrzeć magazyn dokumentu. W przypadku dokumentu przychodowego będzie to TrN_MagDNumer, zaś rozchodowego TrN_MagZNumer.
Czy jest jakieś miejsce w programie, które to definiuje, czy muszę to case'ować, albo korzystać z magazynu z tabeli TraSelem i odwoływać się do Trs_MagNumer ?

Mam nadzieję, że nie powielam wątku, ale nie znalazłem nigdzie takiego zapytania.

Nie liczę na gotowy kod, tylko o poradę.

Pozdrawiam,
Krzemiński Paweł

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Magazyn na dokumencie.

Post autor: praiser »

Podłączył bym elementy z racji tego, że dla transakcji może być wiele magazynów źródłowych.
Odpadnie ci case w tym przypadku którą kolumnę z TraNag wyświetlać.

Najlepiej to napisać funkcję tabelaryczną z danymi wejściowymi na przykład cdn.trndokmag (trntyp, gidtyp, gidnumer). (może jest gotowa nawet "cdn" chociaż nie sądzę) ale to większa robota żeby ogarnąć wszystko.
--------------------------------
Pozdrawiam
WW

m_pk
Posty: 47
Rejestracja: 20 wrz 2017, 13:39
Rola: Inny
Lokalizacja: ZST
Kontakt:

Re: Magazyn na dokumencie.

Post autor: m_pk »

Witam,

Rozumiem jak najbardziej. TraElem użyje na 100%, bo potrzebuje elementy transakcji. Ogólnie mam coś takiego:

Kod: Zaznacz cały

SELECT 
CDN.NazwaObiektu(Trn_GIDTyp, Trn_GIDNumer, 0,2) AS Dokument,
-- miejsce na magazyn, o którym wspomninam,
TrE_TwrKod AS Kod,
TrE_Ilosc AS Ilosc,
TrE_KsiegowaBrutto AS Brutto
FROM CDN.TraElem
JOIN CDN.TraNag ON
	TrN_GIDNumer=TrE_GIDNumer
WHERE TrN_GIDTyp IN (1616, 1617) AND TrN_Data2 >= DATEDIFF(D, '18001228', GETDATE() - 10)
praiser, masz na myśli , aby utworzyć sobie funkcję, która pobierze magazyn z tabeli CDN.TraSelem - TrS_MagNumer?

Jakieś inne pomysły ? ;)

Awatar użytkownika
praiser
Posty: 685
Rejestracja: 02 lip 2014, 12:22
Rola: Handlowiec CDN XL
Wersja: 2023

Re: Magazyn na dokumencie.

Post autor: praiser »

Chodziło mi o TrasElem w zapytaniu (subelementy) i TrS_MagNumer. (nieprecyzyjnie napisałem)

Jeśli chodzi o funkcję to coś na przyszłość. Można by taką napisać już nie tylko dla magazynu z TranNag ale bardziej uniwersalną (magazyn z dowolnego dokumentu handlowego)
--------------------------------
Pozdrawiam
WW

m_pk
Posty: 47
Rejestracja: 20 wrz 2017, 13:39
Rola: Inny
Lokalizacja: ZST
Kontakt:

Re: Magazyn na dokumencie.

Post autor: m_pk »

Ok, myślałem, że istnieje jakieś miejsce w programie, które to definiuje.
Dzięki za zainteresowanie praiser.
Wrzucam w takim razie funkcję. Może się przyda:

Kod: Zaznacz cały

CREATE FUNCTION [CDN].[SA_MagazynKod] (@Gid int)
RETURNS varchar(10)
AS 
BEGIN 

DECLARE
@Zrd varchar(10) = '',
@Doc varchar(10) = '',
@Magazyn varchar(10) = ''

SELECT @Zrd = Zrd.MAG_Kod, @Doc = Doc.MAG_Kod
FROM CDN.TraNag
LEFT JOIN CDN.Magazyny Zrd
	ON TrN_MagZNumer = Zrd.MAG_GIDNumer
LEFT JOIN CDN.Magazyny Doc
	ON TrN_MagDNumer = Doc.MAG_GIDNumer
WHERE TrN_GIDNumer = @Gid

SELECT @Magazyn = 
STUFF((SELECT DISTINCT
',' + MAG_Kod
FROM CDN.TraSElem
LEFT JOIN CDN.TraNag
	ON TrS_GIDNumer = TrN_GIDNumer
LEFT JOIN CDN.Magazyny
	ON TrS_MagNumer = MAG_GIDNumer
WHERE TrN_GIDNumer = @Gid FOR XML PATH('')),1,1,'')

RETURN COALESCE(@Magazyn,@Zrd, @Doc, '')

END

ODPOWIEDZ