W tej konkretnej bazie, wszystkie produky (urządzenia) wprowadzane są detalicznie, każdy ma swój indywidualny numer seryjny. Ten numer wpisywany jest jako Kod dostawy i występuje w bazie danych w tabeli/polu: dok_Pozycja.ob_NumerSeryjny.
Potrzebuję zrobić zapytanie SQL, które zwróci mi listę wszystkich urządzeń z numerem seryjnym (czyli Kodem dostawy) i informacją, czy dane urządzenie jest jeszcze na magazynie, czy już z niego zeszło.
Jedyne co wymyśliłem, to sprawdzić typ dokumentu magazynowego powiązanego z ostatną pozycją - a potem na podstawie tego typu ustalić, czy urzadzenie zeszło z magazymnu, czy nie:
SELECT
P.ob_NumerSeryjny,
D.dok_Typ
FROM
dok_Pozycja P,
dok__Dokument D
WHERE
D.dok_Id = P.ob_DokMagId
AND P.ob_id = (SELECT MAX(ob_id) FROM dok_Pozycja WHERE ob_DokMagId is not null AND ob_NumerSeryjny = P.ob_NumerSeryjny)
AND D.dok_Status = 1 -- 1-wykonany
Działa, ale wolałbym wyciągnąć bezpośrednio z bazy danych informację, czy dane urządzenie jest na magazynie, czy już nie.
Próbowałem wyciągnąć to z dok_MagRuch.mr_Pozostalo ale to pole zawsze dla ostatniego dokumentu ma wartość '1' nawet jeśli jest to dokument typu WZ (dok_Typ=11):
SELECT
P.ob_NumerSeryjny,
D.dok_Typ,
R.mr_Pozostalo
FROM
dok_Pozycja P,
dok__Dokument D,
dok_MagRuch R
WHERE
D.dok_Id = P.ob_DokMagId
AND R.mr_PozId = P.ob_Id
AND P.ob_id = (SELECT MAX(ob_id) FROM dok_Pozycja WHERE ob_DokMagId is not null AND ob_NumerSeryjny = P.ob_NumerSeryjny)
AND D.dok_Status = 1 -- 1-wykonany
Jakaś podpowiedź, jak można zrobić to lepiej?
Albo, co tak naprawdę zawiera pole mr_Pozostalo, bo raczej nie jest to ilość pozostała w magazynie po wykonaniu tego ruchu magazynowego.