Autor Wątek: Pomoc przy poprawieniu zapytania sql  (Przeczytany 2274 razy)

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

Offline czarli

  • Nowy użytkownik
  • *
  • Wiadomości: 2
  • Reputacja +0/-0
  • Wersja programu: 1.63
Pomoc przy poprawieniu zapytania sql
« dnia: Kwiecień 20, 2023, 15:51:14 »
Cześć, mam zapytanie SQL które listuje pozycje faktur zawierających dany tekst w nazwie, niestety gdy trafię na fakturę zbiorczą pojawia mi się błąd wykonania zapytania. Ktoś mógłby rzucić okiem gdzie jest bład? Od razu zaznaczę, że nie jestem specjalistą w SQL a zapytanie tworzył ktoś inny.. Jeśli listuję wśród zwykłych faktur - zapytanie działa...


-----------------------

SELECT

dok_NrPelny as Nr_Dokumentu,
dok_DataWyst as Data,
tw__Towar.tw_Nazwa as Nazwa,
tw__Towar.tw_Symbol as Symbol_Towaru,
dok_Pozycja.ob_Ilosc AS Ilosc,
ob_CenaNetto as Cena_Netto,
ob_CenaBrutto as Cena_Brutto,
ob_WartNetto as Wartość_Netto,
ob_WartBrutto as Wartość_Brutto,
dok_Pozycja.ob_WartMag as Wart_Mag,
tw_Pole1 as Koszt_inne,
Sum(([ob_WartNetto]-[ob_WartMag])/[ob_WartNetto]*100) as Marz_Proc,
Sum(([ob_CenaNetto]-([ob_WartMag]/ob_Ilosc))) as Marz_J_Wart,
Sum(([ob_WartNetto]-[ob_WartMag])) as Marz_Wart,
dok_Uwagi as Dokument_Uwagi


FROM
dok__Dokument
INNER JOIN dok_Pozycja ON dok_Pozycja.ob_DokHanId = dok__Dokument.dok_Id
INNER JOIN tw__Towar ON dok_Pozycja.ob_TowId = tw__Towar.tw_Id
INNER JOIN sl_GrupaTw ON tw__Towar.tw_IdGrupa = sl_GrupaTw.grt_Id

WHERE
(dok__Dokument.dok_Typ IN({CHL:faktura sprzedaży#2#faktura sprzedaży zbiorcza#3#paragon#21#korekta#6#zwrot detaliczny#14:Typ dokumentu:2,3,21,6,14:Faktura sprzedaży,Faktura sprzedaży zbiorcza,Paragon,Korekta,Zwrot detaliczny}))
and dok_MagId IN ({CHL_DB: SELECT mag_Id, mag_Nazwa FROM sl_Magazyn:Magazyn:1,5:Główny,Witryna})
and dok_DataWyst BETWEEN  {DR: Z przedziału }
and tw_Nazwa like ('%{T:Podaj nazwę towaru}%')


GROUP BY
dok_NrPelny,
dok_DataWyst,
tw__Towar.tw_Nazwa,
tw__Towar.tw_Symbol,
dok_Pozycja.ob_Ilosc,
ob_CenaNetto,
ob_CenaBrutto,
ob_WartNetto,
ob_WartBrutto,
tw__Towar.tw_Pole1,
grt_Nazwa,
dok_Pozycja.ob_WartMag,
dok_Uwagi;

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Pomoc przy poprawieniu zapytania sql
« Odpowiedź #1 dnia: Kwiecień 20, 2023, 16:40:13 »
Błąd jest w tym że faktura zbiorcza (tzn jej pozycja) nie zawiera informacji finalnej tylko różnicową.
Tzn jeśli np na WZ była 1 szt za 10 PLN na FSz ma być 1 szt za 11 PLN to pozycja faktury zbiorczej podaje ilość 0 (bo się nie zmieniła) i cena 1 PLN (bo wzrosła o 1PLN od ceny na WZ).
Trzeba zupełnie inaczej policzyć pozycje z faktur zbiorczych a inaczej ze zwykłych i to jeszcze uwzględniając czy pozycja była oryginalna (była już na WZ, z której zrobiono FSz) czy powstała jako automatyczna przy zmianie ilości na FSz.
To nie jest proste poprawienie tego co tam jest, tylko rozbudowanie tego zestawienia mniej więcej 3-krotnie.
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Pomoc przy poprawieniu zapytania sql
« Odpowiedź #2 dnia: Kwiecień 20, 2023, 17:54:53 »
Cześć, mam zapytanie SQL które listuje pozycje faktur zawierających dany tekst w nazwie, niestety gdy trafię na fakturę zbiorczą pojawia mi się błąd wykonania zapytania.

Generowany jest błąd o treści:

Divide by zero error encountered.

czyli po polsku "Pamiętaj cholero, nie dziel przez zero".

Ktoś mógłby rzucić okiem gdzie jest bład?

Błędów jest wiele, poza zabezpieczeniem przed dzieleniem przez zero (ob_Ilosc - ilość na pozycji dokumentu może być zerowa) to największy został już wskazany, potwierdzam - brak obsługi faktur zbiorczych.

Od razu zaznaczę, że nie jestem specjalistą w SQL a zapytanie tworzył ktoś inny...

Tylko dlaczego korzystasz z rozwiązań kogoś, kto nie zna podstaw działania programu, jeśli dostarczał inne rozwiązanie to polecam je przeanalizować.
Daniel, Białystok.

Offline candy

  • Zaawansowany użytkownik
  • ****
  • Wiadomości: 4876
  • Reputacja +172/-11
Odp: Pomoc przy poprawieniu zapytania sql
« Odpowiedź #3 dnia: Kwiecień 20, 2023, 18:43:37 »
Tak na oko to jeszcze towary nienależące do zadnej grupy ne zostaną w ogóle pokazane (INNER JOIN zamiast LEFT JOIN + brak obsługi NULL).
Nie pytaj co rząd może zrobić dla Ciebie. Spytaj czy mógłby tego nie robić.

Offline dkozlowski

  • Ekspert
  • *****
  • Wiadomości: 17059
  • Reputacja +798/-27
  • Wersja programu: GT/Navireo/nexo
Odp: Pomoc przy poprawieniu zapytania sql
« Odpowiedź #4 dnia: Kwiecień 21, 2023, 10:16:21 »
Nie ma obsługi faktur detalicznych... Cena magazynowa jest wyliczana na podstawie ilości w jednostce miary dokumentu, a nie jednostki miary magazynowej.
Daniel, Białystok.

Forum Użytkownikow Subiekt GT

Odp: Pomoc przy poprawieniu zapytania sql
« Odpowiedź #4 dnia: Kwiecień 21, 2023, 10:16:21 »