Nettobetrag ausrechnen

Alles, was PHP betrifft, kann hier besprochen werden.

Nettobetrag ausrechnen

Postby Knight1 » 07. May 2006 10:00

Hi Com,
ich arbeite zur Zeit an einem Online-Getränke-Angebotskalkulator.
Da dort auch die Möglichkeit gegeben sein soll einen Brutto-Preis für ein Getränk anzugeben und ich aber mit den Netto-Preisen rechnen muss, ist es nötig die aktuelle Mehrwertsteuer aus dem Netto-Preis herauszurechnen.

Ich habe folgende for-Schleife gebaut:

Code: Select all
for ($ausstattung_leihgebuehr_brutto=0;$ausstattung['leihgebuehr'] > bcadd($ausstattung_leihgebuehr_brutto,bcmul($ausstattung_leihgebuehr_brutto,$mwst));$ausstattung_leihgebuehr_brutto = bcadd($ausstattung_leihgebuehr_brutto,$add));


Diese läuft mir aber immer in die Zeitbgrenzung und verursacht auch eine hohe CPU-Last.

Gibt es vielleicht eine andere Möglichkeit die Mehrwertsteuer aus einem Netto-Betrag herauszurechnen? Oder gibt es etwas in der for-Schleife was ich optimieren kann?

Bin für jeden Tipp dankbar.
Ich bin Kaufmännisch nicht so der Kenner.


Kai aka Knight1
PS: Die Variablen $add und $mwst werden korrekt übergeben.
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby semtex » 07. May 2006 11:25

schleifen sind immer lastig und in deinem fall auch unnötig..

$add ="100";
$mwst ="16";

$Nettopreis = $add / ($mwst/10);

echo $Nettopreis;

du brauchst doch nur einmalig aus dem formular die werte übergeben und berechnen lassen, oder kommen die daten aus einer datenbank und du willst alle daten nachträglich berechnen..

selbst dann wäre eine berechnungsschleife unnötig, da du es gleich bei der abfrage berechnen könntest..

oder habe ich da was nicht ganz verstanden ?
semtex
 
Posts: 57
Joined: 12. April 2006 16:41

Postby Knight1 » 07. May 2006 12:15

Hi temex,
die Variable $ausstattung['leihgebuehr'] kommt aus der Datenbank und ist der Nettopreis inklusive Mehrwertsteuer.
Die Variable $mwst wird vorher schon berechnet und liefert den Wert 0.16.
Die Variable $add hat den Wert 0.0001.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby semtex » 07. May 2006 12:59

Dann holste mit einer DB Abfrage den Bruttopreis und die MwSt aus der Datenbank und berechnest den Nettopreis gleich in der DB Abfrageschleife

$sql = "SELECT bruttopreis, mwst FROM DEINETABELLE WHERE artikelid='$id'";

$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$nettopreis = bruttopreis / ($mwst+1);
echo $nettopreis;
}

Die Abfrage berechnet dir alle Nettopreise von Artikeln die möchtest Du(artikelid='$id')
Du musst natürlich dein Variablen oben anpassen..
semtex
 
Posts: 57
Joined: 12. April 2006 16:41

Postby Knight1 » 07. May 2006 13:43

semtex wrote:Dann holste mit einer DB Abfrage den Bruttopreis und die MwSt aus der Datenbank und berechnest den Nettopreis gleich in der DB Abfrageschleife

$sql = "SELECT bruttopreis, mwst FROM DEINETABELLE WHERE artikelid='$id'";

$result = mysql_query($sql);
while ($row = mysql_fetch_array($result))
{
$nettopreis = bruttopreis / ($mwst+1);
echo $nettopreis;
}

Die Abfrage berechnet dir alle Nettopreise von Artikeln die möchtest Du(artikelid='$id')
Du musst natürlich dein Variablen oben anpassen..


Danke semtex. Das funktioniert. Sorry dass ich Dir einen anderen Namen gegeben habe.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby Wiedmann » 07. May 2006 15:37

Code: Select all
$sql = "SELECT bruttopreis, mwst FROM DEINETABELLE WHERE artikelid='$id'";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    $nettopreis = $row['bruttopreis'] / ($row['mwst'] + 1);
    echo $nettopreis;
}

Also, das kannst du auch gleich in der DB machen...

Code: Select all
$sql = "
    SELECT
        `bruttopreis`,
        `mwst`,
        `bruttopreis` / (`mwst` + 1) AS `nettopreis`
    FROM `DEINETABELLE`
    WHERE `artikelid` = $id
";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    print_r($row);
}
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby Knight1 » 07. May 2006 18:06

Wiedmann wrote:
Code: Select all
$sql = "SELECT bruttopreis, mwst FROM DEINETABELLE WHERE artikelid='$id'";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    $nettopreis = $row['bruttopreis'] / ($row['mwst'] + 1);
    echo $nettopreis;
}

Also, das kannst du auch gleich in der DB machen...

Code: Select all
$sql = "
    SELECT
        `bruttopreis`,
        `mwst`,
        `bruttopreis` / (`mwst` + 1) AS `nettopreis`
    FROM `DEINETABELLE`
    WHERE `artikelid` = $id
";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    print_r($row);
}


