Strona 1 z 2
Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 11:22
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...
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 12:03
autor: viesiek1
W czasie zatwierdzania pole: TrN_Stan zmienia swoją wartość. Czyli trzeba wziąć pod uwagę tą wartość w inserted i w deleted
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 12:18
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 ?
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 12:22
autor: viesiek1
Dokładnie tak.
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 13:07
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))
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 27 cze 2013, 15:05
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
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 28 cze 2013, 07:32
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?
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 28 cze 2013, 08:50
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
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 28 cze 2013, 09:31
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?
Re: Okno informacyjne podczas zatwierdzania dokumentów
: 28 cze 2013, 09:49
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