Co jeśli ktoś z góry zapłaci za kilka abonamentów???
A więc tak, zaznaczam tego ptaszka i daję zaznacz abonamenty wtedy wyskakuje błąd "Floating point division by zero." i program zawiesza się czekałem tak 30 minut i nic, zaznaczył może ze 3 wpłaty i to nie te które miał podzielić tylko te co są wpłacone prawidłowo. Jedno co można zrobić to zamknąć program i uruchomić ponownie bo jest tak zmulony że nic nie da rady zrobić.
Jeśli to pomoże to ja bym to zrobil tak:
const
LICZBA_MIESIECY_BLEDNA_WPLATA = -1;
function zaIleMiesiecyMiGosciuZaplacil(wplata:real; wysokoscAbonamentu:real): integer;
var
liczbaMiesiecy : integer;
begin
liczbaMiesiecy := trunc(wplata / wysokoscAbonamentu);
if ((liczbaMiesiecy * wysokoscAbonamentu) <> wplata) then
begin
liczbaMiesiecy := LICZBA_MIESIECY_BLEDNA_WPLATA;
end
Result := liczbaMiesiecy;
end;
{----------------------------------------------------------}
i w petli
miesiace := zaIleMiesiecyMiGosciuZaplacil(wplata, wysokoscAbonamentu);
if (miesiace = LICZBA_MIESIECY_BLEDNA_WPLATA) then
OLAC GOSCIA, BO MA ZLA KWOTE
else
liczba_miesiecy
no chyba że się mylę bo dobry w te klocki to ja nie jestem.
Jeśli to pomoże to ja bym to zrobil tak:
const
LICZBA_MIESIECY_BLEDNA_WPLATA = -1;
function zaIleMiesiecyMiGosciuZaplacil(wplata:real; wysokoscAbonamentu:real): integer;
var
liczbaMiesiecy : integer;
begin
liczbaMiesiecy := trunc(wplata / wysokoscAbonamentu);
if ((liczbaMiesiecy * wysokoscAbonamentu) <> wplata) then
begin
liczbaMiesiecy := LICZBA_MIESIECY_BLEDNA_WPLATA;
end
Result := liczbaMiesiecy;
end;
{----------------------------------------------------------}
i w petli
miesiace := zaIleMiesiecyMiGosciuZaplacil(wplata, wysokoscAbonamentu);
if (miesiace = LICZBA_MIESIECY_BLEDNA_WPLATA) then
OLAC GOSCIA, BO MA ZLA KWOTE
else
liczba_miesiecy
no chyba że się mylę bo dobry w te klocki to ja nie jestem.
Podejrzewam, ze masz jakiegos klienta ktory ma abonament 0 zl a dostal wplate na konto. Zabezpiecze sie przed tym.
Co do drugiej czesci to sprawdzam na wstepie warunek czy:
(wplata/wysokoscAbonamentu) = trunc(wplata/wysokoscAbonamentu)
Jesli tak, to wiadomo, ze wplata jest calkowita krotnoscia abonamentu i robimy dalsza "obrobke" pod katem rozksiegowania takiej wplaty. To wystarcza.
Co do drugiej czesci to sprawdzam na wstepie warunek czy:
(wplata/wysokoscAbonamentu) = trunc(wplata/wysokoscAbonamentu)
Jesli tak, to wiadomo, ze wplata jest calkowita krotnoscia abonamentu i robimy dalsza "obrobke" pod katem rozksiegowania takiej wplaty. To wystarcza.
Piotr Szkut - PYXIS
Mam to samo co kolega wcześniej. Robie masówke i widzę klienta z podwójnym abo.
Klikam zaznacz i zaksieguj - program doszedł z zaznaczaniem do gościa z 2x abonamntem (widać po gwiazdkach w 2 kolumnie)i wywalił komunikat Floating point division by zero
Edit: w sumie okazało się że ten gość wpłacił na konto usera nieaktywnego jeśli to może pomóc
Klikam zaznacz i zaksieguj - program doszedł z zaznaczaniem do gościa z 2x abonamntem (widać po gwiazdkach w 2 kolumnie)i wywalił komunikat Floating point division by zero
Edit: w sumie okazało się że ten gość wpłacił na konto usera nieaktywnego jeśli to może pomóc
Tylko zastanawia mnie jak się program zachowa w przypadku jak powyżej jeśli wpłata będzie pochodziła od usera neiaktywnego - przydałoby się jakieś powiadomienie wyskakujące o takim fakcie. Jeśli chodzi o zaległość to nie ma problemu, ale w moim przypadku jest trochę inaczej. Mianowicie pewien gość się przeprowadził z lokalizacji A do B. W lokalizacji A zlikwidował umowe a w lokalizacji B już istniało przyłącze z inną umową. ALe zamiast płacić na konto umowy lokalizacji B płacił na soje stare z lokalizacji A. I z tego wynikł problem u mnie.
A kolega przypisuje konto do lokalizacji a nie do klienta
? Ja nigdy nie mam problemu jeśli klient zmienia miejsce instalcji i zamieszkania bo konto do płatności zostaje mu zawsze to samo.
Piotrze może jednak zrobić taką możliwość jak kiedyś podpowiadałem , by można było kopiować dane dla nowo tworzonego klienta: czyli imie, nazwisko itp do wyboru. Przydaje się właśnie przy przenoszeniu umowy dla klienta pod inny adres zameldowania i zmienia się adres oraz numer dowodu, a reszta pozostaje ta sama.
Piotrze może jednak zrobić taką możliwość jak kiedyś podpowiadałem , by można było kopiować dane dla nowo tworzonego klienta: czyli imie, nazwisko itp do wyboru. Przydaje się właśnie przy przenoszeniu umowy dla klienta pod inny adres zameldowania i zmienia się adres oraz numer dowodu, a reszta pozostaje ta sama.