Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

ALTER procedure [dbo].[MAGSRC_InformacjaOAsortymencie]
@IdUzytkownika numeric, @IdObiektu numeric
as
declare @errmsg varchar(255)
DECLARE @htmlBody NVARCHAR(MAX)
DECLARE @nazwakon VARCHAR(255)
declare @email varchar(255)
DECLARE @NUMERZAM VARCHAR(255)
DECLARE @IDUZYTKOWNIKA_ VARCHAR(255)
declare @imie varchar(255)
declare @temat varchar(255)
declare @IDZAM2 varchar(255)
declare @ilezam varchar(255)
declare @NRZAM varchar(255)
begin
set xact_abort on
set transaction isolation level REPEATABLE READ
begin transaction

SELECT @NUMERZAM=ZAM.NUMER,@NRZAM=ZAM.ID_ZAMOWIENIA FROM ZAMOWIENIE AS ZAM
INNER JOIN ZLECENIE_PRODUKCYJNE AS ZLM ON ZLM.ID_ZAMOWIENIA=ZAM.ID_ZAMOWIENIA
WHERE ZLM.ID_ZLECENIA=@IdObiektu AND ZAM.ID_MAGAZYNU=2 AND ZAM.ID_MAGAZYNU=2 AND ZAM.ID_FIRMY=1

SELECT @IDUZYTKOWNIKA_=ZAM2.ID_UZYTKOWNIKA FROM ZAMOWIENIE AS ZAM2
WHERE ZAM2.ID_MAGAZYNU=1 AND ZAM2.NUMER=@NUMERZAM

select @email=E_MAIL
FROM ADRESY_PRACOWNIKA AS AP
INNER JOIN PRACOWNIK AS P
ON AP.ID_PRACOWNIKA=P.ID_PRACOWNIKA
WHERE P.ID_UZYTKOWNIKA=@IDUZYTKOWNIKA_

SELECT @nazwakon=ZAMOWIENIE.KONTRAHENT_NAZWA FROM ZAMOWIENIE
INNER JOIN ZLECENIE_PRODUKCYJNE ON ZLECENIE_PRODUKCYJNE.ID_ZAMOWIENIA=ZAMOWIENIE.ID_ZAMOWIENIA
where ZLECENIE_PRODUKCYJNE.ID_ZLECENIA=@IdObiektu

select @imie=IMIE_1+NAZWISKO
FROM ADRESY_PRACOWNIKA AS AP
INNER JOIN PRACOWNIK AS P
ON AP.ID_PRACOWNIKA=P.ID_PRACOWNIKA
WHERE P.ID_UZYTKOWNIKA=@IDUZYTKOWNIKA_

select @temat='Produkcja'+' '+@NUMERZAM

SET @htmlBody =
N'<p>Drogi użytkowniku</p>'+'<p>'+@imie+'<p>'+
N'<p>Twoje zamówienie '+@NUMERZAM+' dla kontrahenta</p>'+'<p>'+' '+@nazwakon+'</p>'+
N'<p>Zostało wyprodukowane poniżej lista pozycji</p>'+
N'<table border="1">'+
N'<tr>
<th>Nazwa</th>
<th>Indeks Katalogowy</th>
<th>Wyprodukowano</th>
<th>Zamówiono</th>
<th>Pozostało</th>
<th>Jednostka</th>
</tr>'+
CAST ((
SELECT
TD = ART.[NAZWA],
'',
TD = ART.[INDEKS_KATALOGOWY],
'',
TD = STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO],6,0),
'',
TD = STR(PZ.[ZAMOWIONO], 6, 0),
'',
TD = STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0),
'',
TD = POZYCJE_ZLECENIA.[JEDNOSTKA]
FROM ARTYKUL AS ART
INNER JOIN POZYCJE_ZLECENIA ON ART.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
INNER JOIN ZAZNACZONE ON ZAZNACZONE.ID=POZYCJE_ZLECENIA.ID_POZYCJI
INNER JOIN POZYCJA_ZAMOWIENIA AS PZ ON PZ.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
WHERE ZAZNACZONE.ID_SESJI=@IdUzytkownika and ZAZNACZONE.UZYCIE=50 AND PZ.ID_ZAMOWIENIA=@NRZAMFOR XML PATH('tr'), TYPE
) AS NVARCHAR(MAX) ) +
N'</table>';

