Data wystawienia dokumentu zrodlowego z korekty

Zapytania SQL, widoki, Crystal, definicje filtrów, szybkich raportów, wydruków, API, Hydra, .NET

Moderator: mikey

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

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: elmiq »

No i tak jest ładnie :) CTE jest bardzo fajne i sam pomysł na jego wykorzystanie w tym przypadku jest ciekawy - pewnie nie jedna osoba po przeczytaniu tego wątku się tym zainteresuje. Aczkolwiek i tak bronie swego, że mój najprostszy selekcik, kilka postów wyżej, spełniłby swoją rolę :D
Mateusz Świerkosz

http://elmiq.blogspot.com/

tkozakiewicz
Posty: 16
Rejestracja: 18 mar 2010, 17:58
Rola: Konsultant CDN XL

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: tkozakiewicz »

A ja się zastanawiam jak zapytanie

SELECT trn_data2
FROM CDN.Tranag
WHERE TrN_ZwrTyp = inserted.trn_GIDtyp AND Trn_ZwrNumer = inserted.trn_GIDNumer

Przy założeniu że dodany gidnumer jest np. 1 zwróci pierwotny dokument skoro ZwrNumer w tworzonej korekcie będzie numerem poprzedniej korekty. Wypróbował Pan to ?

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

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: elmiq »

Zwr numer w tworzonej korekcie będzie wskazywał na poprzednią korektę - zgadza się - ale Zwrnumer oryginalnego dokumentu będzie wskazywał na GID tworzonego. Jeżeli będzie tworzona korekta o GiDnumer = 1 to zwrócona zostanie wartość trn_data2 dla rekordu z tranaga dla którego pole trn_zwrnumer = 1. Oczywiście klauzula where zawiera to samo dla typów.
Mateusz Świerkosz

http://elmiq.blogspot.com/

tkozakiewicz
Posty: 16
Rejestracja: 18 mar 2010, 17:58
Rola: Konsultant CDN XL

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: tkozakiewicz »

A w przypadku kiedy to będzie łańcuszek korekt? Tzn. korekta do korekty to już będzie lipa.
"Jeśli do jednej faktury było dokonywanych kilka korekt, znaczniki są wpisywane na zasadzie "łańcuszka": tzn. w oryginale jest GID ostatniej korekty, w pierwszej korekcie GID oryginału, w drugiej korekcie GID pierwszej korekty, itd."

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

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: elmiq »

Ja nie porównuje zwr numeru korekty do gidu faktury, tylko zwr numer faktury do gidu korekty... A ten zawsze wskazuje na ostatnią korektę... A de facto tylko ta nas interesuje w momencie jej wystawiania...
Mateusz Świerkosz

http://elmiq.blogspot.com/

tkozakiewicz
Posty: 16
Rejestracja: 18 mar 2010, 17:58
Rola: Konsultant CDN XL

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: tkozakiewicz »

Faktycznie, w takiej formie najprostsze.

hundzik
Posty: 301
Rejestracja: 11 mar 2008, 19:08
Rola: Administrator CDN XL
Wersja: 9.6.1
Lokalizacja: lubelszczyzna.

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: hundzik »

trigger zrobiony, z uzyciem funkcji z tego calego cte czy jak mu tam.
dziala ladnie.
jak by ktos chcial:

Kod: Zaznacz cały

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER TRIGGER [cdn].[ELK_MK_BlokadaBebnyNaKorektach] ON [CDN].[TraNag] for UPDATE AS 

set nocount on

--część zliczająca dokumenty (w przypadku hurtowego zatwierdzania)
--lub ustawiania znacznika "Koszt księgowy ustalono"

declare Dokumenty cursor local fast_forward read_only for
	select ins.trn_trnseria, ins.trn_gidtyp, ins.trn_gidnumer, ins.trn_stan, del.trn_stan, del.trn_aktywny, ins.trn_data2 from inserted ins
	inner join deleted del on ins.trn_gidnumer = del.trn_gidnumer
	where ins.trn_gidtyp in (2041, 2009) and ins.trn_trnseria like 'E%'

