Okno informacyjne podczas zatwierdzania dokumentów

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

Moderator: mikey

BusyBoy
Posty: 153
Rejestracja: 04 gru 2012, 08:40
Rola: Administrator CDN XL
Wersja: 2013.2

Okno informacyjne podczas zatwierdzania dokumentów

Post autor: BusyBoy »

Witam

Chciałem zrobić - za pomocą trigerra - coś takiego że podczas wyciągania dokumentu z bufora pojawiało się okno informacyjne. Trigger napisałem ale jest problem bo on zamiast pojawiać się jeden raz tylko podczas wyciągania z bufora pojawia się za każdym razem i nie pozwala wyciągnąć dokumentów z bufora.

Kod: Zaznacz cały

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
    ALTER TRIGGER [CDN].[KONT - ADAMSKIX]
    ON [CDN].[TraNag]
    FOR UPDATE
    as
IF  UPDATE(TrN_stan)
 
BEGIN

   IF EXISTS(SELECT * FROM inserted INNER JOIN CDN.TraElem ON inserted.TrN_GIDNumer = TrE_GIDNumer WHERE (inserted.TrN_GIDTyp IN (2033,2041,2001,2009,2034,2042)) AND (inserted.TrN_KntNumer = 72))
   
BEGIN
    Raiserror('#CDN_BLAD/# #CDN_1=UWAGA!!! Na sklep w Rybnie wydrukuj 2 kopie./# #CDN_2= /# #CDN_3=/# ',16,0)
     ROLLBACK TRAN
     SET NOCOUNT ON
     RETURN
    END       
END
Bardzo proszę o wskazówki...

Awatar użytkownika
viesiek1
Posty: 425
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: viesiek1 »

W czasie zatwierdzania pole: TrN_Stan zmienia swoją wartość. Czyli trzeba wziąć pod uwagę tą wartość w inserted i w deleted
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

BusyBoy
Posty: 153
Rejestracja: 04 gru 2012, 08:40
Rola: Administrator CDN XL
Wersja: 2013.2

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: BusyBoy »

Czyli muszę dodać jeszcze jeden warunek odnoście stanu (trn_stan) do :

Kod: Zaznacz cały

   IF EXISTS(SELECT * FROM inserted INNER JOIN CDN.TraElem ON inserted.TrN_GIDNumer = TrE_GIDNumer WHERE (inserted.TrN_GIDTyp IN (2033,2041,2001,2009,2034,2042)) AND (inserted.TrN_KntNumer = 72))
tak ?

Awatar użytkownika
viesiek1
Posty: 425
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: viesiek1 »

Dokładnie tak.
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

BusyBoy
Posty: 153
Rejestracja: 04 gru 2012, 08:40
Rola: Administrator CDN XL
Wersja: 2013.2

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: BusyBoy »

Powiem tak, próbowałem na kilka sposobów z wartością trn_stan (wartość 3 , 1 wieksze od 0) aby w ogólne nie pojawia się okno albo pojawia się za każdym razem i nie można wyciągnąc dokumentu z bufora.

Kod: Zaznacz cały

   IF EXISTS(SELECT * FROM inserted INNER JOIN CDN.TraElem ON inserted.TrN_GIDNumer = TrE_GIDNumer WHERE (inserted.TrN_GIDTyp IN (2033,2041,2001,2009,2034,2042)) AND (inserted.TrN_KntNumer = 72) AND (inserted.TrN_stan = 1))

m.bozenski
Posty: 99
Rejestracja: 06 wrz 2009, 15:17
Rola: Administrator CDN XL
Wersja: 10

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: m.bozenski »

ja mam podobną rzecz rozwiązaną w następujący sposób:

- sprawdzam z inserted pole trn_stan
- jeżeli trn_stan ma wartość jedną z: 0, 1, 2, 3
- jeżeli trn_stan = 3
- tutaj wykonaj całą resztę co potrzebujesz.

całość wygląda tak (część musiałem wykomentować niestety ...) ale ciało zostało:

