Autor Wątek: adr_Historia  (Przeczytany 6356 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline micha

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1028
  • Reputacja +9/-0
  • Wersja programu: Sub+Rew GT [najnowsze]
adr_Historia
« dnia: Grudzień 11, 2018, 12:48:33 »
Jak mogę znaleźć rekord w adr_Historia zawierający adres dostawy taki jaki był w chwili wystawienia faktury, a nie taki jaki kontrahent ma teraz?

Jeśli dok_AdresDostawyAdreshId jest niepuste, to po prostu biorę to pole i jest ok, ale jeśli jest tam null, to...? Subiekt skądś tą informację bierze, bo na wydruku faktury jest adres dostawy historyczny, a nie bieżący - ale jakoś nie mogę dostrzec powiązania w bazie... :-(

Mogę wziąć pole dok_OdbiorcaAdreshId, ale zawiera ono adres podstawowy, a nie dostawy. Oczywiście na ogół oba te adresy są takie same, ale ja nie chcę, żeby kod dawał dobry wynik tylko "na ogół"... :-)

Offline micha

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1028
  • Reputacja +9/-0
  • Wersja programu: Sub+Rew GT [najnowsze]
Odp: adr_Historia
« Odpowiedź #1 dnia: Grudzień 18, 2018, 13:51:11 »
Dla potomności:

ALTER FUNCTION dbo.micha_StaryAdresDostawy(@old_hid int)
RETURNS INT
AS
BEGIN
-- Argumentem jest id historycznegio adresu głównego.
-- Zwraca id historycznego adresu dostawy, odpowiadający podanemu adresowi głównemu,
-- lub NULL jeśli wtedy nie było osobnego adresu dostawy.
RETURN (SELECT TOP 1 CASE WHEN LEN(adrh_Adres)=0 AND LEN(adrh_Nazwa)=0 THEN NULL ELSE adrh_Id END
FROM adr__Ewid
INNER JOIN adr_Historia ON adr__Ewid.adr_Id = adr_Historia.adrh_IdAdresu
WHERE (adr_Historia.adrh_IdWersja =
(SELECT adrh_IdWersja FROM adr_Historia WHERE (adrh_Id = @old_hid)))
AND (adr__Ewid.adr_IdObiektu =
(SELECT adr_IdObiektu FROM adr__Ewid WHERE
(adr_Id = (SELECT adrh_IdAdresu FROM adr_Historia WHERE (adrh_Id = @old_hid)))))
AND (adr__Ewid.adr_TypAdresu = 11)
ORDER BY adrh_Id DESC
)
END

Forum Użytkownikow Subiekt GT

Odp: adr_Historia
« Odpowiedź #1 dnia: Grudzień 18, 2018, 13:51:11 »