[RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

30. März 2022 10:52

Guten Morgen,

beim öffnen einer Page soll auf eine bestimmte Eigenschaft geprüft werden, wenn diese zutrifft soll ein Hinweis (CONFIRM Dialog) kommen, wird dieser mit Ja angeklickt, soll ein report automatisch gedruckt werden.

Dazu habe ich im OnAfterGetRecord auf der Page folgende Programmierung:

Code:
IF WhsePickWithAssemblyOrder() THEN
  IF CONFIRM(Montageauftrag vorhanden, drucken?,TRUE) THEN BEGIN
    CustomerFncs.PrintAssemblyOrder(Rec);
END;


PrintAssemblyOrder:
Code:
AssemblyOrderreportID := 902;
IF WhsePickWithAssemblyOrder(WhsePick) THEN BEGIN
  IF AppMgt.FindPrinter(AssemblyOrderreportID)<>'' THEN BEGIN
    locWhsePickLines.SETRANGE("No.",WhsePick."No.");
    locWhsePickLines.SETRANGE("Activity Type",locWhsePickLines."Activity Type"::Pick);
    locWhsePickLines.SETRANGE("Action Type",locWhsePickLines."Action Type"::Place);
    IF locWhsePickLines.FINDSET THEN BEGIN
      REPEAT
        IF (locWhsePickLines."Assemble to Order" = TRUE) THEN BEGIN
          locAssemblyOrder.SETRANGE("No.",locWhsePickLines."Source No.");
          IF locAssemblyOrder.FINDLAST THEN BEGIN
            REPORT.RUN(AssemblyOrderreportID,FALSE,FALSE,locAssemblyOrder); 
          END;
        END;
      UNTIL locWhsePickLines.NEXT =0;
    END;
  END ELSE BEGIN
    ERROR(errNoPrinterFound);
  END;
END ELSE BEGIN
  ERROR(errNoAssemblyFound);
END;


Ich öffne die Page, trifft die Eigenschaft zu, kommt der Confirm Dialog, ich sage ja, der Report wird gedruckt, und es kommt wieder der Confirm Dialog, immer wieder ...
Lasse ich die IF CONFIRM Abfrage weg, wird der Report 1 x gedruckt und fertig ..

Was läuft da mit den CONFIRM falsch? :roll:

Danke

Re: [RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

30. März 2022 11:18

Hallo,

kann es sein, da der Confirm einen neuen OnAfterGetRecord auslöst, weil du ja die ursprüngliche Page verlässt, und nach dem Confirm wieder zur ursprünglichen Page zurückkehrst, der Daten allerdings durch den Kontextwechsel verworfen wurden.

Gruß Fiddi

Re: [RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

30. März 2022 11:44

Das klingt logisch.

Wenn ich folgendes versuche:
Code:
IF xRec."No." <> Rec."No." THEN BEGIN
   IF CONFIRM(Montageauftrag vorhanden, drucken?,TRUE) THEN BEGIN
       CustomerFncs.PrintAssemblyOrder(Rec);
END;


dann poppt der CONFIRM Dialog zwar nicht mehr auf, aber dennoch läuft OnAfterGetRecord in Endlosschleife.
Scheint mir so dass der erste Confirm Aufruf im OnAfterGetrecord schon für die endlosschleife sorgt.

Tjoa, wie kann man das nun lösen?

Re: [RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

30. März 2022 12:12

Es scheint wohl doch nicht am CONFIRM zu liegen.

Sondern am Report RUN , nehme ich den Report RUN raus, dann passiert die Endlosschleife nicht.

Re: [RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

30. März 2022 13:46

So scheint es zu gehen:
Code:
IF xRec."No."<> Rec."No." THEN BEGIN
  IF CustomerFncs.WhsePickWithAssemblyOrder(Rec) THEN BEGIN
     IF CONFIRM(txtAssemblyInfo) THEN BEGIN
       PrintAssemblyOrder(WhsePick);
     END;
  END;
END;


Finde trotzdem dass es eine sensible stelle ist um ein Ausdruck zu starten. Ist dann so :-)

Re: [RTC] Endlosschleife CONFIRM in Page OnAfterGetRecord

5. April 2022 13:02

Hi,

ich bin mir nicht sicher, aber vielleicht könnte auch REPORT.RUNMODAL funktionieren.
Andere Möglichkeiten zum prüfen, ob bereits gedruckt wurde, wären:
- Globale Variable nutzen
- Feld am Montageauftrag nutzen. Zum Beispiel "Status" oder ein eigenes Feld ("printed").

Gruß