[Gelöst] Globale Variablen in einem Form

17. November 2008 12:46

Guten Morgen zusammen.

Bei mir ändert sich eine globale Variable unerklärlich. Ich hab noch nicht mal ne Idee wonach ich suchen muss. Scenarium:
Form 5048755 macht im OnPush folgendes:
Code:
IF "No." = '' THEN
  EXIT;
CustItemStat.DefCustomer(Rec);
CustItemStat.RUNMODAL;
CLEAR(CustItemStat);

Laut Debugger ist Rec (Customer) zu diesem Zeitpunkt richtig gefüllt.
Das gerufene Formular 5008011 hat folgenden Code:
Code:
Form - OnOpenForm()
CalcLineValue;

DefCustomer(NewCustomer : Record Customer)
Customer := NewCustomer;
Customer := NewCustomer;


Die 2. Wertzuweisung auf Customer hab ich nur eingefügt um sehen zu können was auf Customer tatsächlich landet und ob vllt irgendwelche Filter auf Customer stehen. Ergebnis: die Daten sind zu dem Zeitpunkt noch richtig und es sind auch keine Filter gesetzt. Stepe ich jetzt mit dem Debugger über den RUNMODAL lande ich im OnOpenForm. Wenn ich mir jetzt hier die globale Variable Customer angucke steht irgendwas anderes drauf - von irgend einem Aufruf vorher. Das Problem wurde mir von einem Anwender gemeldet und als ich es selbst ausprobiert hab ging alles wie erwartet einwandfrei. Auch beim 2. und 3. Aufruf war noch alles ok, aber beim 4. Aufruf waren plötzlich die Daten vom 2. Aufruf drin - und das sind sie jetzt immer.
Natürlich könnte ich die Zup-Datei löschen - nur: da ich ziemlich sicher das Formular noch nie aufgerufen hab wird diese Abhilfe vermutlich nur kurzfristig helfen.

Gibt es Vorschläge wie ich nach einer Lösung für dieses Problem suchen kann oder gar direkte Lösungsvorschläge?
Danke schon mal
WoF
Zuletzt geändert von WoF am 17. November 2008 15:57, insgesamt 1-mal geändert.

Re: Globale Variablen in einem Form

17. November 2008 13:30

Funktioniert denn das hier (insofern deine Form 5008011 Customer als Source Table hat)?
Code:
Customer.SetRange("No.","No.");
form.runmodal(5008011,Customer);

Re: Globale Variablen in einem Form

17. November 2008 13:37

Funktioniert nicht, weil Customer nicht die Source Table ist. Ich bin grad dabei mir das mal genauer anzugucken - vllt kann ich ja die Customer zur Source Table machen.

Re: Globale Variablen in einem Form

17. November 2008 13:49

Muss ja nicht. Wie schaut das aus:
Code:
IF "No." = '' THEN
  EXIT;
Customer.SetRange("No.","No.");
CustItemStat.DefCustomer(Customer);
CustItemStat.RUNMODAL;
CLEAR(CustItemStat);


und in der anderen Form:
Code:
DefCustomer(VAR NewCustomer : Record Customer)

Ich kann grad nicht testen, ob das VAR schon ausreicht, sonst müsste man auf das NewCustomer auch noch ein SetRange setzen, aber dann sollte das eigentlich gehen.

Re: Globale Variablen in einem Form

17. November 2008 14:21

Hallo WoF,

ich würde, falls im Rec nicht irgend etwas wichtiges steht, nur die Customer."No." übergeben, und das Form sich seine Daten selbst holen lassen.

Code:
OnPush()
IF "No." = '' THEN
  EXIT;
CustItemStat.DefCustomer("No.");
CustItemStat.RUNMODAL;
CLEAR(CustItemStat);


Und im Form:
Code:
Form.OnOpen()
Customer.Get(CustNo);
CalcLineValue;

DefCustomer(pCustNo:Code(20))
CustNo := pCustNo;


Dadurch hast du einen definierten Zustand in der Form.

Gruß,Fiddi

Re: Globale Variablen in einem Form

17. November 2008 15:34

Zunächst mal: Danke ihr 2.
Irgendwie hat McClane schon den Finger drauf - nach seiner Änderung hat scheinbar das Subform die richtigen Daten - nur im Kopf wird nichts angezeigt. Und das obwohl der Customer-Datensatz die richtigen Daten hat die dann im Kopf angezeigt werden sollten. Irgendwie ist das ganze Forumlar vermurkst hab ich so den Eindruck. Ich probier jetzt noch den Ansatz von Fiddi aus und schlimmstenfalls bau ich das Formular neu zusammen.

Re: Globale Variablen in einem Form

17. November 2008 15:56

So, die Lösung von fiddi funktioniert. Mir ist zwar noch immer nicht klar warum das Orginal nicht funktioniert, ich rate aber, dass zwischen dem Aufruf von DefCustomer und dem OnOpenForm noch irgendwas passiert. Um nicht 2 Objekte anpassen zu müssen hab ich das rufende Form gelassen wie es ist und hab nur im gerufenen Form aus dem NewCustomer die No. gespeichert und mache dann im OnOpenForm den Customer.GET mit der gespeicherten Nummer.