[Gelöst] Temporäre Tabelle mit Form aufrufen

3. November 2010 09:14

Hallo,

ich habe schon mal gesucht und in der Theorie verstehe ich es auch, aber trotzdem macht mir eine Sache Probleme:
Im OnLookup Trigger will ich eine Form mit einer temporären Tabelle aufrufen. Also habe ich folgendes gemacht:
Formvariable.EDTIABLE(TRUE);
Formvariable.LOOKUPMODE(TRUE);
Formvariable.SETRECORD(TempRecordVariable);
IF Formvariable.RUNMODAL = ACTION::LookupOK THEN
Formvariable.GETRECORD(TempRecordVariable);

Es scheint allerdings so, als wenn die Daten, die man in der Form eingibt direkt in den "normalen" SourceTable geschrieben werden. Irgendwo habe ich also noch einen Fehler.
Könntet Ihr mir weiterhelfen.

Danke und Gruß
Enulien
Zuletzt geändert von Enulien am 3. November 2010 10:56, insgesamt 2-mal geändert.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:28

Ist TempRecordVariable überhaupt als Temporary = Yes deklariert?

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:29

Ja! Das habe ich gemacht!

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:32

Warum soll die Form editierbar sein? Ich denke, du willst dort nur etwas auswählen (Lookup) und nicht pflegen? Was ist überhaupt Ziel des Ganzen?

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:41

Um es grob auszudrücken: Ziel ist es Preisstaffeln einzugeben (kein Standard).
Der Benutzer kann beim OnLookup auswählen ob er eine bestehende Staffal eingeben soll oder eine neue erstellen will.
Wenn er eine neue erstellen will, möchte ich, dass er eine leere "List-Form" bekommt, in der er die verschiedenen Preisstaffel untereinander schreiben kann. Der Primärschlüssel ist ein Preisgruppencode,Währung,Staffel.
Er kann also seine neue Staffel eingeben und diese wird dann beim "ACTION::LookupOK" in das Feld der vorherigen Form übernommen und die Datensätze des TempTables in den Standard-Table übernommen.
Weshalb ich dafür einen TempTable nutze: damit der User nicht die bisherigen Datensätze angezeigt bekommt,die in der Tabelle stehen. Diese kann ich ja nicht mit SETRANGE, SETFILTER rausfiltern, da sonst bei jeder Eingabe die der User in der Form macht, die jeweilige Zeile "weggefiltert" würde.
Ich hoffe es ist ein bisschen klarer geworden.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:45

Enulien hat geschrieben:Weshalb ich dafür einen TempTable nutze: damit der User nicht die bisherigen Datensätze angezeigt bekommt,die in der Tabelle stehen. Diese kann ich ja nicht mit SETRANGE, SETFILTER rausfiltern, da sonst bei jeder Eingabe die der User in der Form macht, die jeweilige Zeile "weggefiltert" würde.

Nochmal für mein Verständnis: Was soll passieren, wenn der Benutzer schon mal auf diese Weise Daten gepflegt hat und die Funktion erneut aufruft und erneut Werte eingibt - sollen dann alle vorherigen Eingaben gelöscht werden? Wenn ja, dann brauchst du vor dem Formaufruf nicht mit einer tempären Tabelle arbeiten, sondern mit einem einfachen DELETE(ALL). Ich glaube aber nicht, dass das deine Anforderung ist?

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:48

Das geht, wenn du die Form nicht als Variable anlegst, sondern mit form.runmodal(DeineForm, DeinRec) ansprichst.
Oder du legst zwei Funktionen zur Übergabe des temporären Records in der Form an, dann auch als Variable.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 09:56

Es ist ein bisschen komplexer.
Ich habe eine Tabelle mit vorhandenen Preisstaffeln:

Preisstaffelcode Währung Staffel von
XYZ EUR 1
XYZ EUR 5
XYZ EUR 10
ABC EUR 1
ABC EUR 5
ABC EUR 10

