Skocz do zawartości

Usunięta faktura

Polecane posty

Może warto by, taki podstawowy log prowadzić gdzieś na boku? Ostatnio wydzieliliście tablicę NaglowkiEncji, a one mają także zapisy o usuwaniu - trzeba by tylko dodać jedno proste pole varchar, wypełnianie jakimiś danymi identyfikacyjnymi w postaci tekstowej i byłby super log :) Nie powinno to jakoś rozepchać bazy, bo i tak to trzymacie.

Link to postu
  • 5 miesięcy temu...
  • 3 tygodnie później...

Pytanie a może rozpatrzyli by Państwo utworzenie paru tablic zawierającących informacje o tym kto i kiedy skasował jakiś dokument

 

Jako pomysł rozwiązania:

 

Tab.1 (DokumentyUsunięte)

Id(nie powiązane z tablicą Dokumenty),
Pełna sygnatura,
Data usunięcia (fajnie jakby była jeszcze godzina),
Osoba usuwająca,
Powód usunięcia,

Tab.2 (PozycjeUsuniętych dokumentów)

Konstrukcja taka sama jak przy Pozycjach dokumentów.

 

+ ewentualne inne tablice potrzebne do pokazania co dokładnie znajdowało się na usuniętym dokumencie.

 

 

 

Link to postu
  • 2 tygodnie później...

W zależności od przypadku, ale nie zawsze są drukowane do PDF. Generalnie, to problem dotyczy całego obiektu Dokumenty, bo dzisiaj są to faktury, jutro zamówienia, a nie wiadomo co dalej. Chcemy też wykluczyć faktyczne usunięcie dokumentu, jak przyczynę luki w numeracji - równie dobrze, może to być jakaś rezerwacja numeru. Chcielibyśmy po prostu mieć świadomość i wiedzę, co ktoś usunął. Swoją drogą, wydaje mi się, że przy tak poważnych dokumentach, jakimi są faktury, system powinien nawet poprosić o przyczynę usunięcia i ją zapisać, ale to już pozostawiam Sobie w sferze marzeń ;)

Link to postu

Pomysł na ewidencjonowanie danych o usuniętych dokumentach odnotowujemy do rozważenia w dalszej przyszłości (nie planujemy realizacji w najbliższych wersjach programu).
Na teraz możemy podpowiedzieć wykonanie rozwiązania własnego, bazującego na triggerze który przy usunięciu dokumentu zapisze do oddzielnej tabeli dane dokumentu oraz osobę która ten dokument usuwa.

Link to postu

Nie jest to takie proste. Tak jak pisałem wcześniej osoba usuwająca jest w nagłówku, dla encji "koszowalnych". Dla dokumentów to pole nie jest ustawiane, aczkolwiek do identyfikatora użytkownika można się dostać poprzez sesję aplikacyjną. Chodzi o to, że podczas usuwania (oraz w zasadzie wszystkich innych operacji) na obiekt dokumentu jest nakładana blokada aplikacyjna. Blokady przechowywane są w tabeli mox.application_locks. Zawiera ona identyfikator zablokowanego zasobu oraz identyfikator sesji aplikacyjnej (guid). Sesje aplikacyjne przechowywane są w tabeli mox.application_session i z niej można wydobyć identyfikator użytkownika, który daną sesję założył. Proponuję więc dodać trigger, który z usuwanych wierszy wydobędzie identyfikator dokumentu i na jego podstawie ze złączonych tabel blokad oraz sesji wydobędzie identyfikator użytkownika, który w danym momencie ten dokument usuwa. Poniżej przykładowy kod takiego triggera:

CREATE TABLE UsunieteDokumenty
(
	IdUzytkownika uniqueidentifier NULL,
	NumerDokumentu Varchar(255) NULL,
	IdDokumentu INT NULL
);
GO

CREATE TRIGGER [Dokumenty_AfterDelete]
ON [ModelDanychContainer].[Dokumenty]
AFTER DELETE AS
BEGIN
		DECLARE @idDokumentu INT;
		DECLARE @numerDokumentu VARCHAR(255);
		DECLARE @idUzytkownika uniqueidentifier;
		-- wyciągamy identyfikator oraz numer pełny dokumentu usuwanego
		SELECT @idDokumentu = Id, @numerDokumentu = NumerWewnetrzny_PelnaSygnatura
		FROM deleted;
		-- wyciągamy identyfikator użytkownika z tabel blokad oraz sesji
		SELECT	@idUzytkownika = sess.application_user_id
		FROM	mox.application_lock locks
				INNER JOIN
				mox.application_session sess
				ON 	sess.application_session_id = locks.application_session_id
		WHERE	locks.resource_id = CONCAT('InsERT.Moria.Dokumenty.Logistyka.DokumentSprzedazyBO ', CONVERT(varchar(10), @idDokumentu));
		-- wstawiamy pobrane dane do zewnętrznej tabeli
		IF (@idUzytkownika IS NOT NULL)
		BEGIN
			INSERT INTO UsunieteDokumenty(IdUzytkownika, NumerDokumentu, IdDokumentu) VALUES (@idUzytkownika, @numerDokumentu, @idDokumentu);
		END
END
GO

 

Link to postu
  • 1 rok później...

Zablokowaliście możliwość pisania tutaj, to odkopuję:

Funkcja super, nareszcie, w przyszłym tygodniu pewnie wrzucimy 26kę :D Kilka pytań póki w głowie na świeżo, a nie widziałem jeszcze systemu:

Czy można wybierać, co się rejestruje?

Robiliście jakieś testy, jako to wpływa na rozrost bazy?

Czy macie jakiś mechanizm, automatycznego usuwania starych zapisów, np. po roku?

Link to postu
Dnia 26.06.2019 o 15:34, Radomił Ząbik napisał:

Czy można wybierać, co się rejestruje?

W Subiekcie nie ma takiej możliwości - wszystko albo nic ;) Oczywiście z wyjątkami opisanymi w podlinkowanym wątku.

Dnia 26.06.2019 o 15:34, Radomił Ząbik napisał:

 Robiliście jakieś testy, jako to wpływa na rozrost bazy?

Na podstawie wglądu do bazy danych biura rachunkowego, gdzie włączony był ślad rewizyjny od momentu, gdy tylko się pojawił, odnotowaliśmy wzrost o 25% +/- 5% dla sporych baz rewizorowych.

Dnia 26.06.2019 o 15:34, Radomił Ząbik napisał:

 Czy macie jakiś mechanizm, automatycznego usuwania starych zapisów, np. po roku?

Nie ma automatycznego usuwania starych zapisów. Zapisujemy sugestię do przeanalizowania przy okazji tworzenia kolejnych wersji :) 

  • Lubię to 1
Link to postu
×
×
  • Dodaj nową pozycję...