Autor Beitrag
Bennle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: Fr 23.12.05 16:33 
Hallo,
Ich habe, wie im Titel erwähnt, vor eine Rechnung über Rave zu erstellen.
Ich möchte gerne eine Tabelle erstellen und Daten übergeben.

Tabelle soll folgendermaßen aussehen:

Menge Artikelnr Titel E-Preis Summe
1 11 test 3,3 3,3
2 12 test2 3,3 6,6

Ich möchte die Daten durch meinen DelphiSource übergeben. (RvCustomView?)

Kann mir evtl jemand ein Projekt aufbauen, erklären und das anhängen?

Ich habe schon viel versucht, aber ich bekomme die Posten einfach nicht aufgelistet!

MfG
Bennle
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 23.12.05 19:34 
Was hast Du denn genau versucht? Grundsätzlich bräuchtest Du (ich habs so noch nie gemacht, nur mit Datenbanken) eine RcCustomConnection, definierst dort die Felder (Summe brauchst Du nicht, kannst Du im Report berechnen lassen) und übergibst die Daten dann per WriteField. Weiterhin brauchst Du RvProject und evtl. RvSystem.

Dann musst Du einen Report erstellen. Dort fängst Du mit einer Region an und definierst Du Deinen Kopfband (TBand) und Detailbänder für die Positionen (TDataBand). Diesem Databand musst Du Deine DataView zuweisen, die Du vorher in dem Report natürlich hinzugefügt hast, damit Du die Felder zur Verfügung hast. Ja, und dann noch designen und fertig ist das Ding.

Wie vor 2 Tagen schon Mal gesagt, Rave ist nicht ganz so einfach, es ist eben ein Reporting-Tool und braucht daher recht viel Einarbeitungszeit. Man kann nicht einfach mal so einen Report erstellen.
Bennle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: Sa 24.12.05 23:48 
Hallo,
Hmm ich hab das auch schon so gemacht, aber ich weiß einfach nicht mehr weiter! Ich hab mal mein Versuchsprojekt angehängt!

Kannst du mir erklären was ich tun muss um die Artikel nun in die Liste zu bekommen?
Wäre nett wenn du mir den Source funktionsfähig zukommen lässt, denn ich steig da leider nicht durch! (Bitte PN)

MfG
Bennle


Zuletzt bearbeitet von Bennle am Di 27.12.05 02:03, insgesamt 1-mal bearbeitet
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 25.12.05 01:56 
Ich werde versuchen, mir das heute mal anzusehen, aber ich kann nichts versprechen. Sollte es heute nicht mehr reichen, wird es leider erst im Januar etwas, da ich ab morgen im Urlaub bin.

Ich werde das dann aber hier posten und nicht per PN, denn andere wollen schließlich evtl. auch etwas davon haben ;-)
Bennle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: So 25.12.05 03:04 
user profile iconUGrohne hat folgendes geschrieben:
Ich werde versuchen, mir das heute mal anzusehen, aber ich kann nichts versprechen. Sollte es heute nicht mehr reichen, wird es leider erst im Januar etwas, da ich ab morgen im Urlaub bin.

Ich werde das dann aber hier posten und nicht per PN, denn andere wollen schließlich evtl. auch etwas davon haben ;-)


Hallo,
Ok, stimmt eigentlich! Daran kann sich jeder bedienen. Wäre super, wenn du das heute noch schaffst!

MfG
Bennle
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 25.12.05 03:42 
Das geht doch schon ganz gut, wo ist denn das Problem?
Bennle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: So 25.12.05 03:48 
user profile iconUGrohne hat folgendes geschrieben:
Das geht doch schon ganz gut, wo ist denn das Problem?


Ich weiß nicht wie ich einen Posten einfüge!

menge ...
Ich würde gerne meine Tabelle mit Artikel füllen !

MfG
Bennle
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 25.12.05 04:00 
user profile iconBennle hat folgendes geschrieben:
user profile iconUGrohne hat folgendes geschrieben:
Das geht doch schon ganz gut, wo ist denn das Problem?


Ich weiß nicht wie ich einen Posten einfüge!

menge ...
Ich würde gerne meine Tabelle mit Artikel füllen !

MfG
Bennle

Welche Tabelle denn? Es sieht so aus, als liefe das Ganze auf ein völlig anderes Problem hinaus und zwar wie Du Daten für Deine Rechnung eingeben und verwalten sollst. Das ist aber nicht trivial.
Du musst Dich erstmal entscheiden, wie Du sie speichern willst, eine Datei, eine Datenbank. Dann musst Du Dich entscheiden, wie Du sie darstellen musst und erst danach kannst Du über den Ausdruck eine Rechnung nachdenken. Du willst im Moment das Dach bauen, bevor die Wände stehen und das klappt so nicht wirklich.

