Skocz do zawartości

Szczegółowe dane osoby zamawiającej

Polecane posty

Mam dokument ZK, w który został wybrany przedstawiciel firmy, która u nas zamówiła. W zależności od zawartości pola Oryginał, jego imię i nazwisko, pojawia się w polach Wystawil lub Odebral, w tablicy Dokumenty. Ja jednak, chciałbym się dowiedzieć, jaki jest jego adres email - czyli pobrać te dane z tablicy PodmiotHistorie. Dokumentacja wskazuje, że wynikało by to z pola OdebralOsobaId / WystawilOsobaId, ale te pola, mają tylko wartości, jeśli dana Osoba, jest naszym pracownikiem - zresztą w ten sposób identyfikuję, osobę wprowadzająca zamówienie, która się zamienia, co już wcześniej wspomniałem:

 

Cytat

IIF(zk.OdebralaOsobaId IS NULL,zk.WystawilaOsobaId,zk.OdebralaOsobaId)

 

W jaki więc sposób, mógłby się dokopać do danych przedstawiciela klienta, poza ewentualnym szukaniem po tekście i identyfikatorze nadrzędnego podmiotu?

Edytowane przez Radomił Ząbik
Link to postu

No to może chociaż wskażecie lepszą drogę, bo na tą chwilę wyszło mi masakryczne (także wydajnościowo) połączenie:

 

Dokumenty.PodmiotId = Podmioty.Id

Podmioty.Id = Firmy.Firma_Podmiot_Id

Przedstawiciele.Firma_Id = Firma.Id

Osoba.Id = Przedstawiciele.Osoba_Id

PodmiotHistorie.PodmiotDlaKtoregoNajnowsza_Id = Osoba.Podmiot_Id AND PodmiotHistorie.NazwaSkrocona = Dokumenty.Wystawil

 

