Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Berechnung zum StringGrid (https://www.delphipraxis.net/142252-berechnung-zum-stringgrid.html)

Kunoishi 24. Okt 2009 16:08


Berechnung zum StringGrid
 
Ich habe ein StringGrid in meinem Projekt

Delphi-Quellcode:
procedure TArtikelerfassungForm.SetzeArtikelStringGrid;
begin                                      
  ArtikelStringGrid.rowCount := 2;            
  ArtikelStringGrid.colCount := 7;        
  ArtikelStringGrid.cells[0,0] := 'Nr';    
  ArtikelStringGrid.cells[1,0] := 'Abteilung';
  ArtikelStringGrid.cells[2,0] := 'Abteilung Nr.';
  ArtikelStringGrid.cells[3,0] := 'Artikel';
  ArtikelStringGrid.cells[4,0] := 'Preis';    
  ArtikelStringGrid.cells[5,0] := 'Anzahl';  
  ArtikelStringGrid.cells[6,0] := 'Gesammt';
end;
Jetzt möchte ich in einem Editfeld die Summe aller im StringGrid unter der Überschrift "Gesammt"
aufgelisteten Zahlen die Gesamtsumme dieser haben. :gruebel:

fkerber 24. Okt 2009 16:11

Re: Berechnung zum StringGrid
 
Hi!

Und? ;)
Was hast du denn bisher versucht, um dein Ziel zu erreichen?
Wie ich deinem Code entnehmen kann, weißt du ja, wie du einzelne Zellen ansprechen kannst. Daher wäre es eine mögliche Lösung die entsprechenden Zellen durchzugehen und aufzusummieren - die andere wäre die, es direkt beim Einfügen ins Stringgrid aus der Datenquelle (falls es sich nicht um Benutzeringaben handelt) zu summieren.

HTH


Grüße, Frederic


P.S.
Gesamt

Kunoishi 24. Okt 2009 16:19

Re: Berechnung zum StringGrid
 
Dafür habe ich ja schon eine weile gebraucht :?
jetzt fehlt mir der nächste Ansatz
ich wollte das so versuchen
Delphi-Quellcode:
 SummeLagerwert := SummeLagerwert + EditGesamtpreis.Text;
muß das aber wohl auch in einer schleife Abfragen

fkerber 24. Okt 2009 16:21

Re: Berechnung zum StringGrid
 
Hi!

Was ist denn SummeLagerwert?
Schleife ist aber ein sehr guter Ansatz.


Grüße, Frederic

Kunoishi 24. Okt 2009 16:24

Re: Berechnung zum StringGrid
 
SummeLager sollte am Schluß dann mein Endbertag werden
der sich bei jeder ausgefüllten Zeile dann hochrechnet

fkerber 24. Okt 2009 16:26

Re: Berechnung zum StringGrid
 
Hi!

Auch hier nochmal meine Frage:
Wie kommen denn die Werte ins Stringgrid?

Wann soll diese Gesamtsumme gebildet werden - auf Knopfdruck?



Grüße, Frederic

Kunoishi 24. Okt 2009 16:31

Re: Berechnung zum StringGrid
 
ach so, sorry

ich habe das so gelöst
Delphi-Quellcode:
procedure TArtikelerfassungForm.Button5Click(Sender: TObject);
begin
  Rec.AbteilungName := EditAbteilung.Text;
  Rec.AbteilungNr := EditAbteilungNr.Text;
  Rec.Artikel := EditArtikelBezeichnung.Text;
  Rec.ArtikelAnzahl := EditArtikelAnzahl.Text;
  Rec.ArtikelWert := EditEinzelpreis.Text;
  Rec.ArtikelGesamtpreis := EditGesamtpreis.Text;
  Rec.Fremdobjekt := EditFremdobjekt.Text;
  result := true;
  Rec := rec;
  Artikel.add(Rec);
  Artikel.Show(ArtikelStringGrid);
    InitArtikelerfassungRec(Rec);
    init(Rec);
// SummeLagerwert := SummeLagerwert + EditGesamtpreis.Text;
 end;