Wenn jetzt aber der User eine neue Preisstaffel eingeben will würde er, da ich nichts habe, auf das ich Filtern kann, alle Datensätze dieser Tabelle angezeigt bekommen. Das möchte ich vermeiden, indem ich eine Temp-Tabelle aufrufe, die natürlich leer ist, der User kann seine Eingaben machen und beim Schließen werden die Werte in die normale Tabelle übernommen und der Preisstaffelcode durch den ACTION::LookUpOK in das Feld der vorherigen Form geschrieben.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:03

Und wo liegt das Problem?

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:10

Das Problem ist, dass ich FORM.RUNMODAL(MeineForm, MeinTempRecord) nicht nutzen kann, da ich:
1. nicht weiß, wie man dann einen GETRECORD hinbekommt
2. ich beim Formaufruf Parameter mitgeben muss, die der Form sagen, ob sie beim Close die Daten zurückschreiben soll oder nicht (Temp oder nicht Temp)

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:18

Ein GetRecord brauchst du nicht, da der Zeiger des übergebenen Records auf dem Datensatz steht, auf dem er stand, als die Form verlassen wurde. Und das Zurückschreiben kannst du doch genau wie ursprünglich gedacht über die Action steuern.
Code:
If Form.runmodal(DeineForm, DeinTempRec)=Action::LookUpOK then ...

Oder verstehe ich was falsch?

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:29

Handelt es sich um eine Standardtabelle?
Gibt es eine Kopf-Zeilen-Struktur?
Wird nur direkt in einer Liste gepflegt?

Ich hätte als Standard-NAV-Anwender folgendes erwartet:

  • Es gibt einen Kopf (Code, Beschreibung) und Zeilen (Code, Menge, Währung). Der Kopf hat nur das Feld Code als Primärschlüssel. Die Kopftabelle wird als TableRelation in dein aufrufendes Tabellenfeld eingetragen.
    Es gibt drei Forms: Karte (Main- + Suform), Übersicht. Die Übersichtsform wird in der Kopftabelle als LookupFormID hinterlegt.
    So wird auf dem Feld ein voll funktionierender Lookup ganz ohne Programmierung realisiert, also ganz ohne FORM.RUNMODAL.

  • Stehe ich nun im aufrufenden Tabellenfeld und möchte einen Staffelcode eingeben, den ich erst noch pflegen muss, dann
    - tätige ich den Lookup: Liste öffnet sich
    - ich wechsle von der Liste in die Karte
    - lege hier einen neuen Code an und pflege die Zeilen
    - schließe die Karte
    - bestätige aus der Liste mit OK -> mein neuer Code wird in das aufrufende Tabellenfeld eingetragen

Also: ganz ohne Recordvariablen, erst recht ohne temporäre.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:31

Hi,

es ist keine Standard. Es gibt nur ein "List-Form" in welchem die Pflege gemacht wird.
Aber es passt jetzt soweit.
Danke Euch beiden. Kann ich über FORM::"Meine Form" auch Parameter an die Form weitergeben (deren Funktionen nutzen).

Gruß

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:42

Man könnte das mit einer SI-Codeunit machen, die dann allerdings bei jedem Aufruf der Form abgefragt werden müsste (also auch, falls die Form von woanders genutzt wird). Dementsprechend müsste man auch immer darauf achten, was sich in der Codeunit so an Werten rumtreibt, um die Form nicht unbeabsichtigt mit Daten zu füttern - also weniger schön.

Dann fände ich den ursprünglichen Weg wieder besser: Form als Variable plus zwei neue Funktionen zur Ein-/Auslesen des temporären Records.

Re: Temporäre Tabelle mit Form aufrufen

3. November 2010 10:56

Danke nochmal.
Ist doch immer wieder super, wie man hier geholfen bekommt, auch wenn man mal "blöde" Fragen stellt. :-D

Schönen Tag noch.