Temp. Tabelle bzw. Daten in Form anzeigen

5. November 2010 18:43

Hallo,
ich habe mir eine neue Form gebaut. Diese hat als Sourcetable "Item". Diese Form beinhaltet im Kopf versch. Datenfelder (welche als Filter agieren sollten) und eine Tablebox, welche nur Daten anzeigen(auch von Item), welche in den Filter fallen. Weiters habe ich die Tabelle Item um ein Feld "Fehlmenge" erweitert. In diesen Feld, wird die Menge Lagerbestand - Auftragsbestand (zu einen best. Datum) über eine Funktion berechnet und gespeichert.
Das funktioniert auch alles.
Meine Problem ist nur, wenn 2 Benutzer gleichzeitig mit dieser Form arbeiten.
Wenn diese Benutzer unterschiedliche Filter setzen (was immer der Fall ist), hat das Feld "Fehlmenge" den Wert von der letzten Berechnung und führt daher teilweise die Benutzer in die Irre.
Nun dachte ich mir, vielleicht kann man das über Temp. Tables lösen bzw. den das Formular gestartet wird eine Temp. Table aufgebaut wird und mit dieser der entsprechende Benutzer arbeitet.
So auf die Art, Daten einlesen,Daten filtern bzw. berechnen.

Wie sollte ich dies angehen.
lg
stony

Re: Temp. Tabelle bzw. Daten in Form anzeigen

5. November 2010 20:32

Setze in der Form die Eigenschaft SourceTableTemporary = Yes und fülle im OnOpenTrigger die temporäre Recordvariable.

Dies stelle ich mir allerdings alles andere als performant vor ...

Alternativ bleib bei dem nicht-temporären Record, aber schreib den berechneten Wert nicht in das Tabellenfeld (oder müssen die Benutzer danach suchen und/oder darauf filtern können?).

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 08:27

Wie kann ich diese temporäre Recordvarible befüllen.
Ich muss nach diesen berechneten Wert filtern können, da ich z.B. nur negative Werte sehen möchte.

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 10:18

Deklariere im OnOpenForm-Trigger eine "normale" Item-Variable.
Code:
Item.SETFILTER(...);
....
IF Item.FIND('-') THEN
  REPEAT
    Rec := Item;
    Rec.INSERT;
  UNTIL Item.NEXT = 0;

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 12:27

Ok, das mit dem befüllen verstehe nun.
Nur leider sehe ich diese Daten nicht in der Form.
Ich habe eine Tablebox, welche diese Daten anzeigen sollte. Habe zwar die Source auf Rec."No." usw. geändert, aber das funktioniert nicht.
Wie kann ich diese Temp. Daten in der Tablebox anzeigen.

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 13:01

stony hat geschrieben:Ok, das mit dem befüllen verstehe nun.
Nur leider sehe ich diese Daten nicht in der Form.

Zunächst einmal solltest du mit Hilfe des Debuggers prüfen, ob Rec.INSERT; überhaupt ausgeführt wird. Wenn nein, dann scheint was mit deinen per Quelltext gesetzten Filtern nicht zu stimmen.
Sobald Rec gefüllt ist, verhält sich die Form nicht anders als wenn Rec nicht temporär wäre.

Ich habe eine Tablebox, welche diese Daten anzeigen sollte. Habe zwar die Source auf Rec."No." usw. geändert, aber das funktioniert nicht.

Das hättest du auch gar nicht machen brauchen.
Kontrolliere, ob du evtl. noch Filter für die Form gesetzt hast. Die gehören raus.

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 18:55

Irgendwie habe ich ein Problem mit Rec.
Damit ich diese Variable verwenden kann, muss ich doch der Form eine Tabelle in Sourcetable zuordnen. In meinen Fall Item.
Wenn ich das mache bekomme ich sofort die Meldung das der Artikel (ist der erste welche über findset gefunden wird) schon in Rec vorhanden ist.
Sollte ich Rec definieren?

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 19:39

stony hat geschrieben:Damit ich diese Variable verwenden kann, muss ich doch der Form eine Tabelle in Sourcetable zuordnen. In meinen Fall Item.