Erstmal musst Du Daten haben, dann kannst Du Dich erst ums Ausdrucken kümmern.

Du solltest Dich daher erstmal mit den Grundlagen beschäftigen. Ohne Datenbanken könntest Du das Ganze z.B. in einem StringGrid darstellen, dazu gibts auch genug Topics hier. Mit Datenbank gibts sehr gute Tutorials und einige Threads hier, die Dir bei der Auswahl der richtigen DB-Engine helfen.

Leider kann ich Dir im Moment nicht mehr helfen, weil ich erstens nicht genau weiß was Du wirklich erreichen willst und 2. jetzt auch meinen Koffer voll packen muss für morgen :(.
Bennle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: So 25.12.05 04:08 
Hallo,
Ok, dann muss ich sehen wie ich klar komme!
Ich dachte, dass ich die Daten einfach als array oder so übergeben kann und diese dann einfach eingetragen und gedruckt werden. Aber wenn das nicht funktioniert, dann werde ich mich mal informieren.

Welcher Tag und wieviel Uhr ist es gerade bei euch?

Wünsch dir einen schönen Urlaub und eine gute Reise.

Danke für deine Hilfe.

MfG
Bennle
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 25.12.05 04:21 
user profile iconBennle hat folgendes geschrieben:
Hallo,
Ok, dann muss ich sehen wie ich klar komme!
Ich dachte, dass ich die Daten einfach als array oder so übergeben kann und diese dann einfach eingetragen und gedruckt werden. Aber wenn das nicht funktioniert, dann werde ich mich mal informieren.

Welcher Tag und wieviel Uhr ist es gerade bei euch?

Wünsch dir einen schönen Urlaub und eine gute Reise.

Danke für deine Hilfe.

MfG
Bennle

OK, langsam versteh ich das Problem glaube ich. Du weißt nicht, wie Du mehrere Datensätze übergeben kannst? Also wenn Du ein Array oder so haben solltest, in dem die einzelnen Positionen gespeichert sind, dann musst Du halt bei GetCols da durchiterieren. Kleines Beispiel (weiß net genau, ob das so funktionieren würde: Du nimmst Dir nen Record für alle Daten zu einer Position:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
type TPosition = record
  Menge: Integer;
  Artikelnr: Integer;
  Artikel: String;
  Beschreibung: String;
  end;

Normalerweise solltest Du die Artikel dann extra verwalten, um weniger Redundanz reinzubringen, aber das lassen wir jetzt mal außen vor.

Dann nimmst Du Dir ein Array von dem Record:
ausblenden Delphi-Quelltext
1:
var positionen: array of TPosition;					

und befüllst das mit den Daten (z.B. nach Eingaben, die in einem StringGrid gemacht werden.
Im Open-Ereignis setzt Du dann die Anzahl der Positionen und initialisierst pos_index (weiter unten erklärt):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
  pos_index := 0;
  RvCustomConnection1.DataRows:=Length(positionen);
end;

Dann brauchst Du noch eine globale Integer-Variable, wir nennen sie mal pos_index. Diese haben wir ja im Open-Ereignis initialisiert. Im GetCols-Ereignis übergibst Du dann immer die nächsten Zeile und erhöhst pos_index, damit Du beim nächsten Aufruf den nächsten Array-Eintrag abrufen kannst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm1.RvCustomConnection1GetRow(
 Connection: TRvCustomConnection);
begin
with RvCustomConnection1 do
    begin
       WriteInteger(positionen[pos_index].Menge);
       WriteInteger(positionen[pos_index].Artikelnr);
       WriteString(positionen[pos_index].Artikel);
       WriteString(positionen[pos_index].Beschreibung);
    end;
   Inc(pos_index);

Ich hoffe, dass Dir das weiterhilft. Wie gesagt, Du versuchst hier gerade das Dach zu bauen ;-)

Wenn Du noch Fragen hast, einfach hier stellen, kann sein, dass ich noch ein paar Mal heute abend hier sein werde. Geht erst morgen mittag auf die Reise.

P.S.: Im Moment ist es 18:17, wir hinken also rund 9 Stunden hinterher (24. Dezember)
Bennle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 101

WinXP
Delphi 2007 Pro, C# (VS 2005)
BeitragVerfasst: So 25.12.05 04:29 
Hallo,
Danke das wars! Und im seben Moment habe ich es gerade herausgefunden! Denn ich habe die While-Schleife endeckt. Ich baue hier nur das Dach und setze es dann auf mein Haus :D
Der Rest ist alles schon fertig!
Naja nun kann ich ja beruhigt ins Bett gehen und morgen mein Programm zu Ende schreiben.

Nochmals vielen Dank für deine Bereitschaft und deine sehr große Gedult mit mir. Ich finde das du mit deinen Erklärungen sehr gut rüber kommst! Großes Lob.

So das musste auch mal gesagt sein.

Ich wünsch dir noch ein frohes Fest und einen guten Rutsch ins neue Jahr.

MfG
Bennle
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: So 25.12.05 04:36 
Vielen Dank, sowas hört man gern ;-)

Dir auch noch ein frohes Fest und nen guten Rutsch.
Shaguar
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.02.06 00:02 
Also ich habe jetzte folgendes gemacht:
Also erstes eine RvProject Datei erstellt, diese mit der *.rav Datei über ProjectFile verbunden. Dann habe ich eine RvCustomConnection Komponente hinzugefügt, dort habe ich dann
unter FieldAliasList verschiedene Variablen eingetragen (zb Name, Vorname).
Dann habe ich genau die Sachen gemacht wie zuvor beschrieben also
ein Array definiert
ausblenden Delphi-Quelltext
1:
2:
3:
4:
type TPerson = record
  Name: String;
  Vorname: String;
  end;

dann eine Variable
ausblenden Delphi-Quelltext
1:
Person : array[1..5of TPerson;					

dann diese zwei funktionen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.RvCustomConnection1Open(Connection: TRvCustomConnection);
begin
  pos_index := 0;
  RvCustomConnection1.DataRows:=Length(person);
end;

procedure TForm1.RvCustomConnection1GetRow(
  Connection: TRvCustomConnection);
begin
  with RvCustomConnection1 do
    begin
       WriteStr(person[pos_index].Name);
       WriteStr(person[pos_index].Vorname);

    end;
   Inc(pos_index);
end;

und dann zum schluss noch in das OnClick Ereignisses eines Buttons
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.Button4Click(Sender: TObject);
begin
   Person[1].Name := 'Name';
   Person[1].Vorname := 'Vorname';
   RvProject1.Open;
   RvProject1.Execute;
end;


Also erstmal nur das nötigste zum testen.
Und dann zum Schluss im Rave Designer habe ich eine Region erstellt,
in dieser Region 1 Band mit Überschriften und ein Databand für die Daten.
Dann habe ich ein neues DataObject erstellt, dann auf Dircet Data View
dort dann die RvCustomConnection ausgewählt und fertig.
Im ObjectTree stand dann unter Data View Dictionary einmal DataView1 und dort drin
war wiederrum ein Eintrag namens DataView1FieldName.
Dieses hab ich dann in dsa DataBand per Drag and Drop reingezogen.
Beim starten des Programms, also nach klick des drucken Buttons kam dann nichts ausser einem Leeren Blatt.
Und wenn alles klappen sollte dann sollte/müsste da dann zumindest der 'Name' stehen.
So meine Frage ist jetzt was hab ich falsch gemacht, oder was hab ich zuviel oder zuwenig
gemacht ?
Shaguar
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.02.06 00:41 
Ok ich habe erstens vergessen dem Databand als DataView die DataView1 zuzuweisen,
das hat aber leider überhaupt nichts gebracht.
Dann habe ich mein Array noch ein weing verändert, denn so wie es da stand war es ein wenig
falsch. Jetzt steht bei mir :
ausblenden Delphi-Quelltext
1:
Person : array[0..5of TPerson;					

und
ausblenden Delphi-Quelltext
1:
Person[0].Name := 'Name';					

aber leider leider geht immer noch nichts, immer noch ein leeres Blatt.
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Mo 13.02.06 00:43 
Löschen können nur Mods und Admins, hab das mal gemacht. Sollte mal wieder etwas zu Löschen/Verschieben/... sein, einfach den Beitrag melden ;-)

Zu Deinem Problem: Hast Du dem Array auch eine entsprechende Länge gegeben mit SetLength(...)?. Wieso setzt Du Werte des zweiten Eintrags des Arrays (Array-Indizes fangen bei 0 an).

Häng am besten mal die RAVE-Datei an.
Shaguar
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.02.06 01:00 
Hast meine zweiten Beitrag wohl noch nicht gelesen.

Achja das sieht jetzt natürlich ein wenig durcheinander aus, da ich jetzt zum Schluss noch
ein wenigrum probiert habe.
Einloggen, um Attachments anzusehen!
Shaguar
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Mo 13.02.06 05:56 
Ok ich habs gelöst, für alle die es interressiert :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm1.RvCustomConnection1GetRow(
  Connection: TRvCustomConnection);
begin
  with Connection do
    begin
         WriteStrData(Person[pos_index].Name,'');
    end;

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.RvCustomConnection1GetCols(
  Connection: TRvCustomConnection);
begin
  Connection.WriteField('Name',dtString,20,'','');
end;

Die GetCols Funktion war vorallem wichtig, da ich erst dann im Rave Designer die entsprechenden DataFelder dem DataBand zuweisen konnte, vorher stand da nur DataView1Fieldname dran und sonst
nichts.