[Gelöst] Problem bei Reportaufruf mit/ohne Request Form

25. November 2010 08:33

Guten Morgen,

nach tagelangem Suchen und Verzweifeln, wende ich mich an Euch alle!!!

Ich habe ein Form, welche Auftragszeilen anzeigt. Mit einer Funktion kann jede einzelne Auftragszeile verbucht werden. Beim Aufruf der Funktion, wird ein Report gestartet, welcher zuerst ein Request Form anzeigt. Wird auf dem Request Form der OK Button betätigt, wird die Verbuchung gestartet. Dabei werden weitere Objekte aufgerufen. Am Schluss wird die effektive Verbuchungs-Codeunit aufgerufen. Diese zeigt das klassische Status-Window an (Anzahl Zeilen, Anzahl verbucht, etc.).

Solange ich jede Auftragszeile einzeln aufrufe und verbuche, funktioniert alles prima.

Nun wurde aber gewünscht, dass man mehrere Auftragszeilen auf einmal und ohne Anzeige des Request Forms verbuchen möchte. Ich habe dies umgesetzt und es funktioniert... fast.

Ich erhalte ab dem zweiten Datensatz jeweils eine Meldung, ob ich den Datensatz umbenennen möchte. Wenn ich ja auswähle, kommt die Meldung, dass der Datensatz schon existiere.
Ich habe heraus gefunden, dass in der Verbuchungs-Codunit vor oder nach der Window Anzeige (Window.OPEN) kurz in das erste Form verzweigt wird und dort z.B. der OnFormat Trigger ausgeführt wird.
Irgendwie versucht dann NAV den Datensatz umzubenennen. Keine Ahnung wieso dies geschieht und wie dies überhaupt möglich ist?!? Im DEBUG komme ich nicht ran, das Ganze geschieht irgendwie intern.

Wenn ich diese Mehrfach-Verbuchung aber MIT Request Form aufrufe, dann muss ich zwar mehrmals das Request Form bestätigen, ich erhalte die Meldung aber nicht mehr!?!

Ich habe sicher schon mehr als 100 Zeilen einzeln und auch über die Mehrfach-Verbuchung gebucht, finde aber keinen Weg.
Dabei habe ich auch die lokale Report Variable mittels CLEAR gelsöcht, auch ein COMMIT vor oder nach jedem verabeiteteten Datensatz hat nichts gebracht

Vielen, vielen Dank!
Beno

PS: ach ja, hier noch ein Code-Beispiel

Code:
CreatePostAllReceipt()
/// CreatePostAllReceipt
IF Rec.FINDSET THEN
  REPEAT
    IF Rec.Assigned THEN
    BEGIN
      CLEAR(CreateUnpostShipLineL);
      CockpitPurchHdrL.GET(Rec."Cockpit Header Entry No.");
      CreateUnpostShipLineL.Def(CockpitPurchHdrL);
      CreateUnpostShipLineL.Def2(CockpitPurchHdrL);
      CreateUnpostShipLineL.USEREQUESTFORM(FALSE);
      CreateUnpostShipLineL.RUNMODAL;
      COMMIT;
    END;
  UNTIL Rec.NEXT = 0;
ReadDataG;
Statistics();
CurrForm.UPDATE(FALSE);
Zuletzt geändert von beno am 25. November 2010 12:33, insgesamt 1-mal geändert.

Re: Problem bei Reportaufruf mit/ohne Request Form

25. November 2010 09:45

Das Problem dürfte sein, dass du Rec (also den Forminhalt selbst) in einer Schleife durchläufst. Kopiere dir besser Rec in eine neue Recordvariable und durchlaufe diese.

Was passiert hier?
Code:
ReadDataG;
Statistics();

Re: Problem bei Reportaufruf mit/ohne Request Form

25. November 2010 10:10

Hallo Natalie,

vielen Dank für Deine Antwort. Aber das habe ich (leider) auch schon versucht.
Ich habe die Datens des Forms (Rec) in eine zweite lokale und temporaräre (Property) Tabelle übertragen und diese Tabelle dann mit der Schleife durchlaufen.
Trotzdem erhielt ich beim Verarbeiten des zweiten Datensatzes die Fehlermeldung.

Die Daten des Forms (Rec) werden übrigens auch in eine temporäre Tabelle gelesen. Das heisst, auf dem Form habe ich das Property SourceTableTemporary auf Yes gesetzt.
In OnOpenForm lese ich dann die Daten selber und schreibe sie in Rec. Nach dem Durchlaufen der gesamten Schleife mache ich dann einen Refresh (ReadDataG) der Daten.
Das sollte aber eigentlich keine Rolle spielen. Der Fehler geschieht ja immer innerhalb der Schlaufe.

Könnte es sein, dass ich den CurrForm.UPDATE(FALSE) nach jedem Aufruf des CreateUnpostShipLineL.RUNMODAL ausführen muss?

Vielen Dank, Beno

Re: Problem bei Reportaufruf mit/ohne Request Form

25. November 2010 10:33

beno hat geschrieben:In OnOpenForm lese ich dann die Daten selber und schreibe sie in Rec. Nach dem Durchlaufen der gesamten Schleife mache ich dann einen Refresh (ReadDataG) der Daten.
Das sollte aber eigentlich keine Rolle spielen. Der Fehler geschieht ja immer innerhalb der Schlaufe.

Heißt das, das Problem besteht weiterhin, wenn du ReadDataG auskommentierst?

Das Problem kommt oft dadurch, dass das Programm kein sauberes xRec mehr hat. Hier kann es helfen, vor Aufruf der Schleife zu sagen.
xRec.COPY(Rec);
Ist aber nur geraten, damit müsste man ggf. spielen.
Vielleicht sagst du auch nach der Schleife Rec := xRec.
So ganz 100%ig verstehe ich das Problem dahinter offensichtlich nicht :oops: , aber ich habs mal so ähnlich schon einmal gelöst bekommen.

Re: Problem bei Reportaufruf mit/ohne Request Form

25. November 2010 12:30

Natalie, Du bist ein Schatz!!!

Ich habe Deinen Rat befolgt und die Variable Rec und xRec (innerhalb der Schlaufe) überschrieben:

Code:
/// CreatePostAllReceipt
IF Rec.FINDSET THEN
  REPEAT
    IF Rec.Assigned THEN
    BEGIN
      [b]xRec.COPY(Rec);[/b]
      CLEAR(CreateUnpostShipLineL);
      CockpitPurchHdrL.GET(Rec."Cockpit Header Entry No.");
      CreateUnpostShipLineL.Def(CockpitPurchHdrL);
      CreateUnpostShipLineL.Def2(CockpitPurchHdrL);
      CreateUnpostShipLineL.USEREQUESTFORM(FALSE);
      CreateUnpostShipLineL.RUNMODAL;
      [b]Rec := xRec;[/b]   
    END;
  UNTIL Rec.NEXT = 0;
ReadDataG;
Statistics();
CurrForm.UPDATE(FALSE);


Und... es funktioniert alles einwandfrei!!!!!!!!

VIELEN DANK! Ich hätte schon fast aufgegeben!

Ben :lol: