Trigger blokujący wystawianie FS z marżą mniejszą niż 8%

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, obiekty COM .NET

Moderator: mikey

Slav
Posty: 2
Rejestracja: 13 lut 2017, 14:22
Rola: Administrator CDN XL
Wersja: 2016

Trigger blokujący wystawianie FS z marżą mniejszą niż 8%

Post autor: Slav »

Witam,
Musze napisać triggera, który uniemożliwi wystawianie faktury sprzedaży w której conajmniej na jednej pozycji w RKZ jest towar w którym marża jest mniejsza niż 8%.
Doszedłem do tego (choć mogę się mylić), że pola marży nie ma w tabelach SQL i to pole jest obliczane. Wyglądałoby to tak:

Kod: Zaznacz cały

[(TRE_KsiegowaNetto / TRE_KosztKsiegowy) * 100 - 100]
Jak to wrzucić do zapytania triggerowego i czy dodawanie do triggera obliczeń jest dobrą praktyką i nie spowoduje zamulenia bazy danych?

Michał Koźlik
Posty: 12
Rejestracja: 17 paź 2014, 08:27
Rola: Administrator CDN XL
Wersja: 2013.2

Re: Trigger blokujący wystawianie FS z marżą mniejszą niż 8%

Post autor: Michał Koźlik »

Cześć, ja zrobiłem to tak:

Kod: Zaznacz cały

	if update(TrN_Bufor)
		if exists(
			select 
				tre.TrE_TrNId,
				tre.TrE_TypDokumentu,
				isnull(cast(((sum(tre.TrE_WartoscNetto)-sum(tre.TrE_WartoscZakupu))/nullif(sum(tre.TrE_WartoscNetto),0))*100 as decimal(15,2)),0) as Marza
			from
				inserted trn
				left join CDN.TraElem tre
				on tre.TrE_TrNId=trn.TrN_TrNID
				and tre.TrE_TypDokumentu=trn.TrN_TypDokumentu
			where
				trn.TrN_Bufor=0
				and trn.TrN_TypDokumentu=302
			group by
				tre.TrE_TrNId,
				tre.TrE_TypDokumentu
			having isnull(cast(((sum(tre.TrE_WartoscNetto)-sum(tre.TrE_WartoscZakupu))/nullif(sum(tre.TrE_WartoscNetto),0))*100 as decimal(15,2)),0)<8)
		BEGIN
			RAISERROR('Nie posiadasz uprawnień do zatwierdzenia dokumentu z marżą poniżej 8 procent.', 16, 1)
			ROLLBACK TRAN
			SET NOCOUNT OFF
			RETURN
		END
Spróbuj, do tego mam jeszcze warunek określający operatorów którzy mogą wystawiać takie dokumenty.

ODPOWIEDZ