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

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

Offline Maciek

  • Nowy użytkownik
  • *
  • Wiadomości: 44
  • Reputacja +0/-0
  • Wersja programu: Subiekt GT 1.58 SP1
Trigger blokujący zapis dokumentu
« dnia: Listopad 23, 2017, 14:53:01 »
utknąłem na tworzeniu warunku, który będzie wyświetlał komunikat o błędzie, jeżeli na dokumencie sprzedaży pojawią się towary z różnych grup.
Powinno być tak, że jeżeli jeden z towarów będzie miał grupę 27 i jakikolwiek inny będzie z grupy różnej od 27, to ma się wyświetlić komunikat błędu.
Trigger jest na tabeli dok_Pozycja

SELECT @pid = ob_DokHanId FROM inserted
SELECT @tow = ob_TowId FROM inserted
SELECT @typ = dok_Typ from dok__Dokument where dok_Id = @pid
SELECT @dhan = ob_DokHanLp from INSERTED
SELECT @dkat = dok_KatId FROM dok__Dokument where dok_DoDokId = @pid
SELECT @grup = tw_IdGrupa FROM tw__Towar WHERE tw_Id = @tow

IF (@typ = 21 OR @typ = 2)
AND
(@dhan = 1 OR @dhan = 2 OR @dhan = 3) AND (@grup = 27 AND @grup <> 27)
RAISERROR('<msg>Dla towaru Komisowego, na dokumencie mogą być tylko telefony z Komisu.</msg>', 16, 1)

czyli, jeżeli mam towar na pozycji 1,2 lub 3 i któryś z tych towarów jest grupy 27 a inny z różnej od 27, to jest błąd. Tym czasem błąd chyba robię na tym (@grup = 27 AND @grup <> 27). Ktoś mnie naprowadzi?

Offline micha

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1028
  • Reputacja +9/-0
  • Wersja programu: Sub+Rew GT [najnowsze]
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #1 dnia: Listopad 23, 2017, 15:09:38 »
(@grup = 27 AND @grup <> 27)
To nigdy nie jest prawdą. :-)
Pokombinuj z select count > 1.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4877
  • Reputacja +172/-11
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #2 dnia: Listopad 23, 2017, 15:22:12 »
Trudno komentować urywki, ale oprócz tego co słusznie zauważył micha to:
- czy jesteś pewien że w INSERTED będzie zawsze tylko jeden wiersz?
- czy jak grupa się powtórzy na pozycji 4 lub kolejnej to już OK?

Myślę że w warunku należałoby skorzystać z EXISTS
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ź #3 dnia: Listopad 23, 2017, 15:59:49 »
Dziękuję za podpowiedzi, próbuję je właśnie wykorzystać

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ź #4 dnia: Listopad 23, 2017, 17:03:34 »
Trudno komentować urywki, ale oprócz tego co słusznie zauważył micha to:
- czy jesteś pewien że w INSERTED będzie zawsze tylko jeden wiersz?
- czy jak grupa się powtórzy na pozycji 4 lub kolejnej to już OK?

Myślę że w warunku należałoby skorzystać z EXISTS

1. jestem pewien, że nie zawsze będzie jeden
2. nie, ogólnie towary z jednej grupy (27) nie mogą być sprzedawane z pozostałymi grupami jednym dokumentem.


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ź #5 dnia: Listopad 23, 2017, 17:16:27 »
(@grup = 27 AND @grup <> 27)
To nigdy nie jest prawdą. :-)
Pokombinuj z select count > 1.

nic mi sensownego z tym count nie wychodzi. Dobrze rozumiem, że  powinien mi zliczać towary na dokumencie z każdej grupy i jeśli dla obu jednocześnie jest wartość większa od zera, to wywołuje błąd? Tyle, że on mi zlicza, takie mam wrażenie towary z tabeli tw__Towary, a nie te z "ob_TowId FROM inserted" mimo, że chyba zrobilem dobrze...
IF (@typ = 21 OR @typ = 2)
AND
(SELECT Count (*) FROM tw_Towary where tw_IdGrupa = 27 and tw_Id = @tow)  > 0
AND
(SELECT Count (*) FROM tw_Towary where tw_IdGrupa <> 27 and tw_Id = @tow)  > 0

na logikę powinno być ok, czyli jeżeli na dokumencie jest towarów z obu grup jednocześnie więcej niż 0 to jest błąd, w przeciwnym razie warunek się nie powinien wykonać...


Offline birds22

  • Ekspert
  • *****
  • Wiadomości: 9211
  • Reputacja +1304/-21
  • Wersja programu: Najnowsza
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #6 dnia: Listopad 23, 2017, 17:42:09 »
(@grup = 27 AND @grup <> 27)
To nigdy nie jest prawdą. :-)
Pokombinuj z select count > 1.

nic mi sensownego z tym count nie wychodzi. Dobrze rozumiem, że  powinien mi zliczać towary na dokumencie z każdej grupy i jeśli dla obu jednocześnie jest wartość większa od zera, to wywołuje błąd? Tyle, że on mi zlicza, takie mam wrażenie towary z tabeli tw__Towary, a nie te z "ob_TowId FROM inserted" mimo, że chyba zrobilem dobrze...
IF (@typ = 21 OR @typ = 2)
AND
(SELECT Count (*) FROM tw_Towary where tw_IdGrupa = 27 and tw_Id = @tow)  > 0
AND
(SELECT Count (*) FROM tw_Towary where tw_IdGrupa <> 27 and tw_Id = @tow)  > 0