exec msdb.dbo.sp_send_dbmail
@profile_name = 'WAPRO Mail Profile',
@recipients = @email,
@body = @htmlBody,
@body_format = 'HTML',
@subject = @temat;

if @@trancount>0 commit transaction
goto Koniec
Error:
raiserror (@errmsg,16,1)
if @@trancount>0 rollback tran
goto Koniec
Koniec:
set transaction isolation level READ COMMITTED
return
end

Procedura działa dla Zleceń Produkcyjnych, na elementach zaznaczonych realizacja na RW/PW wysyła email do użytkownika powiadomienie z pozycjami jaki zostały Wyprodukowane
Chodzi o to obliczenie

TD = STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0),

To jest zapytanie POZYCJE_ZLECENIA.[WYPRODUKOWANO]
0.000000 88830
0.000000 88834
64.000000 88834
0.000000 88838
197.000000 88842

I mamy tutaj dwa razy to samo ID produktu gdzie zamówiono go 128 jeżeli wyprodukowane zostanie pierwsze 64 SZT użytkownik dostanie informacje że zostało 64, w momencie zejścia jeszcze raz tego samego produktu znowu odejmie 64 i znowu będzie pisać ze zostało 64 co już nie będzie prawdą.

Nie udało mi się zapisać funkcji AVG lub SUM aby udało się uruchomić zapytanie
Za wszelką pomoc jestem wdzięcznyTen post został edytowany przez Autora dnia 17.07.15 o godzinie 08:07
Paweł Parzych

Paweł Parzych Starszy Programista
Delphi/MSSQL

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Proszę z tego zapytania jeszcze wyświetlić id_pozycji_zamowienia oraz id_poz_zlecenia i id_wariantu - może sa różne i to powoduje zdublowanie zwracanych wyników
Jan G.

Jan G. Informatyk

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Jeśli dobrze rozumiem to problem jest w momencie:
STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0)
Jeśli w zamówieniu jest 128, a my produkujemy 2x64. Przy obydwu pozycjach będzie od 64 odejmowało 128 w wyniku czego będzie zostawało 64. Rozwiązaniem może być pogrupowanie wszystkiego według artykułu i sumowanie wyprodukowanych i zamówionych.

Swoją drogą nie powinno tu być ZAMOWIONO-WYPRODUKOWANO???

Proszę spróbować użyć takiego zapytania, robione na szybko ale powinno być ok

SELECT
TD = ART.[NAZWA],
'',
TD = ART.[INDEKS_KATALOGOWY],
'',
TD = STR(SUM(POZYCJE_ZLECENIA.[WYPRODUKOWANO]),6,0),
'',
TD = STR(SUM(PZ.[ZAMOWIONO]), 6, 0),
'',
TD = STR(SUM(POZYCJE_ZLECENIA.[WYPRODUKOWANO])-SUM(PZ.[ZAMOWIONO]),6,0),
'',
TD = POZYCJE_ZLECENIA.[JEDNOSTKA]
FROM ARTYKUL AS ART
INNER JOIN POZYCJE_ZLECENIA ON ART.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
INNER JOIN ZAZNACZONE ON ZAZNACZONE.ID=POZYCJE_ZLECENIA.ID_POZYCJI
INNER JOIN POZYCJA_ZAMOWIENIA AS PZ ON PZ.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
WHERE ZAZNACZONE.ID_SESJI=@IdUzytkownika and ZAZNACZONE.UZYCIE=50 AND PZ.ID_ZAMOWIENIA=@NRZAM group by ART.[NAZWA],ART.[INDEKS_KATALOGOWY],POZYCJE_ZLECENIA.[JEDNOSTKA],ART.[ID_ARTYKULU]

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Jan G.:
Jeśli dobrze rozumiem to problem jest w momencie:
STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0)
Jeśli w zamówieniu jest 128, a my produkujemy 2x64. Przy obydwu pozycjach będzie od 64 odejmowało 128 w wyniku czego będzie zostawało 64. Rozwiązaniem może być pogrupowanie wszystkiego według artykułu i sumowanie wyprodukowanych i zamówionych.

