Autor Wątek: Trigger blokujący zapis dokumentu  (Przeczytany 5361 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4919
  • Reputacja +173/-11
Trigger blokujący zapis dokumentu
« Odpowiedź #15 dnia: Listopad 23, 2017, 23:39:36 »
Chyba robisz podstawowy błąd - nie bardzo wiesz co chcesz sprawdzić a już zaczynasz to pisać.
W ogóle nie wiem po co Ci nr pozycji.
Przecież wystarczy sprawdzić czy:
- Istnieje jakakolwiek pozycja z grupą X
I jednocześnie
- Istnieje jakakolwiek pozycja z grupą inna niż X.
Nie zapomnij że grupy może nie być.

I weź to po sprawdzaj najpierw na zwykłych, już zapisanych dokumentach, a nie w triggerze.
Tylko zrób sobie porządny zbiór testowych dokumentów.
Jak już opanujesz tego SELECTa to weź się za trigger.
« Ostatnia zmiana: Listopad 23, 2017, 23:42:21 wysłana przez candy »
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline Maciek

  • Nowy użytkownik
  • *
  • Wiadomości: 44
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.58 SP1
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #16 dnia: Listopad 24, 2017, 11:24:22 »
Chyba robisz podstawowy błąd - nie bardzo wiesz co chcesz sprawdzić a już zaczynasz to pisać.
W ogóle nie wiem po co Ci nr pozycji.
Przecież wystarczy sprawdzić czy:
- Istnieje jakakolwiek pozycja z grupą X
I jednocześnie
- Istnieje jakakolwiek pozycja z grupą inna niż X.
Nie zapomnij że grupy może nie być.

I weź to po sprawdzaj najpierw na zwykłych, już zapisanych dokumentach, a nie w triggerze.
Tylko zrób sobie porządny zbiór testowych dokumentów.
Jak już opanujesz tego SELECTa to weź się za trigger.

no właśnie wiem co chcę sprawdzić (dokładnie to o czym piszesz) ale nie widzę/nie rozumiem, prawdopodobnie jakiegoś oczywistego błędu, który popełniam w składni, ponieważ ciągle wracam do punktu wyjścia, pierwszy warunek działa

SELECT @pid = ob_DokMagId FROM inserted
SELECT @grup = tw_IdGrupa FROM tw__Towar WHERE tw_Id = @tow
IF
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND @grup = 27)

czyli jeśli którykolwiek towar ma grupę 27, to wyświetla błąd
ale jak dodam drugi
AND
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND @grup <> 27)

to zapisuje każdy dokument, bez znaczenia jakie są w nim grupy. ob_DokMagId = @pid stosuję, żeby zapytanie działało tylko do bieżącego dokumentu a nie całej tabeli dok_Pozycja. Gdzie ja nie widzę błędu....?


« Ostatnia zmiana: Listopad 24, 2017, 11:26:46 wysłana przez Maciek »

Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9234
  • Reputacja +1306/-21
  • Wersja programu: Najnowsza
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #17 dnia: Listopad 24, 2017, 12:52:04 »
Cały czas popełniasz ten sam błąd. Odnosisz się do jednej pozycji.

SELECT @grup = tw_IdGrupa FROM tw__Towar WHERE tw_Id = @tow

Do zmiennej @grup pobierasz identyfikator grupy towaru, który jest w inserted (na razie pomijam wiele rekordów w inserted)
Załóżmy, że @grup=15

Następnie sprawdzasz (podmieniam zmienną @grup na założoną wartość):
IF
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND 15 = 27)
AND
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND 15 <> 27)

Jakim cudem coś może być jednocześnie równe oraz różne od określonej wartości?


Sławek, Zduńska Wola

Offline Maciek

  • Nowy użytkownik
  • *
  • Wiadomości: 44
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.58 SP1
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #18 dnia: Listopad 24, 2017, 13:28:48 »
Cały czas popełniasz ten sam błąd. Odnosisz się do jednej pozycji.

SELECT @grup = tw_IdGrupa FROM tw__Towar WHERE tw_Id = @tow

Do zmiennej @grup pobierasz identyfikator grupy towaru, który jest w inserted (na razie pomijam wiele rekordów w inserted)
Załóżmy, że @grup=15

Następnie sprawdzasz (podmieniam zmienną @grup na założoną wartość):
IF
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND 15 = 27)
AND
EXISTS (SELECT * from dok_Pozycja where ob_DokMagId = @pid AND 15 <> 27)

Jakim cudem coś może być jednocześnie równe oraz różne od określonej wartości?

Dziękuję :) dopiero na Twoim przykładzie zrozumiałem błąd. Po zmianie jak niżej wszystko działa :))

AND
EXISTS (SELECT * from dok_Pozycja JOIN tw__Towar ON ob_TowId = tw_Id AND ob_DokMagId = @pid AND tw_IdGrupa = 27)
AND
EXISTS (SELECT * from dok_Pozycja JOIN tw__Towar ON ob_TowId = tw_Id AND ob_DokMagId = @pid AND tw_IdGrupa <> 27)

Forum Użytkownikow Subiekt GT

Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #18 dnia: Listopad 24, 2017, 13:28:48 »