Inhalt aus Textfeld einem array übergeben

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite")
bekommst du Zugriff auf die Listbox (als ganzes). Die gewählten Einträge erhältst du mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").getSelectedItems()
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo mikelab,

danke für die Antwort.
Ich erhalte so aber die Fehlermeldung: "Eigenschaft oder Methode nicht gefunden: getSelectedItems"

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,

stimmt, in Formularen gibt es die Methode nicht.
Mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").SelectedItems
bekommst du eine Array mit den Nummern der gewählten Einträge.

Mit

Code: Alles auswählen

oList1 = oForm.GetByName("Breite").getItemText(Nummer des Eintrages)
erhältst du den Text des Eintrages.
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo,

ich habe jetzt mit folgendem Code erreicht, die einzelnen Werte der ausgewählten Listeneinträge einzeln anzeigen zu lassen:

Code: Alles auswählen

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Breite = oForm.GetByName("Breiten")
cnt = UBound(Breite.SelectedItems)
Items = UBound(Breite.StringItemList)
MsgBox Breite.StringItemList(3)
Hier wird mir der 4. Wert der ausgewählten Listeneinträge ausgegeben.
Aber wie kann ich denn diese Werte anstelle der bisher genutzten Array

Code: Alles auswählen

Breite = array("25 cm","30 cm","40 cm","50 cm","60 cm","70 cm","80 cm","100 cm")
verwenden?
Ich habe da schon viele Versuche gestartet, jedoch alle ohne Erfolg.
Ich dachte dass es ausreichen würde, "Items" anstelle von "Breite" zu setzen, aber das ist nicht richtig.

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,
Aber wie kann ich denn diese Werte anstelle der bisher genutzten Array verwenden?
indem du z. B. die einzelnen Elemente ausliest und in ein neues Array steckst:

Code: Alles auswählen

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Breite = oForm.GetByName("Breiten")
cnt = UBound(Breite.SelectedItems)
aBreiten=DimArray(cnt)
for i=0 to cnt
	aBreiten(i)=Breite.StringItemlist(Breite.SelectedItems(i))
next
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo,

jan hatte es dann Gestern nach unzähligen Tests auch nachvollziehen können.

Jetzt bekommen ich bis auf eine Berechnung des Netto-Preises alles hin.
Beim Auslesen des Listenfelds "Preis" erhalte ich die Bruttopreise der ausgewählten Werte.
Nun muss ich diese jedoch in netto umrechnen.

Code: Alles auswählen

Preis = wert3.StringItemList(wert3.SelectedItems(a))
aPreis = Preis(a)/ 119 * 100 'berechnet netto aus brutto
So erhalte ich allerdings die Fehlermeldung "Datentyp unverträglich"

Kann man vielleicht mit den Werten keine Berechnungen durchführen?

Hier ein mal der complette Code meines Makros:

Code: Alles auswählen

Sub Varianten

oDoc = thisComponent.sheets("Eingabe")
oForm = oDoc.DrawPage.Forms.GetByName("Dateneingabe")     
Wert1 = oForm.GetByName("Breiten")
Wert2 = oForm.GetByName("Farben")
Wert3 = oForm.GetByName("Preis")
id = oForm.GetByName("id")
Nr = id.text
sku = oForm.GetByName("sku")
Ref = sku.text

Attr = "Breite:select:0, Farbe:select:1"
Menge = 100
mMenge = 1

'k = ermittelt die Anzahl der Kombinationen
k = (UBound(Wert1.SelectedItems())+1)*(ubound(Wert2.selecteditems())+1)

for n = 1 to k
Bild = b + 1

Breite = wert1.StringItemList(wert1.SelectedItems(a))
Farbe = wert2.StringItemList(wert2.SelectedItems(b))
Preis = wert3.StringItemList(wert3.SelectedItems(a))
aPreis = Preis(a)/ 119 * 100 'berechnet netto aus brutto
Reference = Ref + "-" + format(art + 1, "000")

Value = "Breite " +  Breite(a)+":0, "+ Farbe(b) + ":1"
	'Es werden Werte für den Prestasho Import generiert
	thisComponent.sheets(1).getcellbyposition(1,n).setstring(Attr())
	thisComponent.sheets(1).getcellbyposition(2,n).setstring(Value())
	thisComponent.sheets(1).getcellbyposition(0,n).setstring(Nr(n))
    thisComponent.sheets(1).getcellbyposition(4,n).setstring(Reference())
    thisComponent.sheets(1).getcellbyposition(8,n).setstring(aPreis())
    thisComponent.sheets(1).getcellbyposition(10,n).setstring(Menge())
    thisComponent.sheets(1).getcellbyposition(11,n).setstring(mMenge())
    thisComponent.sheets(1).getcellbyposition(15,n).setstring(Bild())
   
   b = b + 1
   art = art + 1
   
   if b > ubound(Wert2.selecteditems()) then : a = a + 1 : b = 0 : end if
  next n

End Sub
Gruß

Domenico
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Hallo,

hab es jetzt doch hin bekommen.
Habe

Code: Alles auswählen

DIM Preis as Double 
deklariert.
Und die Nachkommastellen mit
aPreis = format(Preis(a)/ 119 * 100,"0.00")
auf 2 Stellen begrenzt.

Gruß

Domenico
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

Also es ist zum Verrückt werden.
Wenn ich Preis als DOUBLE oder INTEGER deklariere, werden die Werte nicht mehr richtig indeziert.
Dann kann ich zwar auf 2 Nachkommastellen formattieren, jedoch werden die Items dann nicht mehr richtig ausgegeben.
Anscheinent werden durch das Deklarieren auf DOUBLE mehr Werte im Array generiert als eigentlich vorhanden sind.
Also wieder weiter testen.

Gruß

Domenico
mikeleb
*******
Beiträge: 1316
Registriert: Fr, 09.12.2011 16:50

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von mikeleb »

Hallo,
die Einträge in den Listenfeldern sind Strings (auch die Preise). Zum Rechnen ist es notwendig, diesen String in einen Wert zu wandeln.
Nun kommt es darauf an, wie deine Bruttopreise eingetragen sind:
1) "2,50" dann cdbl(Preis(a))
2) "2.50 €" dann val(Preis(a))
3) "2,50 €" dann val(join(split(Preis(a),","),".")

Mit format() begrenzt du übrigens nicht die Nachkommastellen, sondern wandelst die Zahl wieder in einen String um (nach vorgegebenen Formatcode; dabei wird ggf. eine Rundung vorgenommen).

Kleiner Hinweis: Lass' bitte die ungültigen Klammern bei den Variabalen weg. Menge() suggeriert, dass es sich dabei um ein Array handelt, was es aber definitiv nicht ist. Basic ist hier einfach nett und akzeptiert die falsche Schreibweise trotzdem.
Gruß,
mikeleb
Domenico
*
Beiträge: 17
Registriert: Mi, 06.04.2016 12:37
Wohnort: Brandenburg
Kontaktdaten:

Re: Inhalt aus Textfeld einem array übergeben

Beitrag von Domenico »

OK, habe es nun hinbekommen.
Musste noch mit der Formattierung etwas üben.

Das mit den ungültigen Klammern hatte ich gar nicht verstanden.
Ich dachte immer, dass diese bei Variabeln mit gesetzt werden müssen, damit die Werte auch aus den Schleifen übernommen würden.

Danke noch ein mal für die ganzen Tipps.

Das ist auch das erste Forum, in welchem ich noch keine unfreundlichen Bemerkungen gelesen habe.
Und das ist wirklich selten der Fall.

Einen schönen Sonntag noch.

Gruß

Domenico
Antworten