Swoją drogą nie powinno tu być ZAMOWIONO-WYPRODUKOWANO???

Proszę spróbować użyć takiego zapytania, robione na szybko ale powinno być ok

SELECT
TD = ART.[NAZWA],
'',
TD = ART.[INDEKS_KATALOGOWY],
'',
TD = STR(SUM(POZYCJE_ZLECENIA.[WYPRODUKOWANO]),6,0),
'',
TD = STR(SUM(PZ.[ZAMOWIONO]), 6, 0),
'',
TD = STR(SUM(POZYCJE_ZLECENIA.[WYPRODUKOWANO])-SUM(PZ.[ZAMOWIONO]),6,0),
'',
TD = POZYCJE_ZLECENIA.[JEDNOSTKA]
FROM ARTYKUL AS ART
INNER JOIN POZYCJE_ZLECENIA ON ART.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
INNER JOIN ZAZNACZONE ON ZAZNACZONE.ID=POZYCJE_ZLECENIA.ID_POZYCJI
INNER JOIN POZYCJA_ZAMOWIENIA AS PZ ON PZ.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
WHERE ZAZNACZONE.ID_SESJI=@IdUzytkownika and ZAZNACZONE.UZYCIE=50 AND PZ.ID_ZAMOWIENIA=@NRZAM group by ART.[NAZWA],ART.[INDEKS_KATALOGOWY],POZYCJE_ZLECENIA.[JEDNOSTKA],ART.[ID_ARTYKULU]

Dokładnie tak dobrze rozumiesz , problem jest z tym obliczeniem, właśnie sprawdziłem to co podesłałeś i dalej to samo:

Tak wygląda pierwsza oraz 2 wiadomość te same dane,

Wyprodukowano50Zamówiono100Pozostało-50

Gdzie w przypadku 2 komunikatu powinno już być Pozostało "0"
I masz racje odejmowanie powinno być na odwrót ;)
Jan G.

Jan G. Informatyk

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Chyba coś źle zrozumiałem, pozycje na zleceniu były realizowane osobno(nie jednym ruchem), zgadza się?

Jeśli tak to od wartości zamówionej musimy sumować produkcje z całego ZLM a nie tylko z właśnie teraz realizowanych(zaznaczonych) produktów, proponuję zrobić tak(za literówki itp przepraszam):

SELECT
TD = ART.[NAZWA],
'',
TD = ART.[INDEKS_KATALOGOWY],
'',
TD = STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO],6,0),
'',
TD = STR(PZ.[ZAMOWIONO], 6, 0),
'',
TD = STR(POZYCJE_WYPRODUKOWANE.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0),
'',
TD = POZYCJE_ZLECENIA.[JEDNOSTKA]
FROM ARTYKUL AS ART
INNER JOIN POZYCJE_ZLECENIA ON ART.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
INNER JOIN ZAZNACZONE ON ZAZNACZONE.ID=POZYCJE_ZLECENIA.ID_POZYCJI
INNER JOIN POZYCJA_ZAMOWIENIA AS PZ ON PZ.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU

INNER JOIN (SELECT ID_ARTYKULU, SUM([WYPRODUKOWANO]) as WYPRODUKOWANO,ID_ZLECENIA from POZYCJE_ZLECENIA group by ID_ARTYKULU, ID_ZLECENIA) as POZYCJE_WYPRODUKOWANE on PZ.ID_ARTYKULU=POZYCJE_WYPRODUKOWANE.ID_ARTYKULU AND POZYCJE_WYPRODUKOWANE.ID_ZLECENIA=POZYCJE_ZLECENIA.ID_ZLECENIA

WHERE ZAZNACZONE.ID_SESJI=@IdUzytkownika and ZAZNACZONE.UZYCIE=50 AND PZ.ID_ZAMOWIENIA=@NRZAMTen post został edytowany przez Autora dnia 17.07.15 o godzinie 14:44

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Paweł P.:
Proszę z tego zapytania jeszcze wyświetlić id_pozycji_zamowienia oraz id_poz_zlecenia i id_wariantu - może sa różne i to powoduje zdublowanie zwracanych wyników



