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ł
Magazyn na dokumencie.
Moderator: mikey
Re: Magazyn na dokumencie.
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.
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
Pozdrawiam
WW
Re: Magazyn na dokumencie.
Witam,
Rozumiem jak najbardziej. TraElem użyje na 100%, bo potrzebuje elementy transakcji. Ogólnie mam coś takiego:
praiser, masz na myśli , aby utworzyć sobie funkcję, która pobierze magazyn z tabeli CDN.TraSelem - TrS_MagNumer?
Jakieś inne pomysły ?
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)
Jakieś inne pomysły ?
Re: Magazyn na dokumencie.
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)
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
Pozdrawiam
WW
Re: Magazyn na dokumencie.
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:
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