Data wystawienia dokumentu zrodlowego z korekty
Moderator: mikey
Re: Data wystawienia dokumentu zrodlowego z korekty
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ę 
-
tkozakiewicz
- Posty: 16
- Rejestracja: 18 mar 2010, 17:58
- Rola: Konsultant CDN XL
Re: Data wystawienia dokumentu zrodlowego z korekty
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 ?
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 ?
Re: Data wystawienia dokumentu zrodlowego z korekty
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.
-
tkozakiewicz
- Posty: 16
- Rejestracja: 18 mar 2010, 17:58
- Rola: Konsultant CDN XL
Re: Data wystawienia dokumentu zrodlowego z korekty
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."
"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."
Re: Data wystawienia dokumentu zrodlowego z korekty
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...
-
tkozakiewicz
- Posty: 16
- Rejestracja: 18 mar 2010, 17:58
- Rola: Konsultant CDN XL
Re: Data wystawienia dokumentu zrodlowego z korekty
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
trigger zrobiony, z uzyciem funkcji z tego calego cte czy jak mu tam.
dziala ladnie.
jak by ktos chcial:
opytmalizowac nie optymalizowalem - i wyglada na to ze dziala.
termin bierze z konkretnego atrybutu, uprawnienia z innego atrybutu itd
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
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
Podane rozwiązanie przez elmiq jest najbardziej optymalne - lepiej użyć selecta niż funkcji którą podałem.