dazu habe ich dann einen recorder den haben wir so gestalltet
Delphi-Quellcode:
type TArtikelerfassungRec = packed record
       Datensatz:ShortString;
       AbteilungName:ShortString;
       AbteilungNr:ShortString;
       Artikel:ShortString;
       ArtikelAnzahl:ShortString;
       ArtikelWert:ShortString;
       ArtikelGesamtpreis:ShortString;
       ArtikelVerbleib:ShortString;
       Fremdobjekt:ShortString;

fkerber 24. Okt 2009 16:36

Re: Berechnung zum StringGrid
 
Hi!

Leider sind diese Code-Schnipsel noch nicht sooo aussagekräftig.
Was ist denn Rec, was ist rec, was ist Artikel und was machen die diversen Methoden?


Grüße, Frederic

Kunoishi 24. Okt 2009 16:39

Re: Berechnung zum StringGrid
 
8) irgendwann werde ich auch die gedankengänge der Programmierer verstehen.
ich hoffe das ich hiermit auf dem richtigen weg bin
Delphi-Quellcode:
procedure TArtikelerfassungForm.Init(Rec:TArtikelerfassungRec);
var i:integer;
begin
  EditArtikelBezeichnung.Text := Rec.Artikel;
  EditArtikelAnzahl.Text := Rec.ArtikelAnzahl;
  EditEinzelPreis.Text := Rec.ArtikelWert;
  EditGesamtPreis.Text := Rec.ArtikelGesamtPreis;
  EditVerbleibWare.ItemIndex := 0;
  for i:=1 to EditVerbleibWare.Items.Count-1 do
  begin
    if Rec.ArtikelVerbleib = EditVerbleibWare.Items[i] then
    begin
      EditVerbleibWare.ItemIndex := i;
      break;
    end;
  end;
  EditFremdObjekt.Text := Rec.FremdObjekt;
end;

fkerber 24. Okt 2009 16:56

Re: Berechnung zum StringGrid
 
Hi!

Ich würde dort einsetzen, wo du ins Stringgrid einträgst. Das wäre wohl dann an der Stelle, die du hier gepostet hast.


Grüße, Frederic

Kunoishi 24. Okt 2009 16:58

Re: Berechnung zum StringGrid
 
ok, dit werde ich doch auch gleich mal versuchen

Kunoishi 24. Okt 2009 17:57

Re: Berechnung zum StringGrid
 
mein Versuch

Delphi-Quellcode:
Var
    SummeGesammtwert : double;

...

procedure  CArtikelerfassung.Show(ArtikelGrid:TStringGrid);
var i:integer;
    pRec:pArtikelerfassungRec;
begin
  SummeGesammtwert :=0;
  if Artikel.Count = 0 then
  begin
    ArtikelGrid.RowCount := 2;
    ArtikelGrid.cells[0,1] := '-';
    ArtikelGrid.cells[1,1] := '-';
    ArtikelGrid.cells[2,1] := '-';
    ArtikelGrid.cells[3,1] := '-';
    ArtikelGrid.cells[4,1] := '-';
  end
  else
  begin
    ArtikelGrid.RowCount := Artikel.Count+1;
    for i:=0 to Artikel.Count-1 do
    begin
      pRec := Artikel.Items[i];
      ArtikelGrid.cells[0,i+1] := IntToStr(i+1);
      ArtikelGrid.cells[1,i+1] := pRec^.AbteilungName;
      ArtikelGrid.cells[2,i+1] := pRec^.AbteilungNr;
      ArtikelGrid.cells[3,i+1] := pRec^.Artikel;
      ArtikelGrid.cells[4,i+1] := pRec^.ArtikelWert;
      ArtikelGrid.cells[5,i+1] := pRec^.Anzahl;
      ArtikelGrid.cells[5,i+1] := pRec^.Gesammtpreis;

      SummeGesammtwert := SummeGesammtwert + pRec^.Gesammtpreis;
    end;
  end;
end;
jetzt zeigt er mir aber einen "Inkompatible Typen" als Fehler

fkerber 24. Okt 2009 18:09

Re: Berechnung zum StringGrid
 
Hi!

Ist pRec^.Gesammtpreis zufällig ein String?


Grüße, Frederic


