Dodanie kolumny PW do tabeli z dokumentami RW

Problemy i pomysły związane z funkcjonowaniem modułu Księgowość

Moderator: mikey

Onek
Posty: 27
Rejestracja: 25 maja 2020, 10:14
Rola: Użytkownik CDN XL
Wersja: 2019

Dodanie kolumny PW do tabeli z dokumentami RW

Post autor: Onek »

Witam,
Mam pytanie, potrzebuję dodać do widoku Dokumenty - RW kolumnę z powiązanymi PW.
Powiązanie jest na poziomie zlecenie produkcyjnego.
Napisałem kod, który wypluwa mi wszystkie dokumenty RW i PW do danego zlecenia, mam tylko problem w jaki sposób dodać same dokumenty PW jako nową kolumnę przy RW.

Kod: Zaznacz cały

SELECT PZA_PZLId,
cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) as 'Dokument'
FROM CDN.ProdZlecenia
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
Może miał ktoś podobne zagadnienie i jest w stanie mnie naprowadzić.

elmiq
Posty: 1025
Rejestracja: 23 sie 2010, 10:04
Rola: Administrator CDN XL
Lokalizacja: Warszawa

Re: Dodanie kolumny PW do tabeli z dokumentami RW

Post autor: elmiq »

Sugeruje opakować to w funkcję skalarną i w niej zrealizować sklejanie pól tekstowych. Tutaj opcji jest dużo, najpopularniejsze rozwiązania to COALESCE, bądź FOR XML PATH.

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

Onek
Posty: 27
Rejestracja: 25 maja 2020, 10:14
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Dodanie kolumny PW do tabeli z dokumentami RW

Post autor: Onek »

Próbuje z :

Kod: Zaznacz cały

SELECT [PZA_PZLId], numer = STUFF((
SELECT N', ' + cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) FROM CDN.ProdZlecenia
 WHERE [PZA_PZLId] = [PZA_PZLId]
FOR XML PATH(''), TYPE).value(N'.[1]', N'nvarchar(max)'), 1, 2, N'')
FROM CDN.ProdZlecenia as x
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = x.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
order by PZA_PZLId 
Niestety wynik nie pokazuje tylko jednej linii dla danego id zlecenia. Zaczyna brakować mi pomysłów.
Plus przy dodawaniu kolumny chciałem użyć opcji {filtrSQL} odnosząc się do zapytania

Kod: Zaznacz cały

SELECT PZA_PZLId,
cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) as 'Dokument'
FROM CDN.ProdZlecenia
INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
Niestety w takim wypadku filtrSQL na poziomie dokumentu RW zwarca TrN_TrNTyp = 5.

Proszę o poradę czy podchodzę do tematu od dobrej strony.

Pozdrawiam,
Szymon

taszek
Posty: 585
Rejestracja: 12 wrz 2012, 13:20
Rola: Administrator CDN XL
Wersja: 2016

Re: Dodanie kolumny PW do tabeli z dokumentami RW

Post autor: taszek »

Funkcja skalarna:

Kod: Zaznacz cały

CREATE FUNCTION [CDN].[ListaPW]
(
	-- Add the parameters for the function here
	@GIDNumer INT = 0
   ,@GIDTyp INT = 0
)
RETURNS VARCHAR(MAX)
AS
BEGIN
	
	-- Declare the return variable here
	DECLARE @ListaPW VARCHAR(MAX), @PZL_Id INT

	SELECT @PZL_Id = (SELECT PZL_Id FROM CDN.ProdZlecenia
				INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
				INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
				INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
				INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
				INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
				WHERE TrN_GIDTyp = @GIDTyp AND TrN_GIDNumer = @GIDNumer
				GROUP BY PZL_Id)
	
	SELECT @ListaPW = CAST((
				SELECT cdn.NumerDokumentu (trn_gidtyp, trn_spityp, trn_trntyp, trn_trnnumer, trn_trnrok, trn_trnseria, trn_trnmiesiac) + ';' 
				FROM CDN.ProdZlecenia
				INNER JOIN CDN.ProdProcesy ON CDN.ProdProcesy.PPC_Zlecenie = CDN.ProdZlecenia.PZL_Id
				INNER JOIN CDN.ProdCzynnosci ON PCZ_Proces = PPC_Id
				INNER JOIN CDN.ProdZasoby ON PZA_Czynnosc = PCZ_Id
				INNER JOIN CDN.TraSElem ON CDN.ProdZasoby.PZA_Id = CDN.TraSElem.TrS_ZlcNumer AND TrS_ZlcTyp = 14346 
				INNER JOIN CDN.TraNag ON CDN.TraSElem.TrS_GIDNumer = CDN.TraNag.TrN_GIDNumer
				WHERE PZL_Id= @PZL_Id AND TrN_GIDTyp = 1617 
				
				FOR XML PATH (''), ELEMENTS) AS NVARCHAR(MAX)) 

	-- Return the result of the function
	RETURN @ListaPW
END
GO
Dodatkowa kolumna na liście RW:

Kod: Zaznacz cały

SELECT CDN.ListaPW(TrN_GIDNumer,TrN_GIDTyp) [Lista PW]
 FROM CDN.TraNag WHERE {FiltrSQL}
Pozdrawiam
Wojtek Cyrklewicz

Onek
Posty: 27
Rejestracja: 25 maja 2020, 10:14
Rola: Użytkownik CDN XL
Wersja: 2019

Re: Dodanie kolumny PW do tabeli z dokumentami RW

Post autor: Onek »

Działa, wielkie dzięki za pomoc!

ODPOWIEDZ