Data wystawienia dokumentu zrodlowego z korekty

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

Moderator: mikey

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

Data wystawienia dokumentu zrodlowego z korekty

Post autor: hundzik »

Witam,
siedze z jednym tematem - i zatrzymalem sie w kwestii okreslenia daty dokumentu oryginalnego w przypadku korekty.
Przy jednej korekcie wiadomo - luz - ale jak to rozwiazac jesli do danego dokumentu bylo pare korekt? albo byla korekta do korekty?
A znowu z poziomu korekty musze wiedziec kiedy dokladnie dana WZ czy FS byla wystawiona.

jest ktos w stanie pomoc? ;)

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 »

W Polsce nie ma czegoś takiego jak korekta korekty - i tym samym nie ma tego w Xl-u. Można mieć kilka korekt, ale działa to w ten sposób, że oryginał wskazuje na ostatnią korektę, a ostatnia korekta na korektę wcześniejszą itd. - o ile dobrze pamiętam - XL bez klucza włączyć nie mogę, a że już nie pracuje w firmie partnerskiej to i klucza serwisowego nie ma :) W każdym razie datą dokumentu źródłowego winna być data faktury Vat - czyli dokumentu który cały czas korygujesz. A czy go korygujesz 10 razy, czy też raz nie ma znaczenia - to on jest dokumentem bazowym.
Mateusz Świerkosz

http://elmiq.blogspot.com/

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 »

w Polsce nie ma a w cdn jest - a przynajmniej w samym mechanizmie zapisywania korekt :) - dokladnie tak jak opisales ;D
w tabeli tranag nie do szukalem sie nic wiecej poza gidami dokumentu korygowanego - co niestety przy kolejnych korektach pokazuje poprzednia korekte. natomiast nie znalazlem nigdzie daty dokumentu poczatkowego. takze lipa.

aha - jak by ktos mial rozwiazanie nawet jako oddzielna funkcje w ktorej petla sie jakas wykonuje - to tez chetnie przyjme ;)

konkretnie napisze mi o co chodzi.

mamy w obrocie pewien rodzaj towaru ktory ma klient prawo zwrocic do okreslonego czasu od sprzedazy (tak wiem - sa kaucje - sila wyzsza powoduje ze ich nie uzywamy) - jednak w interesie firmy ten zwrot moze nastapic tylko do okreslonej daty od dnia sprzedazy. Po tym czasie nie chcemy tego przyjmowac, bo sami oddajac to dalej ponosimy koszty karne. I chodzi o to ze musze zablokowac mozliwosc zatwierdzania takowych korekt. Oczywiscie dla wiekszosci operatorow. No a aby to osiagnac - musze miec jakies bezposrednie odniesienie do dokumentu poczatkowego - w kazdym mozliwym przypadku ;)

Smallsoso
Posty: 131
Rejestracja: 25 wrz 2008, 13:31
Rola: Inny
Wersja: 9.5

Re: Data wystawienia dokumentu zrodlowego z korekty

Post autor: Smallsoso »

U siebie też miałem z tym problem - zamęczanie bazy przy próbie dojścia do dokumentu źródłowego dla korekt. Darowałem sobie klepanie funkcji, etc - przy nich baza dalej byłaby obciążona.
Założyłem tabelę wiążącą dokument korekty z numerem dokumentu pierwotnego, zasiliłem, a następnie na cdn.TraNag założyłem trigger aktualizujący tę tabelę pomocniczą.
Teraz w swoich zapytaniach jednym JOIN łączę korektę z dokumentem pierwotnym... Polecam takie rozwiązanie - szybkie i odciążające bazę...
Pozdrawiam,
Marcin
---------------------------------------------------------------------------------
Tako rzecze dokumentacja tabel CDN XL 7.1
TwrZasoby TwZ_DataP INTEGER Data przyjęcia towaru na magazyn Potrzebne przy podróżach w czasie.

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 »

Samo dojście do dokumentu źródłowego to nie jest jakieś duże obciążenie. Żeby zrobić to co potrzebujesz możesz np. zrobić trigger, który dla inserted o GIDtypie 2041, będzie za pomocą pętli przesuwał się "w górę" dopóki nie natrafi na GIDTyp 2033. Tak naprawdę pewnie nie masz więcej niż 5 korekt do dokumentu, a taka pętla będzie praktycznie niezauważalna względem wydajności - w końcu wykona się tylko wtedy jak będziesz robić korektę do FS. W takim przypadku osiągniesz to co chciałeś, a sam trigger będzie mało skomplikowany - mając FS i 4 korekty w momencie tworzenia czwartej pobierzesz z niej trn_zwrtyp i trn_zwrnumer i zapętlisz dopóki nie natrafisz na trn_zwrtyp = 2033. Wtedy wyciągniesz datę i po kłopocie. Oczywiście możesz też stworzyć tabelę, aczkolwiek zadbaj o jakiś indeks, który po jej wypełnieniu zadba o wydajność zapytań na niej. Sam Gidnumer FS początkowego dla wstawianej korekty tak czy tak musisz znaleźć i nie ma tu mowy o odciążaniu bazy - i jedno i drugie troszeczkę ją dociąży :)
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 »

