0

Automatische Einträge in einer Untertabelle erstellen

Hallo zusammen,

ich stehe vor folgendem Problem:

Ich habe eine Tabelle "Grundeinstellungen", in der ich einen Zahlenwert "Start" eingeben kann, z.B. "50".

Außerdem gebe ich ein, welcher Wert addiert werden soll, z.B. "20"

Und ich gebe ein wie oft der Wert addiert werden soll, z.B. "5"

 

In dieser Tabelle soll nun darunter eine Untertabelle (es müsste nicht unbedingt eine Untertabelle sein) erstellt werden wo in der ersten Zeile die Zahlenwerte zu finden sind. Bei den automatisch erstellten Zahlenwerten werden dann in der Untertabelle später weitere Eigenschaften ergänzt.

 

Also:

 

50

70

90

110

130

 

das wären die automatisch zu erstellenden Werte in der Untertabelle. Ich hoffe man versteht mich und vielleicht kann mir jemand helfen?

 

Vielen Dank im Voraus!

13 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo bstn:

    ---

    let me:=this;

    for i in range ('FELDWIEOFT') do

    let new:=create UNTERTABELLENNAME;

    new.Grundeinstellungen:=me;

    new.WERT:=me.START+me.START*i

    end

    ---

    wenn es keine Untertabelle sein soll dann musst du die Zeile 

    new.Grundeinstellungen:=me;

    löschen

    Leo

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Oh Tippfehler 

    let me:=this;

    for i in range ('FELDWIEOFT') do

    let new:=create UNTERTABELLENNAME;

    new.Grundeinstellungen:=me;

    new.WERT:=me.START+me.WERT*i

    end

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Das funktioniert sehr gut, danke dafür!

     

    Es geht bei den Werten, die dauernd erhöht werden, um Messwerte einer Strecke in [m].

    Aktuell wird also nach dem Streckenbeginn gefragt und dann immer der entsprechende Wert addiert. Allerdings sollen die Werte in einer Stationierungsangabe angegeben werden.

     

    25 Meter sind 0+025 

    175 Meter sind 0+175

    3250 Meter sind 3+250

     

    Ich könnte mir vorstellen, dass das sehr kompliziert wird, aber vielleicht weiß jemand eine Lösung.

     

    Der aktuelle Code:

     

    let me := this;
    for i in range('Anzahl Messungen') do
    let new := (create Messungen);
    new.(Grundeinstellungen := me);
    new.(Datum := me.Datum);
    new.(Stationierung := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * i)
    end

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Dazu noch: Kann man mit einem anderen Button die eben erstellten Messungen wieder löschen, falls man sich dann doch für andere Abstände entschieden hat?! Dann sollten natürlich nur die eben-erstellten Messungen gelöscht werden und nicht alle Werte in der Tabelle "Messungen"... 

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich kann mit "Stationierung" leider nicht viel anfangen. So eine Darstallung von einer Zahl kann man in einem Funktionsfweld realisieren:
    ---

    floor(Stationierung / 1000) + "+" + format(Stationierung - floor(Stationierung / 1000) * 1000, "000")

    ---

    Die Löschung der Werte in Untertabelle efolgt mit

    ---

    delete Messungen

    ---

    Dabei werden nur die zugeordnete Datensätze gelöscht. Um alle Datensätze zu löschen muss man auch die ganze Tabelle auswählen:

    ---

    delete select Messungen

    ---

    Leo

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Okay das klappt auch alles perfekt! Ich bin dir schon einmal sehr dankbar für deine schnellen und kompetenten Antworten!

     

    Um mein nächstes Problem zu erklären, muss ich wahrscheinlich den Hintergrund ein wenig erklären: die Anzahl der Messungen "Anzahl Messungen" ergibt sich daraus, wie viele Meter oder Kilometer insgesamt gemessen werden müssen. Wenn ich z.B. 1200 Meter messen muss, und ich 12 Messungen brauche, dann muss ich alle 100 Meter eine Messung machen wenn ich bei 0 Meter anfange. Nun das Problem: Wenn ich den Startwert "Beginn [m]" aber jetzt auf 150 m setze dann addiert Ninox momentan trotzdem 12 mal 100 Meter drauf und erstellt natürlich 12 Messungen, wobei ich dann bei 1350 Meter lande, obwohl die Strecke ja nur 1200 Meter lang ist. Kann man einstellen, dass auch nur so viele Messungen hinzugefügt werden, bis die maximale Bahnlänge (die ich auch am anfang eingebe) erreicht ist?! Vielleicht noch mit der Meldung "Da Sie den Startwert auf 150 m gesetzt haben, konnten keine 12 Messungen auf die 1200 m gesetzt werden". Ich hoffe, dass das halbwegs verständlich rüber kam.

    1000 DANK! 

     

    LG

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Mir ist ist nicht klar wie die Anzahl der Messungn und die Interwale festgelegt werden. Muss es immer eine bestimmte Anzahl der Messungen sein oder eine bestimmte Distanz dazwischen? Ist es nicht einfacher zu sagen, wenn es z.B. 12 Messungen sein sollten dann teilt man die Restdistanz (hier 1050 m) durch 12 und bekommt einen krummen aber gleichmäsigen Abstand. Oder wenn es 100 m Messabstand sein sollte, dann errechnet mach die Anzahl der Messungen und setzt dann die letzte Messung ans Ende.
    Wenn es aber deine genaue Anforderungen sind, dann:

    ---

    let me := this;
    if me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * me.'Anzahl Messungen' > me.'maximale Bahnlänge' then
    let myD := dialog("IRGEND ETWAS PASST NICHT", "Da Sie den Startwert auf " + me.'Beginn [m]' + " m gesetzt haben, konnten keine " + me.'Anzahl Messungen' + " Messungen auf die " + me.'maximale Bahnlänge' + " m gesetzt werden", ["Anpassen", "Abbrechen"]);
    if myD = "Anpassen" then
    'Anzahl Messungen' := floor(('maximale Bahnlänge' - 'Beginn [m]') / 'Alle wie viele Meter eine Messung?');
    for i in range('Anzahl Messungen') do
    let new := (create Messungen);
    new.(Grundeinstellungen := me);
    new.(Datum := me.Datum);
    new.(Stationierung := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * i)
    end
    end
    end

    ---

     

    Leo

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ok, zu kurz gedacht:

    ---

    let me := this;
    if me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * me.'Anzahl Messungen' > me.'maximale Bahnlänge' then
    let myD := dialog("IRGEND ETWAS PASST NICHT", "Da Sie den Startwert auf " + me.'Beginn [m]' + " m gesetzt haben, konnten keine " + me.'Anzahl Messungen' + " Messungen auf die " + me.'maximale Bahnlänge' + " m gesetzt werden", ["Anpassen", "Abbrechen"]);
    if myD = "Anpassen" then
    let myCNT := 0;
    let myST := 'Beginn [m]';
    while myST <= 'maximale Bahnlänge' do 
    let new := (create Messungen);
    new.(Grundeinstellungen := me);
    new.(Datum := me.Datum);
    myST := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT;
    new.(Stationierung := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT);
    myCNT := myCNT + 1;
    myST := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT
    end

    end
    else
    let myCNT := 0;
    let myST := 'Beginn [m]';
    while myST <= 'maximale Bahnlänge' do 
    let new := (create Messungen);
    new.(Grundeinstellungen := me);
    new.(Datum := me.Datum);
    myST := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT;
    new.(Stationierung := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT);
    myCNT := myCNT + 1;
    myST := me.'Beginn [m]' + me.'Alle wie viele Meter eine Messung?' * myCNT
    end

    end

    ---

    Leo

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Wow! Das klappt auch schon sehr gut, allerdings wenn ich "anpassen" klicke und dann nochmal den gleichen Fall durchspiele erscheint die Warnung nicht mehr ... Genau so wenn ich die Messungen mit einem anderen Button durch "delete Messungen" entferne, um dann nochmal neu zu erstellen, erscheint die Meldung ebenfalls nicht und er addiert einfach weiter die Werte drauf ohne die maximale Bahnlänge zu beachten.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Sicher, dass du die zweite Formel genommen hast. Genau deswegen habe ich die erste auch korrigiert.

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Du hast Recht! Es klappt, danke dir! Es werden wahrscheinlich noch weitere Fragen kommen, bei dem was ich noch so vorhabe :-D

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    In der Untertabelle bei den erstellten Messungen (wo bis jetzt ja nur die Stationierungen zu finden sind), Mitarbeiter Messungen eintragen lassen. Dort gibt es Zahlenfelder "Messwert 1", "Messwert 2", "Messwert 3" und "Messwert 4". 

     

    Ich hätte gerne, dass immer wenn ein Messwert ins jeweilige Feld eingegeben wird, die aktuelle GPS-Koordinate (so genau wie nur möglich), auf welcher man sich während der Eingabe (Tablet oder Handy) befindet, gespeichert wird. Ich würde diese später gerne auslesen, um sie als Punkte in einem Zeichenprogramm darzustellen. Das geht doch bestimmt irgendwie, da man den Standort über das Standort-Feld ja abgreifen kann, das sollte allerdings direkt ohne ein extra Standort-Feld durch Eingabe jedes Messwerts automatisch erfolgen.

     

    Vielen Dank!

    • Kalberg
    • vor 4 Jahren
    • Gemeldet - anzeigen

    *sollen Mitarbeiter nun Messungen eintragen.