Arrays und Objekte in InterRun

Fragen zum Thema InterRun
Antworten
Haberichter
Interessent
Beiträge: 5
Registriert: Mo, 22 Jan, 2007 7:30

Arrays und Objekte in InterRun

Beitrag von Haberichter » Di, 06 Feb, 2007 14:01

Hallo Dirk,

Gibt es die Möglichkeit, mit Interrun eine interne Liste (array) anzulegen zur dynamischen Weiterverarbeitung? (Beispiel: Aufbau interner array aller Buchungsnummern o.ä.). D.h. wie heißt so eine List Variable (bzw. Objekt wie z. B. Bookings mit n Booking)


Wie erreiche ich eine sortierte Sicht auf beispielsweise die Bookings. (aktuell kann ich nur sagen "for i = 0 to bookings.count", d. h. sortiert nach Index).

Bin für jeden Tip dankbar. Es gibt viele Fragen, aber ich möchte natürlich auch nicht unverschämt Deine Zeit permanent beanspruchen. Vielleicht ibt es ja in baldiger Zukunft eine detailliertere Doku.

mfg
Michael

NoSpam
Site Admin
Beiträge: 34
Registriert: Mi, 08 Nov, 2006 21:39
Wohnort: Essen

Beitrag von NoSpam » Mi, 07 Feb, 2007 9:48

Hallo Michael,

zur Zwischenspeicherung empfehle ich hier eine Stringliste.

Hier ein Beispiel:

*****************************************

Procedure Schalter1_OnClick

var List : Object |allgemeines Objekt deklarieren
var I : Integer |Laufvariable

|Objekt List als Stringliste initialisieren
List.FillObject("TextFileSource")

|Die Eigenschaften von List anzeigen, später löschen
List.ShowObject

|Buchungsnummern als Text in Stringliste übertragen
for i = 0 to Bookings.Count - 1
List.AddString(IntToStr(Booking(i).Number))
next

|Anzahl Einträge in der Stringliste anzeigen
ShowMessage(IntToStr(List.StringCount))

|Liste alphanumerisch sortieren
List.SortStrings

|Objekt List wieder freigeben
List.Nothing

EndProcedure

*****************************************

Gruß,
Joshua

hans1
Profi
Beiträge: 28
Registriert: Mi, 14 Jan, 2009 14:30

Beitrag von hans1 » Mi, 17 Jun, 2009 8:01

Hallo Joshua,

gibt es mittlerweile eine anderer Möglichkeit, einen Array aus Objekten zu verwalten?

Wenn nicht und falls ich eine Stringliste verwenden möchte, muss ich ja alle benötigten Felder erst bspw. mit Trennzeichen konkatenieren, dann sortieren und dann wieder trennen, korrekt?

Vielen Dank
Hans

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Mo, 22 Jun, 2009 19:41

Hallo Hans,

in Kürze wird EuroKass um den Objekttyp MemTable erweitert. MemTable erlaubt u. a. das Speichern in einzelne Zellen und das Sortieren ganzer Spalten in Abhängigkeit des Spaltentyps.

Besten Gruß,
Dirk Schauries
Team Schauries

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Di, 23 Jun, 2009 5:45

Hallo Hans,

hier schon mal eine Betaversion 7.8.

www.eurokass.de/EK230609.exe

In der Hilfe zu InterRun steht unter Variablen/Objekte/FillObject ein Hinweis auf ein neues Objekt MemTable.

Besten Gruß,
Dirk Schauries
Team Schauries

hans1
Profi
Beiträge: 28
Registriert: Mi, 14 Jan, 2009 14:30

Beitrag von hans1 » Di, 23 Jun, 2009 6:13

Hallo Dirk,

vielen Dank für die Info und die Betaversion. ich werde es testen und dann berichten, falls es Probleme gibt.

Viele Grüße
Hans

hans1
Profi
Beiträge: 28
Registriert: Mi, 14 Jan, 2009 14:30

Beitrag von hans1 » Sa, 27 Jun, 2009 10:08

Hallo Dirk,

ich hab einiges herumprobiert mit dem neuen Objekttyp (komme sprachlich eher aus Java/VB/ABAP) und komme auch soweit klar.

Allerdings scheint die Methode SortColumn noch nicht richtig zu funktionieren. Im Beispiel

Code: Alles auswählen

Procedure Test

  Var List : Object
  List.FillObject("MemTableSource")
  List.Cell(0, 0).AsInteger = 0
  List.Cell(0, 1).AsInteger = 1

  ShowMessage(IntToStr(List.Cell(0,0).AsInteger))
  ShowMessage(IntToStr(List.Cell(0,1).AsInteger))

  List.SortColumn(0,1)

  ShowMessage(IntToStr(List.Cell(0,0).AsInteger))
  ShowMessage(IntToStr(List.Cell(0,1).AsInteger))

