Avatar billede skindbeni Nybegynder
16. april 2008 - 22:19 Der er 5 kommentarer og
1 løsning

Beregning foretages ikke korrekt i mit projekt

Hej.

Jeg arbejder på et skatteberegningsprogram og har en unit kaldet "Skatteberegning" med selve koderne til at beregne skatten.

Til at gemme de indtastede og beregnede beløb, har jeg et par ClientDataSets i mit datamodul. Felterne i clientdatasettet cdsSkatter1 hedder: Bundskat, Mellemskat, ... Indkomstskat.

Jeg har opbygget Skatteberegningen ved følgende princip:

//Bundskat
function BeregnBundskat(PI: integer;KI,KIaf: Integer;Gift: integer): integer;
begin
  { Tager som grundlag den personlige indkomst}
  Result:= PI;
  { Dertil lægges en eventuel positiv kapitalindkomst}
  If KI > 0 then Result:= Result + KI;
  { Dertil fratrækkes en evt. negativ kapitalindkomst for ægtefællen, dog højst ens eget positive kapitalindkomst}
  If (Gift = 1) and (KIaf < 0) then Result:= Result - Min(KI,KIaf * -1);
  { Bundskatten udregnes udfra ovenstående grundlag x satsen for bundskat}
  Result:= Round(Result * SatsBundskat);
end;

Procedure BeregnBundskat1;
begin
  with dmData do
  begin
    cdsSkatter1Bundskat.AsInteger := BeregnBundskat(cdsPI1PI.asInteger,cdsKI1KI.AsInteger,cdsKI2KI.AsInteger,cdsStamdata1Gift.AsInteger);
  end;
end;

Procedure BeregnBundskat2;
begin
  with dmData do
  begin
    cdsSkatter2Bundskat.AsInteger := BeregnBundskat(cdsPI2PI.AsInteger,cdsKI2KI.AsInteger,cdsKI1KI.AsInteger,cdsStamdata1Gift.AsInteger);
  end;
end;

osv. for alle andre typer af skat og indkomster mv.

Den samlede skat skal beregnes / lægges sammen ved funktionen

Function BeregnIndkomstskat(Bundskat,mellemskat,...FradragSundhed: integer): integer;
Begin
  Result := Bundskat + Mellemskat + ... FradragSundhed;
end;

Nederst i min unit har jeg så en procedure, der hedder BeregnSkat, hvor alle beregningerne ligger i.

Procedure BeregnSkat;
Begin
  ...
  BeregnPI1;
  ...
  BeregnBundskat1;
  ...
  BeregnIndkomstskat1;
end;

... = udeladelser af kode af hensyn til mængden

Mit problem er, at alle felterne i mit cdsSkatter bliver beregnet rigtigt, men sammentællingen i "Indkomstskat" bliver enten 0 (nul) eller lig med FradragSundhed, som er sidste parameter i funktionen.

Jeg kan ikke se løsningen, idet Proceduren BeregnSkat står sidst i min unit og i proceduren står BeregnBundskat, BeregnMellemskat osv før BeregnIndkomstskat, så alle delværdierne ER beregnet.
Avatar billede spil2vind Nybegynder
16. april 2008 - 22:44 #1
Du er nødt til at tildele BeregnBundskat, den værdi som der beregnes i din function
Avatar billede skindbeni Nybegynder
16. april 2008 - 23:03 #2
Hej.

Jeg fangede ikke lige, hvad du hentyder til.

Men Bundskatten og de øvrige enkelte skatter bliver beregnet OK. Jeg har DBText-komponenter, der viser både cdsSkatter1Bundskat, cdsSkatter1Mellemskat, ... cdsSkatter1FradragSundhed med de korrekte beregnede tal. Det er først, når disse skal slås sammen til den samlede skat, at det går galt.
Avatar billede martinlind Nybegynder
17. april 2008 - 11:07 #3
Det er sikkert dine Typer du skal kigge på, en integer har en max  værdi, det kunne være den du nåede, og derved ikke får det rigtige resultat.


Result := Bundskat + Mellemskat + ... FradragSundhed;

Delphi vil lægge alle tre værdier sammen i bundskat og så retunere resultat i Result.
Avatar billede skindbeni Nybegynder
17. april 2008 - 18:30 #4
Det er ikke værdien, der overstiger den maksimale værdi af en integer. Jeg har forsøgt at minimere resultatet, således at jeg ved hver parameter manuelt skriver "1" (et), så resultatet burde blive <20. Samme problem. Det endelige resultat blev 1 (værdien af FradragSundhed).

Vedr. det sidste i dit indlæg, Martin, hvad bør jeg så gøre? Hvordan er det korrekt at skrive i stedet for Result := Bundskat + Mellemskat ++ ... FradragSundhed;?
Avatar billede skindbeni Nybegynder
20. april 2008 - 19:08 #5
Har fundet ud af, at det handlede om noget med at sætte felterne til Calculated i min ClientDataSet.
Avatar billede martinlind Nybegynder
20. april 2008 - 22:41 #6
du skal sørge for at dine var's kan indeholde dine mellemregninger :-)
ikke andet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Forsvarsministeriets Materiel- og Indkøbsstyrelse

Netværksteknikere til design, drift og vedligehold ved Cyberdivisionen

Politiets Efterretningstjeneste

CNE-specialist til PET`s indhentningsafdeling

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Ringkjøbing Landbobank – Nordjyske Bank

Forretningsudvikler til procesoptimering