Strona 1 z 1

Magazyn na dokumencie.

: 22 kwie 2023, 13:15
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ł

Re: Magazyn na dokumencie.

: 23 kwie 2023, 11:05
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.

Re: Magazyn na dokumencie.

: 23 kwie 2023, 21:16
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 ? ;)

Re: Magazyn na dokumencie.

: 24 kwie 2023, 07:27
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)

Re: Magazyn na dokumencie.

: 24 kwie 2023, 09:45
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