EndProcedure
wird bei beiden Ausgabereihenfolgen 0 und 1 angegeben (statt wie erwartet, beim 2. Mal 1 und 0).

Außerdem wäre eine Methode SortColumns sehr hilfreich, wo erst nach einer Spalte, dann nach einer weiteren sortiert werden könnte etc.

Vielen Dank schon mal und alles Gute
Hans

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Sa, 27 Jun, 2009 12:16

Hallo Hans,

vielen Dank für den Hinweis!

Hier auf die Schnelle eine korrigierte EuroKass.exe:

www.eurokass.de/EuroKass.exe

Eine Sortierung über mehrere Spalten ist nicht implementiert und ich kann jetzt noch nicht sagen, ob und wann das umgesetzt wird.

Besten Gruß,
Dirk Schauries
Team Schauries

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Mo, 29 Jun, 2009 5:01

Hallo Hans,

eine Sortierung über mehrere Spalten ist nun doch implementiert:

SortColumns(MainColumn : Integer; Ascending : Boolean; StartRow, EndRow : Integer; [SubColumn1 : Integer: Ascending1 : Integer; SubColumnx : Integer: Ascendingx : Integer;])

Hinweis: der Parameter SortDirection : Integer wurde in Ascending : Boolean geändert, auch bei der Methode SortColumn()

www.eurokass.de/EuroKass.exe

Beste Grüße,
Dirk Schauries
Team Schauries

hans1
Profi
Beiträge: 28
Registriert: Mi, 14 Jan, 2009 14:30

Beitrag von hans1 » Di, 30 Jun, 2009 6:12

Super,

vielen Dank, Dirk! Ich werde es testen und eine Rückmeldung geben.

Viele Grüße
Hans

hans1
Profi
Beiträge: 28
Registriert: Mi, 14 Jan, 2009 14:30

Beitrag von hans1 » Sa, 03 Okt, 2009 10:00

Hallo zusammen,

ich nutze die Methode SortColumns() jetzt mehrfach und ich habe gesehen, dass sie auch Einzug in die normalen Listen gefunden hat.

Allerdings habe ich eine Konstellation, wo die Sortierung nicht funktioniert: Ich sortiere erst nach einer Spalte n, danach nach Spalte 0. Dabei wird nur die Spalte n berücksichtigt (andere Kombinationen funktionieren):

Hier ein Teil des Codings, mit dem die Liste aufgebaut wird

Code: Alles auswählen

Procedure AddPosting (BookingIndex : Integer)
  Var RowNo   : Integer

  RowNo = Postings.RowCount

  Postings.Cell(0, RowNo).AsInteger = Booking(BookingIndex).Number
  Postings.Cell(1, RowNo).AsFloat   = DateToFloat(Booking(BookingIndex).Date)
  Postings.Cell(2, RowNo).AsString  = Booking(BookingIndex).Description
EndProcedure
Hier die Sortierung:

Code: Alles auswählen

Postings.SortColumns(1, True, 0, Postings.RowCount - 1, 0, True)
Es liegt wohl an der SubColumn = 0, ich habe es auch mit anderen Datentypen als Integer in der Spalte 0 versucht.

Viele Grüße
Hans

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Sa, 03 Okt, 2009 13:26

Hallo Hans,

merkwürdig, merkwürdig… in meinem Beispiel funktioniert es…


Procedure Schalter2_OnClick

Var Ms : Object

Ms.FillObject("MemTableSource")

Ms.Cell(0,0).AsInteger = 10
Ms.Cell(0,1).AsInteger = 10
Ms.Cell(0,2).AsInteger = 12
Ms.Cell(0,3).AsInteger = 9

Ms.Cell(1,0).AsFloat = 50.0
Ms.Cell(1,1).AsFloat = 51.0
Ms.Cell(1,2).AsFloat = 50.0
Ms.Cell(1,3).AsFloat = 50.0

Ms.Cell(2,0).AsString = "null"
Ms.Cell(2,1).AsString = "eins"
Ms.Cell(2,2).AsString = "zwei"
Ms.Cell(2,3).AsString = "drei"

|Ms.SaveToClipboard("|",False)

Ms.SortColumns(1,True,0,Ms.RowCount - 1,0,True)

Ms.SaveToClipboard("|",False)

EndProcedure

Vor der Sortierung erhalte ich:

10|50|null|
10|51|eins|
12|50|zwei|
9|50|drei|

Nach der Sortierung:

9|50|drei|
10|50|null|
12|50|zwei|
10|51|eins|

Kannst Du meine Zeilen mal ausprobieren?

Viele Grüße,
Dirk
Team Schauries

Antworten