Blokada przesunięć MM

Problemy i pomysły związane z funkcjonowaniem modułu Sprzedaż

Moderator: mikey

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Blokada przesunięć MM

Post autor: VIkking »

Witam,

czy istnieje mechanizm blokujący przesunięcia MM?
Wyjaśniam:
Ktoś przez przypadek przesunął towar na magazyn na którym powinny być tylko produkty. Wyszło to dopiero teraz gdy Księgowa zamyka stany i wychodzą minusowe. Dlaczego? A bo nie zadziałał mechanizm który by dodał na magazyn produktów towar. Teraz faktura już poszła do klienta ale nie to problem jest. Obawiam się, że mogą wystąpić w najbliższym czasie podobne sytuacje. Czy istnieje jakiś mechanizm, jakaś blokada nie umożliwiająca przesuwać towar na produkcje i na odwrót?

wgromek
Posty: 53
Rejestracja: 04 sty 2014, 23:00
Rola: Administrator CDN XL
Lokalizacja: Lublin

Re: Blokada przesunięć MM

Post autor: wgromek »

Na przykład triger na tabeli TraNag.

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Blokada przesunięć MM

Post autor: VIkking »

Kod: Zaznacz cały

USE [ERPXL_TEST]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		<******>
-- Create date: <******>
-- Description:	<Trigger sprawdzający dokument PW czy dane są poprawne. >
-- =============================================
ALTER TRIGGER [CDN].[TraNag_Sprawdz_Magazyny]
   ON  [CDN].[TraNag] 
   AFTER  INSERT,UPDATE
AS 
BEGIN
	SET NOCOUNT ON;
	
	BEGIN
	DECLARE @typ AS INT
	DECLARE @numer AS INT
	DECLARE @flaga AS INT 
	DECLARE @centrum AS INT
	DECLARE @operator AS VARCHAR (MAX)

	SET @typ = (SELECT TrN_GIDTyp FROM inserted) --pobiera aktualn typ dokumenty dla PW: 1617
	SET @numer = (SELECT TrN_GIDNumer FROM inserted) -- pobiera aktualny numer dokumentu
	IF (@typ = 1617)
		
	BEGIN
		SET @flaga = (SELECT CDN.TraElem.TrE_TypTwr FROM CDN.TraElem WHERE CDN.TraElem.TrE_GIDNumer = @numer AND CDN.TraElem.TrE_GIDTyp = @typ GROUP BY CDN.TraElem.TrE_TypTwr) -- sprawdza typ kartotek np: towar albo produkt
		SET @centrum = (SELECT s.SES_FrsID FROM inserted 
                left outer join CDN.Sesje s ON s.SeS_SesjaId=TrN_Aktywny GROUP BY s.SES_FrsID) -- Sprawdza aktualne centrum zabezpieczeń 
	
			IF exists (SELECT * FROM inserted WHERE TrN_GIDTyp = 1617 AND (TrN_MagDNumer = 2 OR TrN_MagDNumer = 11 OR TrN_MagDNumer = 3 OR TrN_MagDNumer = 4 OR TrN_MagDNumer = 12) AND @flaga !=1 AND @centrum !=1) -- sprawdza warunek czy wprowadzamy na stan magazynu towarów produkt
				BEGIN
					RAISERROR ('#CDN_BLADK/# #CDN_1=Nie można wprowadzić kartoteki typu: "Produkt" na Magazyn towarów/# #CDN_2=Nieprawidłowy magazyn docelowy/# #CDN_3=Zmień dane w PW/#',16,1) -- wywołujemy bład
					ROLLBACK TRAN
				END
			IF exists (SELECT * FROM inserted WHERE TrN_GIDTyp =1617 AND (TrN_MagDNumer = 6 OR TrN_MagDNumer = 7 OR TrN_MagDNumer = 1) AND @flaga !=2 AND @centrum !=1) -- odwrotnie
				BEGIN
					RAISERROR ('#CDN_BLADK/# #CDN_1=Nie można wprowadzić kartoteki typu: "Towar" na Magazyn produktów/# #CDN_2=Nieprawidłowy magazyn docelowy/# #CDN_3=Zmień dane w PW/#',16,1)
					ROLLBACK TRAN
				END
		END

	
	END
    

END
Testowane i działa

Yuber
Posty: 934
Rejestracja: 12 sty 2009, 12:03
Rola: Administrator CDN XL
Wersja: 2016
Lokalizacja: Kraków

Re: Blokada przesunięć MM

Post autor: Yuber »

Trigger fajny ale w ostateczności. Ogranicz rzeczy takie jak "przez przypadek.." "mogą wystąpić w najbliższym czasie..."
Pierwszy krok -> ogranicz użyszkodnikowi działanie przycinając uprawnienia do wystawiania dokumentów, do magazynów, dokumentów do magazynów itd. (Administrator -> definicje dokumentów, struktura firmy, operatorzy )
Drugi krok -> naucz kogoś lub sam kontroluj stany magazynowe, niezamknięte dokumenty, niewygenerowane dokumenty - odpowiedni raport załatwi prawie wszystko. (Lista towarów -> filtry i wydruk Rozbieżności ilości, Lista dokumentów -> filtry itd.)

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Blokada przesunięć MM

Post autor: VIkking »

Super było by to co piszesz ale w naszej firmie nie realne. Uwierz mi do tej pory zdarza się telefon, że problem z przyjęciem bo chcą towar na produkcje wrzucić albo odwrotnie bo tak im się chce. A odkręcanie tego to nie taka prosta sprawa dlatego przyjęliśmy taktykę odgórnego zakazu na poziomie bazy danych.

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Blokada przesunięć MM

Post autor: VIkking »

Odkopuje temat
Proszę może coś wymyślicie. Chodzi mi o funkcje RAISERROR która sama w sobie wycofuję transakcje i pojawia się buba w momencie kiedy dokument PW jest tworzony nie przez dodaj nowe PW tylko w momencie jak z RW robimy PW. Trigger łapie i wywala błąd ale i tak dokument jest tworzony. Problem, że nie da sie go usunąć bo trigger blokuje jakakolwiek edycję. Powstała myśl, że jedynie ostrzegać użytkownika ale funkcja RAISEERROR sama w sobie cofa transakcje, macie pomysł co innego zastosować?

wgromek
Posty: 53
Rejestracja: 04 sty 2014, 23:00
Rola: Administrator CDN XL
Lokalizacja: Lublin

Re: Blokada przesunięć MM

Post autor: wgromek »

Może się mylę ale czy jakby zamienić:

Kod: Zaznacz cały

AFTER  INSERT,UPDATE
na

Kod: Zaznacz cały

FOR INSERT,UPDATE
to mogłoby rozwiązać problem.
Ogólnie nie rozumiem co chcesz osiągnąć. Czy zablokować przesunięcia tak jak w temacie czy blokować RW/PW.

VIkking
Posty: 175
Rejestracja: 20 paź 2021, 14:28
Rola: Administrator CDN XL
Wersja: 2022
Kontakt:

Re: Blokada przesunięć MM

Post autor: VIkking »

Nie blokować wszystkie PW/RW tylko blokować PW w określonej sytuacji.

ODPOWIEDZ