P.S.
Auch hier nochmal die Bitte nicht zu pushen, sondern Sachen nachzueditieren.

Kunoishi 24. Okt 2009 18:11

Re: Berechnung zum StringGrid
 
ja, geht in ein editfeld ja über.
habe ich in keiner weise umgewandelt :gruebel: (glaube ich zumindest)

worin liegt da das problem ?

fkerber 24. Okt 2009 18:23

Re: Berechnung zum StringGrid
 
Hi!

Summegesamtwert ist ein Double und du kannst nicht einfach einen String zu einer Zahl dazuaddieren.
Du musst also zuerst den String umwandeln :arrow: Delphi-Referenz durchsuchentrystrtofloat


Grüße, Frederic

Kunoishi 24. Okt 2009 18:32

Re: Berechnung zum StringGrid
 
na klasse, ich war zufrieden das ich bis hierhin es geschaft hatte.
jetzt das ganze umwandeln und dann bestimmt wieder irgendwie zuordnen und so
ich glaube ich brauch erst mal ne dusche :party:
und dann die bücher und ne hilfe datei :warn:
und wieder viel zeit :cry:

DeddyH 24. Okt 2009 19:21

Re: Berechnung zum StringGrid
 
Ich will ja nicht meckern, aber Du solltest Dich einmal mit elementaren Datentypen und deren Konvertierung auseinandersetzen.

Kunoishi 30. Okt 2009 12:42

Re: Berechnung zum StringGrid
 
so ich habe mich durchgekämpft und es wohl geschaft. Jedenfalls zeigt er mir keinen fehler mehr an und ich mußte hier und da einiges ändern.
aber halb so schlimmmmmmmmm. ich will das ja hier lernen.

jetzt habe ich aber ein scheinbar kleines problem. wie spreche ich jetzt meinen wert an damit ich ihm in meinem Editfeld sehe.
scheinbar sehe ich den wald vor lauter bäumen (bit´s)nicht.

ich brauche hier einen denkanstoß.
Delphi-Quellcode:
rocedure  CArtikelerfassung.Show(ArtikelGrid:TStringGrid);
var i:integer;
    pRec:pArtikelerfassungRec;
begin

  // Initialisierung
  SummeGesamtwert := 0;

  // Verarbeitung und Ausgabe
  if Artikel.Count = 0 then
  begin
    ArtikelGrid.RowCount := 2;
    ArtikelGrid.cells[0,1] := '-';
    ArtikelGrid.cells[1,1] := '-';
    ArtikelGrid.cells[2,1] := '-';
    ArtikelGrid.cells[3,1] := '-';
    ArtikelGrid.cells[4,1] := '-';
    ArtikelGrid.cells[5,1] := '-';
    ArtikelGrid.cells[6,1] := '-';
    ArtikelGrid.cells[7,1] := '-';
    ArtikelGrid.cells[8,1] := '-';
  end
  else
  begin
    ArtikelGrid.RowCount := Artikel.Count+1;
    for i:=0 to Artikel.Count-1 do
    begin
      // Tabellenzeilen ausgeben, dabei fehlende Werte berechnen
      pRec := Artikel.Items[i];
      ArtikelGrid.cells[0,i+1] := IntToStr(i+1);
      ArtikelGrid.cells[1,i+1] := pRec^.AbteilungName;
      ArtikelGrid.cells[2,i+1] := pRec^.AbteilungNr;
      ArtikelGrid.cells[3,i+1] := pRec^.Artikel;
      ArtikelGrid.cells[4,i+1] := FormatFloat('#,##0.00 €', pRec^.ArtikelWert);
      ArtikelGrid.cells[5,i+1] := IntToStr(pRec^.ArtikelAnzahl);

      GesamtPreis:= pRec^.ArtikelAnzahl + pRec^.ArtikelWert;

      ArtikelGrid.cells[6,i+1] := FormatFloat('#,##0.00 €', pRec^.ArtikelGesamtpreis);
      ArtikelGrid.cells[7,i+1] := pRec^.ArtikelVerbleib;
      ArtikelGrid.cells[8,i+1] := pRec^.Fremdobjekt;

      SummeGesamtwert:= SummeGesamtwert + GesamtPreis;
    end;
  end;