na logikę powinno być ok, czyli jeżeli na dokumencie jest towarów z obu grup jednocześnie więcej niż 0 to jest błąd, w przeciwnym razie warunek się nie powinien wykonać...

Na logikę właśnie nie powinno być OK. Cały czas sprawdzasz przecież jeden towar a nie towary znajdujące się na dokumencie.
Jeden towar nie może być i nie być jednocześnie w grupie 27.
Sławek, Zduńska Wola

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4877
  • Reputacja +172/-11
Trigger blokujący zapis dokumentu
« Odpowiedź #7 dnia: Listopad 23, 2017, 18:01:10 »
Ja Ci piszę żebyś użył EXISTS a Ty babrzesz się w COUNT... Ehh
Po co Ci wolniejsze COUNT skoro chcesz sprawdzić czy istnieje problem, a nie w ilu miejscach wystąpił?
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline Aldo

  • Ekspert
  • *****
  • Wiadomości: 10695
  • Reputacja +433/-13
  • Wersja programu: najnowsza
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #8 dnia: Listopad 23, 2017, 18:26:53 »
Wiem tylko to, co napisałeś, ale co będzie jak na fakturze znajdą się towary z innych grup oraz z grupy 27, a faktura będzie dla detalisty?

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ź #9 dnia: Listopad 23, 2017, 20:28:24 »
Wiem tylko to, co napisałeś, ale co będzie jak na fakturze znajdą się towary z innych grup oraz z grupy 27, a faktura będzie dla detalisty?

typ dokumentu jest dla mnie wtórny, muszę stworzyć mechanizm, który nie pozwoli w dokumencie sprzedaży (ale także MM) umieścić jednocześnie towarów komisowych (w praktyce telefony, każdy wprowadzony z jedną grupą i symbolami = IMEI) oraz pozostałych towarów jakie sprzedajemy. Mamy 20 magazynów, na każdym sprzedaje po kilka osób, w tym sporo stażystów, nie dam fizycznie rady na bieżąco tego sprawdzać i poprawiać, żeby później WZ w Rewizorze miały prawidłowe wartości dla towarów.

No nic, spróbuję z EXISTS

Offline Biniew

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4095
  • Reputacja +275/-17
  • Wersja programu: GT i Nexo
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #10 dnia: Listopad 23, 2017, 20:41:43 »
a gdyby telefon byl kompletem a nie towarem to moze rewizor by sobie sam poradzil?

Offline micha

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1028
  • Reputacja +9/-0
  • Wersja programu: Sub+Rew GT [najnowsze]
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #11 dnia: Listopad 23, 2017, 20:51:54 »
A czy ten komis to może nie tyle komis, co raczej VAT marza? Bo jak tak, to jest w Subiekcie standardowy mechazm niepozwalający mieszać.

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ź #12 dnia: Listopad 23, 2017, 22:03:50 »
nie, to jest taka sytuacja, że na każdym magazynie są telefony komisowe i towar zakupiony. Oba "schodzą" WZ-tkami do PA lub FS, które księgowane powinny być na koncie komisowym (poza bilansowym) dla tych tel. komisowych i na koncie magazynowym bilansowym dla towarów zakupionych. Jeżeli teraz ktoś mi sprzeda telefon z komisu i np. futerał jednym rachunkiem, to księgowa nie będzie wiedziała, czy wartość WZ w całości jest kosztem firmy czy tylko w części związanej z tym futerałem. Sprzedawcy na sklepach (+ i CP) mają dosyć zajęć i muszę to zautomatyzować, żeby nie mieli kolejnej rzeczy do pamiętania.

Offline micha

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 1028
  • Reputacja +9/-0
  • Wersja programu: Sub+Rew GT [najnowsze]
Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #13 dnia: Listopad 23, 2017, 22:22:18 »
Skoro komis i tak jest pozabilansowy, to może rozwiązaniem byłoby używanie zerowej ceny magazynowej dla towarów komisowych? Wtedy nie byłoby czego odejmować.

Rozwiązanie z kompletem tez wydaje się Ok, jeżeli nie macie innych kompletów. Można zautomatyzować księgowanie wartości kompletów.

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ź #14 dnia: Listopad 23, 2017, 23:13:35 »
Ja Ci piszę żebyś użył EXISTS a Ty babrzesz się w COUNT... Ehh
Po co Ci wolniejsze COUNT skoro chcesz sprawdzić czy istnieje problem, a nie w ilu miejscach wystąpił?

też mi to  nie wychodzi, z przykładów wynika, że po
IF EXISTS (SELECT * FROM dok_Pozycja WHERE ob_DokHanLP = @dhan AND @grup = 27)

jest
BEGIN
RAISERROR('<msg>Komunikat</msg>', 16, 1)
END

ale u mnie po spełnieniu pierwszego warunku powinien sprawdzić drugi, czyli czy na wstawionych pozycjach nie ma @grup<>27 i jeżeli oba warunki są spełnione to wyświetlać komunikat.

Forum Użytkownikow Subiekt GT

Odp: Trigger blokujący zapis dokumentu
« Odpowiedź #14 dnia: Listopad 23, 2017, 23:13:35 »