declare @iSeria varchar(5), @iTyp int, @iNumer int, @iStan int, @dStan int, @dSesja int, @iData int;
declare @Operator varchar(50);

open Dokumenty
fetch next from Dokumenty into @iSeria, @iTyp, @iNumer, @iStan, @dStan, @dSesja, @iData

while @@fetch_status = 0
begin

--koniec części zliczającej
--początek procedury właściwej

if (@iStan > 2 and @dStan < 3 and @iTyp in (2041, 2009))

	begin

	--sprawdzam czy na korekcie nie wystepuje towar z grupy bebny 

		if not exists(SELECT * FROM CDN.TraElem WHERE (TrE_GIDNumer = @iNumer) AND (TrE_TwrNumer IN (SELECT TwL_GIDNumer FROM CDN.TwrLinki WHERE (TwL_GIDTyp = 16) AND (TwL_GrONumer = '11'))))
		goto tu


		select @Operator = ses_opeident from cdn.sesje where ses_sesjaid = @dSesja

		--Sprawdzam czy operator ma prawo do zatwierdzania

	
		if exists(SELECT CDN.Atrybuty.Atr_Wartosc, CDN.OpeKarty.Ope_Ident
			FROM   CDN.Atrybuty INNER JOIN
				   CDN.OpeKarty ON CDN.Atrybuty.Atr_ObiNumer = CDN.OpeKarty.Ope_GIDNumer AND CDN.Atrybuty.Atr_ObiLp = CDN.OpeKarty.Ope_GIDLp AND 
                   CDN.Atrybuty.Atr_ObiTyp = CDN.OpeKarty.Ope_GIDTyp
			WHERE  (CDN.Atrybuty.Atr_AtkId = 86) AND (CDN.OpeKarty.Ope_Ident = @Operator) AND (CDN.Atrybuty.Atr_Wartosc = 'TAK'))
		goto tu

	
			BEGIN
				DECLARE @data datetime,
						@data_org datetime,
						@liczba_dni int
				
				BEGIN

				-- SELECT @data=CDN.TsToDate(TrN_Data2,0),@GidKorekty= TrN_GidNumer FROM inserted
				-- SELECT @data2=CDN.ELK_MK_PobierzOryginal(@GidKorekty) 

					set @data=CDN.TsToDate(@iData,0)--,@GidKorekty= TrN_GidNumer FROM inserted
					set @data_org=CDN.ELK_MK_PobierzOryginal(@iNumer) 

					SELECT @liczba_dni = MAX(Atr_Wartosc) FROM CDN.Atrybuty WHERE (Atr_AtkId = 62)

					if @data>DateAdd(dd,@liczba_dni,@data_org)
		
					BEGIN 
						declare @sLiczbaDni varchar(5)
						set @sLiczbaDni = cast(@liczba_dni as varchar(5))

						RAISERROR('#CDN_BLAD/# #CDN_1=Od wystawienia dokumentu pierwotnego upłynął zbyt długi okres czasu. Maksymalny okres zwrotu bębnów to %s dni!/#', 16, 1, @sLiczbaDni)
		
						SET NOCOUNT ON
						RETURN
					END
				END
			END

	tu:
	end
--koniec procedury właściwej

--ciąg dalszy części zliczającej
fetch next from Dokumenty into @iSeria, @iTyp, @iNumer, @iStan, @dStan, @dSesja, @iData
end
close Dokumenty
deallocate dokumenty
--koniec
opytmalizowac nie optymalizowalem - i wyglada na to ze dziala.
termin bierze z konkretnego atrybutu, uprawnienia z innego atrybutu itd

tkozakiewicz
Posty: 16
Rejestracja: 18 mar 2010, 17:58
Rola: Konsultant CDN XL

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: tkozakiewicz »

Podane rozwiązanie przez elmiq jest najbardziej optymalne - lepiej użyć selecta niż funkcji którą podałem.

ODPOWIEDZ