... aby uzyskać PodmiotHistorie.Email na liście :(

 

Link to postu

Nie ma takiego powiązania w bazie, więc jedyny sposób to faktycznie poszukiwania takiego przedstawiciela firmy. Przykładowy widok dla zamówień od klienta z dołożoną kolumną email, bo, jak rozumiem, robimy raport własny SQL:

SELECT 
	_Dokument.BlokujRealizacje AS Blokada, 
	_Dokument.DataWydaniaWystawienia AS DataOryginalu, 
	_DokumentyRealizujace.OstatniaData AS DataOstatniejRealizacji, 
	_Dokument.DataWprowadzenia AS DataWystawienia, 
	_FlagaWlasna.Kolor  AS FLAG__Dokument__FlagaWlasna__Kolor, 
	ISNULL(_FlagaWlasna.Ksztalt, 0) AS FLAG__Dokument__FlagaWlasna__Ksztalt, 
	_FlagaWlasna.Nazwa AS FLAG__Dokument__FlagaWlasna__Nazwa, 
	_FlagHeader.Description AS FLAG__Dokument__FlagHeader__Description, 
	_Dokument.Id AS Id, 
	ISNULL(CASE WHEN _Dokument.MiejsceDostawyTyp = 64 THEN _MiejsceDostawy.LiniaCalosc ELSE _MiejsceDostawyZewnetrzne.LiniaCalosc END, '') AS MiejsceDostawy, 
	_Dokument.NumerWewnetrzny_PelnaSygnatura AS Numer, 
	_Dokument.NumerZewnetrzny AS NumerOryginalu, 
	_Dokument.NumerWewnetrzny_Numer AS NumerSort, 
	CASE WHEN _WymaganaWplata.Termin IS NOT NULL AND _Dokument.BlokujRealizacje = 1 THEN DATEDIFF(day, GETDATE(), _WymaganaWplata.Termin) ELSE NULL END AS PozostaloDniDoWplaty, 
	CAST(CASE WHEN _Przetworzenie.Wartosc >= 100.0 THEN 2 WHEN _Przetworzenie.Wartosc > 0.0 THEN 3 ELSE 1 END AS tinyint) AS PrzetworzoneNaZD, 
	ISNULL(_StanRealizacjiZamowienia.CzyRealizacjaDOZaliczkowej, cast(0 as bit)) AS RealizacjaDoFL, 
	CASE WHEN _WartoscDokumentu.Wartosc = 0 THEN '' ELSE _StanRealizacjiZamowienia.NumeryDokumentowRealizujacych END AS RealizacjePozycji, 
	_StatusDokumentu.Mnemonik AS Status, 
	_StatusDokumentu.Nazwa AS StatusDokumentuToolTip, 
	_StanRealizacjiZamowienia.StanKompletacji AS StatusKompletacji, 
	_Dokument.StatusPlatnosciTerminalowej AS StatusPlatnosciTerminalowych, 
	ISNULL(_StanRealizacji.Stan, cast(0 as decimal)) AS StatusRealizacji, 
	_Dokument.NumerWewnetrzny_SygnaturaPoNr AS SygnaturaNrPo, 
	_Dokument.NumerWewnetrzny_SygnaturaPrzedNr AS SygnaturaNrPrzed, 
	_Dokument.TerminRealizacji AS TerminRealizacji, 
	_Waluta.Symbol AS Waluta, 
	_Waluta.Precyzja AS WalutaPrecyzja, 
	_Dokument.KwotaDoZaplaty AS Wartosc, 
	_PodmiotWybrany.NazwaSkrocona AS Zamawiajacy, 
	_Dokument.Odebral AS ZamowienieOdebral, 
	_Dokument.Wystawil AS ZamowienieWystawil,
	(SELECT top 1 ModelDanychContainer.PodmiotHistorie.Email
		FROM ModelDanychContainer.Podmioty INNER JOIN
			ModelDanychContainer.PodmiotHistorie ON ModelDanychContainer.Podmioty.Id = ModelDanychContainer.PodmiotHistorie.PodmiotDlaKtoregoNajnowsza_Id INNER JOIN
			ModelDanychContainer.Osoby ON ModelDanychContainer.Podmioty.Id = ModelDanychContainer.Osoby.Podmiot_Id INNER JOIN
			ModelDanychContainer.Przedstawiciele ON ModelDanychContainer.Osoby.Id = ModelDanychContainer.Przedstawiciele.Osoba_Id INNER JOIN
			ModelDanychContainer.Podmioty AS PodmiotFirma ON ModelDanychContainer.Podmioty.Id = PodmiotFirma.Id
		WHERE PodmiotFirma.Id = _Dokument.PodmiotId AND 
		 ModelDanychContainer.Podmioty.NazwaSkrocona = CASE WHEN _Dokument.NumerZewnetrzny='' THEN _Dokument.Odebral ELSE _Dokument.Wystawil END) AS Email
FROM [ModelDanychContainer].[Dokumenty] _Dokument
	LEFT JOIN (SELECT _DD.DokumentyRealizowane_Id AS Id, MAX(_D.DataWprowadzenia) AS OstatniaData FROM [ModelDanychContainer].[DokumentDokument] _DD INNER JOIN [ModelDanychContainer].[Dokumenty] _D ON _DD.DokumentyRealizujace_Id = _D.Id AND (_D.__MdmDiscriminator__ = 'DokumentWZ' OR _D.__MdmDiscriminator__ = 'DokumentDS') GROUP BY _DD.DokumentyRealizowane_Id) AS _DokumentyRealizujace ON _DokumentyRealizujace.Id = _Dokument.Id
	INNER JOIN [ModelDanychContainer].[StanyRealizacjiZamowien] _StanRealizacjiZamowienia ON _StanRealizacjiZamowienia.DokumentZK_Id = _Dokument.Id
	OUTER APPLY (SELECT _Dokument.Wartosc_BruttoPoRabacie + _Dokument.WartoscNPONettoPoRabacie AS Wartosc) AS _WartoscDokumentu
	OUTER APPLY (SELECT (CASE WHEN _WartoscDokumentu.Wartosc = 0 THEN 0 ELSE ISNULL(_StanRealizacjiZamowienia.ProcentowyStanRealizacji, cast(0 as decimal)) END) AS Stan) AS _StanRealizacji
	INNER JOIN [ModelDanychContainer].[StatusyDokumentow] _StatusDokumentu ON _StatusDokumentu.Id = _Dokument.StatusDokumentuId
	INNER JOIN [ModelDanychContainer].[Waluty] _Waluta ON _Waluta.Id = _Dokument.Dokument_Waluta_Id
	LEFT JOIN [ModelDanychContainer].[PodmiotHistorie] _PodmiotWybrany ON _PodmiotWybrany.Id = _Dokument.PodmiotWybranyId
	LEFT JOIN [ModelDanychContainer].[AdresHistorie] _MiejsceDostawy ON _MiejsceDostawy.Id = _Dokument.MiejsceDostawyId
	LEFT JOIN [ModelDanychContainer].[AdresHistorie] _MiejsceDostawyZewnetrzne ON _MiejsceDostawyZewnetrzne.Id = _Dokument.MiejsceDostawyZewnetrzneId
	LEFT JOIN [ModelDanychContainer].[WymaganeWplaty] _WymaganaWplata ON _WymaganaWplata.Id = _Dokument.Id
	LEFT JOIN 
                                                    (SELECT
                _P.Dokument_Id AS DokId,
                SUM(CASE WHEN _PR.Istnieje = 1 AND _PR.TypRealizacjiPozycji = 0 AND _PR.TypDokumentuRealizujacego = 2 THEN _PR.Ilosc ELSE 0 END) AS Przetworzenie
             FROM [ModelDanychContainer].[RealizacjePozycji] _PR
                INNER JOIN [ModelDanychContainer].[PozycjeDokumentu] _P ON _PR.PozycjaRealizowanaId = _P.Id AND _PR.TypDokumentuRealizowanego = 1
                INNER JOIN [ModelDanychContainer].[JednostkiMiarAsortymentow] _JMA ON _P.JednostkaMiaryAsId = _JMA.Id
             GROUP BY _P.Dokument_Id) _PozycjeZD ON _PozycjeZD.DokId = _Dokument.Id
	LEFT JOIN (SELECT _Dokument.Id AS DokumentId, SUM(_Pozycje.IloscWJednostceBazowej) AS Ilosc, MAX(_JMA.Precyzja) AS MaxPrecyzja FROM [ModelDanychContainer].[Dokumenty] _Dokument
                                                                    INNER JOIN [ModelDanychContainer].[PozycjeDokumentu] _Pozycje ON _Pozycje.Dokument_Id = _Dokument.Id AND _Dokument.__MdmDiscriminator__ = 'DokumentZK' AND _Dokument.Zamkniety = 0 AND _Dokument.KonfiguracjaId <> '7dfedb6a-8a2e-49c6-b28f-507159208c6a'
                                                                    INNER JOIN [ModelDanychContainer].[JednostkiMiarAsortymentow] _JMA ON _JMA.Id = _Pozycje.JednostkaMiaryAsId
                                                                    GROUP BY _Dokument.Id) AS _Pozycje ON _Pozycje.DokumentId = _Dokument.Id
	LEFT JOIN [ModelDanychContainer].[FlagiWlasne] _FlagaWlasna ON _Dokument.Dokument_FlagaWlasna_Id = _FlagaWlasna.Id
	LEFT JOIN [ModelDanychContainer].[FlagHeaders] _FlagHeader ON _Dokument.Dokument_FlagHeader_Id = _FlagHeader.Id
	OUTER APPLY (SELECT CASE WHEN _Pozycje.Ilosc = 0 THEN 0 ELSE (_PozycjeZD.Przetworzenie / _Pozycje.Ilosc) * 100.0 END AS Wartosc) AS _Przetworzenie 
WHERE 
	(_Dokument.__MdmDiscriminator__ = 'DokumentZK') AND 
	(_Dokument.Zamkniety = 0) AND 
	(_Dokument.KonfiguracjaId <> '7dfedb6a-8a2e-49c6-b28f-507159208c6a')

 

Link to postu
×
×
  • Dodaj nową pozycję...