ID_POZYCJI ID_ZLECENIA ID_ARTYKULU JEDNOSTKA PRZELICZNIK STATUS ILOSC OPIS ID_WARIANTU DO_PRODUKCJI WYPRODUKOWANO NR_SERII
33531 10802 88830 SZT 1.000000 R 198.000000 generacja automatyczna 8673 198.000000 0.000000 1193/15
33533 10802 88834 SZT 1.000000 R 134.000000 generacja automatyczna 8675 134.000000 0.000000 1194/15
33743 10802 88834 SZT 1.000000 Z 64.000000 BRAK 8675 0.000000 64.000000 1194/15
33534 10802 88838 SZT 1.000000 R 198.000000 generacja automatyczna 8676 198.000000 0.000000 1195/15
33532 10802 88842 SZT 1.000000 Z 197.000000 generacja automatyczna 8674 0.000000 197.000000 1192/15

Ten post został edytowany przez Autora dnia 17.07.15 o godzinie 14:44

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Jan G.:
Chyba coś źle zrozumiałem, pozycje na zleceniu były realizowane osobno(nie jednym ruchem), zgadza się?

Jeśli tak to od wartości zamówionej musimy sumować produkcje z całego ZLM a nie tylko z właśnie teraz realizowanych(zaznaczonych) produktów, proponuję zrobić tak(za literówki itp przepraszam):
Tak pozycje są realizowane osobno, jest odstęp czasowy :) Zaraz przeanalizuje twoją propozycje, i dam znać czy się udało

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Jan G.:
Chyba coś źle zrozumiałem, pozycje na zleceniu były realizowane osobno(nie jednym ruchem), zgadza się?

Jeśli tak to od wartości zamówionej musimy sumować produkcje z całego ZLM a nie tylko z właśnie teraz realizowanych(zaznaczonych) produktów, proponuję zrobić tak(za literówki itp przepraszam):

SELECT
TD = ART.[NAZWA],
'',
TD = ART.[INDEKS_KATALOGOWY],
'',
TD = STR(POZYCJE_ZLECENIA.[WYPRODUKOWANO],6,0),
'',
TD = STR(PZ.[ZAMOWIONO], 6, 0),
'',
TD = STR(POZYCJE_WYPRODUKOWANE.[WYPRODUKOWANO]-PZ.[ZAMOWIONO],6,0),
'',
TD = POZYCJE_ZLECENIA.[JEDNOSTKA]
FROM ARTYKUL AS ART
INNER JOIN POZYCJE_ZLECENIA ON ART.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU
INNER JOIN ZAZNACZONE ON ZAZNACZONE.ID=POZYCJE_ZLECENIA.ID_POZYCJI
INNER JOIN POZYCJA_ZAMOWIENIA AS PZ ON PZ.ID_ARTYKULU=POZYCJE_ZLECENIA.ID_ARTYKULU

INNER JOIN (SELECT ID_ARTYKULU, SUM([WYPRODUKOWANO]) as WYPRODUKOWANO,ID_ZLECENIA from POZYCJE_ZLECENIA group by ID_ARTYKULU, ID_ZLECENIA) as POZYCJE_WYPRODUKOWANE on PZ.ID_ARTYKULU=POZYCJE_WYPRODUKOWANE.ID_ARTYKULU AND POZYCJE_WYPRODUKOWANE.ID_ZLECENIA=POZYCJE_ZLECENIA.ID_ZLECENIA

WHERE ZAZNACZONE.ID_SESJI=@IdUzytkownika and ZAZNACZONE.UZYCIE=50 AND PZ.ID_ZAMOWIENIA=@NRZAM

Jedyną formą podziękowania za pomoc jaką mogę użyć to szczere DZIĘKUJE
Działa poprawnie, błąd z informacją został wyprowadzony
Problem rozwiązany Ten post został edytowany przez Autora dnia 17.07.15 o godzinie 16:02
Jan G.

Jan G. Informatyk

Temat: [Procedura] - Powiadomienie email jak pogrupować te same...

Sprawdź jeszcze co sie dzieje w przypadku realizacji obydwu pozycji na raz. I jeszcze w przypadku powtórzone artykułu na zamówieniu :) myślę że coś się może wykrzaczyć, ale nie dam głowy w razie problemów jest forum:)



Wyślij zaproszenie do