Forum Użytkownikow Subiekt GT
InsERT GT => Dodatki - zestawienia - sfera => Wątek zaczęty przez: pher959 w Listopad 06, 2018, 20:28:05
-
Witam
Wyciągnąłem za pomocą Profilera zapytanie zestawienia sprzedaży wg dokumentów
Problem jest w tym że gdy chce dorzucić dok_Wystawil wywala błędy
Drugim problemem jest błędne liczenie wartości magazynowej przez co w komórce pokazuje sie 0
Zapytanie zmodyfikowane prze zemnie:
SELECT dok_Id, dok_DataWyst, dok_NrPelny, adrh_Nazwa, dok_WartNetto, dok_WartBrutto,
SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END) * (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END)
+ (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END))
as dok_WartMag,
( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) - SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END) * (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END)
+ (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END))
as Zysk,
Marza = ROUND(CONVERT(MONEY, CASE WHEN ( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) <> 0 THEN
100* (( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) - SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE
(CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END)
* (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END) + (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0
THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END)) ) /
( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) ELSE 0.00 END), 2) * (CASE WHEN ((dok_Typ = 14) OR ((dok_Typ = 6) AND (( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) < 0))) THEN -1 ELSE 1 END) ,
YEAR(dok_DataWyst) AS Rok
, mag_Symbol + ' ' + mag_Nazwa AS magazyn
FROM vwZstSprzWgDok
LEFT JOIN adr_Historia ON dok_PlatnikAdreshId = adrh_Id
LEFT JOIN dok_Pozycja ON dok_Id = ob_DokHanId
LEFT JOIN sl_Magazyn ON mag_Id = dok_MagId
WHERE (( (dok_DataWyst>='20181001') AND (dok_DataWyst<='20181031') ) AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (131072,131074)) AND (dok_MagId IN (1))) AND dok_Status<>2 AND NOT((dok_Typ = 6) AND (dok_Podtyp = 2))
GROUP BY dok_Id, dok_typ, dok_DataWyst, dok_NrPelny, adrh_Nazwa, dok_WartNetto, dok_WartBrutto, dok_WartMag, dok_WartOpWyd, dok_WartOpZwr, mag_Symbol, mag_Nazwa
ORDER BY dok_Id
Ktoś podpowie może co jest nie tak ?
-
Problem jest w tym że gdy chce dorzucić dok_Wystawil wywala błędy
I pewnie myślisz że wróżka nam powie jak chcesz dorzucić dok_Wystawil i jakie wywala błędy?
No to niestety, moja powiedziała że ją głowa boli.
Drugim problemem jest błędne liczenie wartości magazynowej przez co w komórce pokazuje sie 0
W której komórce? Tej, którą nazwałeś dok_WartMag?
No to u mnie pokazuje tyle co trzeba, ale przyznaję że sprawdziłem na bardzo prostych danych.
Musisz się trochę bardziej postarać ;)
-
SELECT dok_Id, dok_DataWyst, dok_NrPelny, adrh_Nazwa, dok_WartNetto, dok_WartBrutto, dok_Wystawil,
SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END) * (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END)
+ (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END))
as dok_WartMag,
( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) - SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END) * (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END)
+ (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END))
as Zysk,
Marza = ROUND(CONVERT(MONEY, CASE WHEN ( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) <> 0 THEN
100* (( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) - SUM((CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 4) THEN 0 ELSE
(CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0 THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_Id)*dok_Pozycja.ob_Znak END) END)
* (CASE WHEN dok_Typ = 14 THEN -1 ELSE 1 END) + (CASE WHEN (dok_Typ = 2 AND dok_PodTyp = 5) THEN (CASE WHEN (dok_Pozycja.ob_TowRodzaj&6)>0
THEN 0 ELSE dbo.fnZestSub_KosztSpr('20181031', dok_Pozycja.ob_DoId)*dok_Pozycja.ob_Znak END) ELSE 0 END)) ) /
( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) ELSE 0.00 END), 2) * (CASE WHEN ((dok_Typ = 14) OR ((dok_Typ = 6) AND (( dok_WartNetto + (dok_WartOpWyd-dok_WartOpZwr) ) < 0))) THEN -1 ELSE 1 END) ,
YEAR(dok_DataWyst) AS Rok
, mag_Symbol + ' ' + mag_Nazwa AS magazyn
FROM vwZstSprzWgDok
LEFT JOIN adr_Historia ON dok_PlatnikAdreshId = adrh_Id
LEFT JOIN dok_Pozycja ON dok_Id = ob_DokHanId
LEFT JOIN sl_Magazyn ON mag_Id = dok_MagId
WHERE (( (dok_DataWyst>='20181001') AND (dok_DataWyst<='20181031') ) AND (dbo.fnMAKE_DOKPARAM(dok_Typ, dok_Podtyp) IN (131072,131074)) AND (dok_MagId IN (1))) AND dok_Status<>2 AND NOT((dok_Typ = 6) AND (dok_Podtyp = 2))
GROUP BY dok_Id, dok_typ, dok_DataWyst, dok_NrPelny, dok_Wystawil, adrh_Nazwa, dok_WartNetto, dok_WartBrutto, dok_WartMag, dok_WartOpWyd, dok_WartOpZwr, mag_Symbol, mag_Nazwa
ORDER BY dok_Id
W dok_Wystawil powinien pokazywać się użytkownik który wystawił dokument
a błędy w screenach
-
a gotowe zestawienie wg wystawiajacych?
-
Sprzedaż wg pracowników nie wystarcza ze względu na brak podglądu na dokumenty
-
A sprawdziłeś czy w widoku, którego używasz jest ta kolumna, którą dodajesz?
-
A sprawdziłeś czy w widoku, którego używasz jest ta kolumna, którą dodajesz?
Nie bardzo rozumiem o co ci chodzi. Gdzie to ewentualnie sprawdzić ?
-
A sprawdziłeś czy w widoku, którego używasz jest ta kolumna, którą dodajesz?
Nie bardzo rozumiem o co ci chodzi. Gdzie to ewentualnie sprawdzić ?
Używasz widoku vwZstSprzWgDok - sprawdziłeś czy posiada on pole dok_Wystawil ?
Jak nie ma tam tego pola to niby skąd ma tę wartość wziąć?
-
No to rozwiązano problem "gdy chce dorzucić dok_Wystawil wywala błędy".
Dalej nie wiadomo o co chodzi z "błędne liczenie wartości magazynowej przez co w komórce pokazuje sie 0".
Na obrazku wyraźnie widać że w tej kolumni występują głównie wartości niezerowe.
-
A sprawdziłeś czy w widoku, którego używasz jest ta kolumna, którą dodajesz?
Nie bardzo rozumiem o co ci chodzi. Gdzie to ewentualnie sprawdzić ?
Widok to takie "zapamiętane" zapytanie, które ma swoją nazwę i można odwoływać się do niego podobnie jak do zwykłej tabeli (select * from jakiś_widok). Zwyczajowo dla łatwiejszego odróżnienia widoków od tabel do ich nazw dodaje się przedrostek np. "vw". Jakie kolumny są dostępne w widoku można sprawdzić np. w Management Studio w sekcji views. Brakujące pole dok_wystawił możesz sobie pobrać przez joina na tabelę dok__dokument.
Te faktury z zerowym zyskiem mają wg zestawienia wartość netto równą wartości magazynowej -> sprzedaż po cenach zakupu? Co pokazuje w zysku ctrl+spacja w podglądzie takiego dokumentu w module faktur sprzedaży?