Nein, Rec musst du in einer Form nie deklarieren. Rec entspricht immer der SourceTable. Oder anders: Eine Form mit SourceTable hat immer Rec.
Mit SourceTableTemporary = Yes deklarierst du damit Rec als temporär.

Wieso meintest du, du müsstest Rec deklarieren? Ich habe dir bereits alle Schritte genannt, die notwendig sind - das sind wirklich nicht viele ;-)

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 20:11

OK, das mir Rec habe ich jetzt kapiert.

Leider habe ich diese Eigenschaft SourceTableTemporary nicht. Ich brauche das Programm leider noch für eine NAV 4.03 Version.
Sorry leider habe ich das falsch Forum erwischt.
Kann ich dies auch in NAV 4.03 machen.

Re: Temp. Tabelle bzw. Daten in Form anzeigen

6. November 2010 22:11

stony hat geschrieben:Leider habe ich diese Eigenschaft SourceTableTemporary nicht. Ich brauche das Programm leider noch für eine NAV 4.03 Version.
Sorry leider habe ich das falsch Forum erwischt.
Kann ich dies auch in NAV 4.03 machen.

DAS hättest du ruhig früher erwähnen können ;-)

Es geht auch in 4.03, aber mangels der Eigenschaft SourceTableTemporary gehts etwas umständlicher.
Also, zurück zum Urzustand :-)
Du erstellst eine temporäre Recordvariable auf Item, nennen wir sie TempItem.
Wieder befüllst du den temp. Record im OnOpenForm-Trigger:
Code:
    Rec.SETFILTER(...);
    ....
    IF Rec.FIND('-') THEN
      REPEAT
        TempItem := Rec;
        TempItem.INSERT;
      UNTIL Rec.NEXT = 0;


Nun musst du deine Form dazu bringen, den temp. Record statt Rec anzuzeigen.

Schau dir hierzeu einen Eintrag bei mibuso an: How To use temporary table data on a subform?, siehe dort das Befüllen der Trigger OnFindRecord und OnNextRecord. Mehr erstmal nicht. Schau mal, obs so schon reicht.



Übrigens, der Quelltext für OnOpenForm kann auch so geschrieben werden:
Code:
    SETFILTER(...);
    ....
    IF FIND('-') THEN
      REPEAT
        TempItem := Rec;
        TempItem.INSERT;
      UNTIL NEXT = 0;

Rec muss man nämlich gar nicht schreiben.

6. November 2010 22:12

[Beitrag aus dem Forum NAV 2009 nach NAV 4.xx verschoben.]

Gruß, Natalie
MSDynamics.de-Team

Re: Temp. Tabelle bzw. Daten in Form anzeigen

7. November 2010 09:46

Das habe ich nun hinbekommen. Besten Dank für die tolle Unterstützung.
Nun habe ich aber noch ein Problem.
Ich habe eine Report aufruf in dieser Form mit
Code:
SelectItem.COPYFILTERS(Rec);
//test := SelectItem.GETFILTERS;
REPORT.RUN(50070,TRUE,FALSE,SelectItem);

Dieser Report hat Item und SalesLine als DataItem.
Wie schaffe ich es, das nun die Daten von der temp. Variable übergeben werden?

Re: Temp. Tabelle bzw. Daten in Form anzeigen

7. November 2010 11:23

Soll dir der Report genau einen Artikel drucken oder alle, die du dir (temporär) zurechtgefiltert hast?

Bei einem:
Code:
SelectItem := REC;
SelectItem.SETRECFILTERS; // setzt den Filter auf die aktuelle Aritkelnr.
REPORT.RUN(50070,TRUE,FALSE,SelectItem);


Bei allen:
Kopiere den Filter von TempItem auf SelectItem.

Re: Temp. Tabelle bzw. Daten in Form anzeigen

7. November 2010 14:50

Es sollen alle temporären Artikelinformation gedruckt werden.
Habe aktuell folgenden Code in Verwendung
Code:
SelectItem := Rec;
SelectItem.COPYFILTERS(TempItem);
REPORT.RUN(50070,TRUE,FALSE,SelectItem);

Leider klappt es nicht. Und zwar wird im Report für das Feld Fehlmenge die Daten von der Tabelle Item angedruckt.