Oto rozwiązanie z nowym mecanizmem CTE :

declare @gid_korekty int
set @gid_korekty=
;WITH CTE_DatesTable
AS
(
SELECT TrN_GidTyp,TrN_GidNumer,TrN_ZwrNumer as TrN_ZwrNumer from cdn.tranag
WHERE TrN_GidNumer=@gid_korekty
UNION ALL
SELECT A.TrN_GidTyp,A.TrN_GidNumer,A.TrN_ZwrNumer
FROM CDN.TraNag A
JOIN CTE_DatesTable B ON B.TrN_ZwrNumer=A.TrN_GidNumer and A.TrN_GidNumer<>@gid_korekty


)
SELECT TrN_GidTyp,TrN_GidNumer,TrN_ZwrNumer FROM CTE_DatesTable WHERE TrN_GidTyp=2033
OPTION (MAXRECURSION 0);


I nic nie zamula

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 »

Każdy select to obciążenie, więc nie tak całkiem nic nie zamula i czy CTE jest takie nowe to bym się sprzeczał... Ale rzeczywiście, jakoś źle pomyślałem pisząc poprzedni post, bo przecież jeżeli założysz wyzwalacz na Tranag to w momencie tworzenia korekty, możesz po prostu zwrócić datę dokumentu oryginalnego poprzez prosty select -

Kod: Zaznacz cały

SELECT trn_data2
FROM CDN.Tranag 
WHERE TrN_ZwrTyp = inserted.trn_GIDtyp AND Trn_ZwrNumer = inserted.trn_GIDNumer 
Porównasz ją z datą obecną i ROLLBACK TRAN bądź nie :P

W sumie nie wiem czemu tak proponowałem z tą pętlą, może za mało snu a za dużo komputera :)
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 »

CTE jest od 2005 mssql. A wyzwalacz też "zamula" i to bardziej, bo na moment serwer SQL wymusza blokadę tabeli przed uruchomieniem procedur wywołania. Po za tym w moim rozwiązaniu można zwrócić wszystkie korekty do danej faktury wystarczy wyciąć warunek TrN_GidTyp=2033. W dodatku w Pańskim rozwiązaniu zwrócona będzie tylko wartość poprzednio korygowanego dokumentu a nie oryginalnego. Poniżej gotowa funkcja :

CREATE FUNCTION CDN.Usr_PobierzOryginal(@GidKorekty int)
RETURNS Datetime
AS
BEGIN
DECLARE @Data Datetime
;WITH CTE_DatesTable
AS
(
SELECT TrN_Data2,TrN_GidTyp,TrN_GidNumer,TrN_ZwrNumer as TrN_ZwrNumer from cdn.tranag
WHERE TrN_GidNumer=@GidKorekty
UNION ALL
SELECT A.TrN_Data2,A.TrN_GidTyp,A.TrN_GidNumer,A.TrN_ZwrNumer
FROM CDN.TraNag A
JOIN CTE_DatesTable B ON B.TrN_ZwrNumer=A.TrN_GidNumer and A.TrN_GidNumer<>@GidKorekty


)
SELECT @Data=CDN.TsToDate(TrN_Data2,0) FROM CTE_DatesTable WHERE TrN_GidTyp=2033
OPTION (MAXRECURSION 0);
RETURN @Data
END

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 »

Rozumiem, że ta funkcja,podobnie jak trigger podniesie podczas dodawania korekty w XL okno komunikatu i cofnie transakcje w przypadku gdy data będzie zbyt odległa ?

FS + 4 korekty:

2033 336350 1 0 2041 336350 6
2041 336350 3 0 2033 336350 1
2041 336350 4 0 2041 336350 3
2041 336350 5 0 2041 336350 4
2041 336350 6 0 2041 336350 5


Pierwsze 3 kolumny GID-y, ostatnie 3 Zwr-y.

Gidy ostatniej korekty, są zarazem zwr numerami początkowej faktury, więc nie wiem skąd pomysł, że zwróci datę dla ostatniej korekty.
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 »

Jeśli transakcja miałaby być cofnięta to rzeczywiście przez trigger , więc funkcję możemy np. tak wykorzystać :

CREATE TRIGGER CDN.CheckDateFSK
ON CDN.TraNag
AFTER UPDATE
AS
BEGIN
DECLARE @data datetime
DECLARE @data2 datetime
DECLARE @GidKorekty int
if update(Trn_Stan)
Begin
SELECT @data=CDN.TsToDate(TrN_Data2,0),@GidKorekty= TrN_GidNumer FROM inserted
SELECT @data2=CDN.Usr_PobierzOryginal(@GidKorekty)


if @data>DateAdd(dd,40,@data2)
BEGIN

RAISERROR('#CDN_BLAD/# #CDN_1=Od wystawienia dokumentu pierowtnego upłynął zbyt długi okres czasu', 16, 1)
SET NOCOUNT ON
RETURN
END

END
end
END

END
Ostatnio zmieniony 31 sie 2010, 16:18 przez tkozakiewicz, łącznie zmieniany 2 razy.

ODPOWIEDZ