Kod: Zaznacz cały

	SET NOCOUNT ON;

    IF UPDATE(Trn_stan)
    BEGIN
		declare @kntgidnumer int
		declare @knt_docelowy int
		declare @trn_stan int
		declare @trn_zrdnumer int
		declare @tresc nvarchar(max)
		declare @temat nvarchar(max)
		declare @tresc2 nvarchar(max)
		declare @temat2 nvarchar(max)
		
		declare @knt_nazwa1 varchar(255)
		declare @knt_nazwa2 varchar(255)
		declare @knt_akronim varchar(50)
		
		declare @trn_gidnumer int
		declare @trn_gidtyp int
		declare @sposob_dostawy varchar(255)
				
		select @trn_gidnumer = trn_gidnumer, @sposob_dostawy = trn_sposobdostawy, @kntgidnumer = trn_kntnumer,
		@trn_stan = trn_stan, @trn_gidtyp = trn_gidtyp, @knt_docelowy = trn_kndnumer from inserted		
		
		if @sposob_dostawy <> 'cos' and @sposob_dostawy <> ''
		begin		
			-- pobieramy podstawowe informacje o kontrahencie
			select @knt_nazwa1 = knt_nazwa1, @knt_nazwa2 = knt_nazwa2, @knt_akronim = knt_akronim
			from cdn.kntkarty
			where knt_gidnumer = @kntgidnumer
			
			-- sprawdzamy, ile jest numerów telefonów dla osób przypisanych jako odpowiedzialnych za zamówienia
			declare @ilosc_nr int
			select @ilosc_nr = count(*) from cdn.kntosoby where kns_kntnumer = @kntgidnumer and KnS_Telefon <> '' and KnS_UpowaznionaZam = 1
		
			declare @numer varchar(255)
			declare db_cursor cursor for select kns_telefon from cdn.kntosoby where kns_kntnumer = @kntgidnumer and kns_telefon <> '' and kns_upowaznionazam = 1
			open db_cursor
			fetch next from db_cursor into @numer
			while @@FETCH_STATUS = 0
			begin


				if @trn_stan in (0, 1, 2, 3) and @trn_gidtyp in (2033, 2037, 2034)
				begin
					declare @kurier varchar(255)
					declare @numer_listu varchar(255)
					
					declare @aktualny_stan int
					select @aktualny_stan = trn_stan from cdn.tranag where trn_gidnumer = @trn_gidnumer
					
					if @aktualny_stan = 3
					begin
						-- pobierz informacje o firmie kuriera
						select @kurier = Atr_Wartosc from cdn.TraNag a join cdn.atrybuty b on a.trn_gidnumer = b.atr_obinumer where trn_kntnumer = @kntgidnumer and Atr_AtkId = 8 and trn_gidnumer = @trn_gidnumer
						
						-- pobierz informacje o numerze listu przewozowego
						select @numer_listu = atr_wartosc from cdn.tranag a join cdn.atrybuty b on a.trn_gidnumer = b.atr_obinumer where trn_kntnumer = @kntgidnumer and Atr_AtkId = 7 and trn_gidnumer = @trn_gidnumer
						
					
		end
    END

Awatar użytkownika
viesiek1
Posty: 425
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: viesiek1 »

Kolega potrzebuje tylko wyświetlić komunikat, ale trigger niestety blokuje przy okazji zapis dokumentu. Pytanie jest takie: czy, oprócz dodatku w dużej Hydrze i triggera, da się wyświetlić w CDN komunikat?
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

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

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: elmiq »

W triggerze po RAISERROR,zamiast ROLLBACK TRAN, daj COMMIT TRAN - po czymś takim, XL wyświetli komunikat, a po jego zamknięciu kolejne naciśnięcie na "dyskietkę" w systemie bez problemu zapisze dokument.


Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

Awatar użytkownika
viesiek1
Posty: 425
Rejestracja: 03 maja 2011, 18:40
Rola: Administrator CDN XL
Wersja: 2023
Lokalizacja: Bielsko-Biała
Kontakt:

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: viesiek1 »

Oczywiście Mateusz masz rację - znam ten sposób. Ale użytkownik w takim przypadku myśli, że nie wolno mu zapisać dokumentu - jest zdezorientowany. Jest to całkiem inny efekt niż przy komunikacie wywoływanym przez: MessageBox.Show(). Problem jest taki, że jak ktoś nie ma licencji na dużą Hydrę to nie może użyć MessageBox.Show() - czy znasz inny sposób na przyjazne dla użytkownika wyświetlenie komunikatu?
Wiesław Świergała

tel: +48 33 829 54 50
e-mail: wieslaw.swiergala@hydro.com.pl

http://www.hydro.com.pl

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

Re: Okno informacyjne podczas zatwierdzania dokumentów

Post autor: elmiq »

Jedyne co możesz zrobić, to przy RAISERROR ustawić parametr, iż jest to informacja, a nie błąd (czyli wyświetlone okno będzie trochę inne).

Pozdrawiam,
Mateusz
Mateusz Świerkosz

http://elmiq.blogspot.com/

ODPOWIEDZ