Das wird so nicht funktionieren da ich den Mehrwertsteuersatz in einer anderen Tabelle stehen habe. Die Variable $mwst enthält ausserdem schon den durch 100 geteilten Mehrwertsteuersatz von 16% der aus der Config-Tabelle kommt und in dem Ergebnisarray $config['mwst'] vorliegt.

Trotzdem aber Danke für den Beitrag. Wenn ich mal was zu verechnen habe was in der selben Tabelle liegt weiß ich jetzt wo ich nachschauen kann.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64

Postby semtex » 07. May 2006 18:16

es gibt verschieden wege die zum ziel führen, berechnungen im select sind aber meistens lastiger, kommt halt auf deinen datenbestand und den umfang der berechnung an..

ein problem sollte eine abfrage und berechnung über zwei tabellen per "LEFT JOIN" nicht darstellen...
Last edited by semtex on 07. May 2006 18:19, edited 1 time in total.
semtex
 
Posts: 57
Joined: 12. April 2006 16:41

Postby Wiedmann » 07. May 2006 18:18

Das wird so nicht funktionieren da ich den Mehrwertsteuersatz in einer anderen Tabelle stehen habe.

Wen juckts...;-) du kannst doch bei einem SELECT soviel Tabellen ansprechen wie du willst...

Die Variable $mwst enthält ausserdem schon den durch 100 geteilten Mehrwertsteuersatz von 16% der aus der Config-Tabelle kommt und in dem Ergebnisarray $config['mwst'] vorliegt.

Was immer du jedenfalls in PHP rechnest, kannst du mit der selben Formel auch in der DB machen, da ja die Daten eh alle aus der DB kommen. (und sollte deshalb also bevorzugt auch dort berechnet werden... die macht das zudem schneller als PHP). Wenn in der Spalte "mwst" deiner configtabelle also nur eine "16" steht, dann berücksichte das halt:
Code: Select all
$sql = "
    SELECT
        `bruttopreis`,
        `CONFIGTABELLE`.`mwst`,
        `bruttopreis` / ((`CONFIGTABELLE`.`mwst` /  100) + 1) AS `nettopreis`
    FROM `DEINETABELLE`
    WHERE `artikelid` = $id
";


BTW: wenn du mit Geldbeträgen in PHP rechnest, solltest du dich mal mit der Genaugkeit von Floats in PHP beschäftigen.
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

.

Postby semtex » 07. May 2006 18:28

..
Last edited by semtex on 07. May 2006 19:03, edited 1 time in total.
semtex
 
Posts: 57
Joined: 12. April 2006 16:41

Postby Knight1 » 07. May 2006 18:41

Wiedmann wrote:
Das wird so nicht funktionieren da ich den Mehrwertsteuersatz in einer anderen Tabelle stehen habe.

Wen juckts...;-) du kannst doch bei einem SELECT soviel Tabellen ansprechen wie du willst...

Die Variable $mwst enthält ausserdem schon den durch 100 geteilten Mehrwertsteuersatz von 16% der aus der Config-Tabelle kommt und in dem Ergebnisarray $config['mwst'] vorliegt.

Was immer du jedenfalls in PHP rechnest, kannst du mit der selben Formel auch in der DB machen, da ja die Daten eh alle aus der DB kommen. (und sollte deshalb also bevorzugt auch dort berechnet werden... die macht das zudem schneller als PHP). Wenn in der Spalte "mwst" deiner configtabelle also nur eine "16" steht, dann berücksichte das halt:
Code: Select all
$sql = "
    SELECT
        `bruttopreis`,
        `CONFIGTABELLE`.`mwst`,
        `bruttopreis` / ((`CONFIGTABELLE`.`mwst` /  100) + 1) AS `nettopreis`
    FROM `DEINETABELLE`
    WHERE `artikelid` = $id
";


BTW: wenn du mit Geldbeträgen in PHP rechnest, solltest du dich mal mit der Genaugkeit von Floats in PHP beschäftigen.


Was die Genauigkeit angeht nutze ich die bcmath-Funktionen und setze deren Anzahl der Nachkommastellen (falls Du das mit Genauigkeit meinst) per bcscale(100); global auf, wie zu sehen ist, 100 Stellen.

Eine Frage habe ich da noch zu Deinem Beispiel.
Ich kann in der Preiszelle sowohl Brutto- als auch Nettopreise haben und diffenziere das mittels eines Schalters den ich "zusaetzlich_mwst" (ist ein ENUM-Feld welches die Werte 0 für inklusive Mwst. und 1 für zusätzlich Mwst. annehmen kann) genannt habe. Dementsprechend lasse ich halt von PHP die entsprechende Rechnung machen und Darstellung bauen.
Wie müsste jetzt die Abfrage aussehen wenn das noch berücksichtig werden muss.

Bin nicht so der MySQL-Kenner. Hatte bisher noch keine Abfragen solcher Art benötigt. Nur einfachste SELECT's.


Danke für die Anwort.


Kai aka Knight1
Image
User avatar
Knight1
 
Posts: 310
Joined: 18. October 2003 10:03
Location: Trier
Operating System: Windows 7 Ultimate x64


Return to PHP

Who is online

Users browsing this forum: No registered users and 2 guests