end;
das ist in meiner Artikelverwaltung.pas
und nun wollte ich das unter meiner Artikelerfassung im Edit15.text mir anzeigen lassen.
wie bekomme ich den wert den aber rüber?
mit dem Stringgrid habe ich das ja geschaft
Delphi-Quellcode:
procedure TArtikelerfassungForm.Button5Click(Sender: TObject);
var s:string;
begin
  s := EditAbteilung.Text;
  if length(s)=0 then
  begin
    showmessage('Fehlerhafte Eingabe in der Abteilung');
    EditAbteilung.setfocus;
    exit;
  end;

  s := EditAbteilungNr.Text;
  if length(s)=0 then
  begin
    showmessage('Fehlerhafte Eingabe zur Abteilung-Nr');
    EditAbteilungNr.setfocus;
    exit;
  end;

  s := EditArtikelBezeichnung.Text;
  if length(s)=0 then
  begin
    showmessage('Fehlerhafte Eingabe zum Artikel');
    EditArtikelBezeichnung.setfocus;
    exit;
  end;

  s := EditArtikelAnzahl.Text;
  if length(s)=0 then
  begin
    showmessage('Fehlerhafte Eingabe Mänge der Einzelnen Artikel');
    EditArtikelAnzahl.setfocus;
    exit;
  end;

  s := EditEinzelpreis.Text;
  if length(s)=0 then
  begin
    showmessage('Fehlerhafte Eingabe Mänge der Einzelnen Artikel');
    EditEinzelpreis.setfocus;
    exit;
  end;

  if EditVerbleibWare.ItemIndex = 0 then
  begin
    showmessage('Fehlerhafte Eingabe zum Verbleib der Ware');
    EditVerbleibWare.setfocus;
    exit;
  end;

  Rec.AbteilungName := EditAbteilung.Text;
  Rec.AbteilungNr := EditAbteilungNr.Text;
  Rec.Artikel := EditArtikelBezeichnung.Text;
  Rec.ArtikelAnzahl := StrToInt(EditArtikelAnzahl.Text);
  Rec.ArtikelWert := StrToFloat(EditEinzelpreis.Text);
  Rec.ArtikelGesamtpreis := StrToFloat(EditGesamtpreis.Text);;
  Rec.Fremdobjekt := EditFremdobjekt.Text;
  result := true;
  Rec := rec;
  Artikel.add(Rec);
  Artikel.Show(ArtikelStringGrid);
    InitArtikelerfassungRec(Rec);
    init(Rec);
 end;
jetzt habe ich aber in dem formular noch ein einzelnes editfeld, wo dann der gesamtwert aus dem stringgrit auftauchen soll von allen feldern.
:gruebel:

DeddyH 30. Okt 2009 12:56

Re: Berechnung zum StringGrid
 
Welche Gesamtzahl welcher Felder? Du könntest doch Deine Artikelliste erneut durchlaufen und aufaddieren, oder verstehe ich Dich falsch? Übrigens:
Zitat:

Delphi-Quellcode:
Rec := rec;

:roll:

Kunoishi 30. Okt 2009 13:01

Re: Berechnung zum StringGrid
 
den gesamtwert von

SummeGesamtwert:= SummeGesamtwert + GesamtPreis;

und nun sollte er mir das unter Edit15.text := summeGesamtwert ausgeben.

ich hab ne denkbloccccckkkkkade

Kunoishi 30. Okt 2009 13:05

Re: Berechnung zum StringGrid
 
ich habe auf mein Brett nun eingehackt:

Edit12.text := SummeGesamtwert;

Jetzt sagt mir der Kasten: Inkompatible Typen: String und Double

und mein Kopf raucht :wall:

DeddyH 30. Okt 2009 13:08

Re: Berechnung zum StringGrid
 
Delphi-Quellcode:
Edit12.text := FloatToStr(SummeGesamtwert);

Kunoishi 30. Okt 2009 13:19

Re: Berechnung zum StringGrid
 
jups, dot war es wohl
und ich dachte wenn ich das einmal aufrufe mit demFloat das dit reicht.
danke dir
jetzt kann ich ruhig schlafen :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz