[CC][gelöst]Automatisches Öffnen und Schließen von FORMs

6. April 2023 12:28

Hallo,
ich habe mich mit der Überschrift etwas schwer getan, aber im Wesentlichen läuft es darauf hinaus:

Wir haben im Verkaufsbereich etliche vorausgefüllte Verkaufsaufträge mit serialisierten Parts (Einträge in Reservation Entry vorhanden).
Ich möchte nun eine FORM (auf Basis des Sales Header) bauen, welche es ermöglicht Artikel+Seriennummer einzuscannen. Über die Reservation Entry finde ich den zugehörigen Verkaufsauftrag heraus.
Nun soll sich meine FORM mit den Daten des entsprechenden Auftrages öffnen und den Fokus (zur Bearbeitung des nächsten Auftrages) weiterhin im Scanfeld behalten.
Im Hintergrund laufen dann noch Dinge wie Versandlabelerzeugung, Rückschreibung der Paketnummer und Buchung, aber dies ist nicht Teil dieser Frage.

Ich könnte eine FORM-Variable FOSalesHeader deklarieren und mittels gesetzter Filter und SETTABLEVIEW in Kombination mit FOSalesHeader.RUN den gefundenen Auftrag aufrufen. Das klappt soweit.
Hierbei öffnet sich dann allerdings ein weiteres Fenster und mit der Zeit werden dies immer mehr. Wie bekomme ich das ausrufende Fenster geschlossen, so dass möglichst nur der aktuell bearbeitete Vorgang offen ist?
Gibt es ggf. eine smartere Lösung? Es würde im Prinzip auch reichen wenn in der aktuellen Form nach dem Scan diese mit dem identifiziertem Filter (Auftragsnummer aus Reservation Entry) neu geladen würde.
Danke, Grüße und schöne Ostertage!
Zuletzt geändert von FlensGold am 9. Oktober 2023 10:26, insgesamt 2-mal geändert.

Re: [CC]Automatisches Öffnen und Schließen von FORMs

6. April 2023 12:58

Ohne genau verstanden zu haben, was du da machst :wink: :
CurrForm.Close schließt eine Form
Wenn man vorher in einem Feld eine Eingabe gemacht und dann direkt schließen will (also in dem Scannerfeld) muss der Datensatz noch gespeichert werden, also im OnValidate des Controls vorher noch:
CurrForm.SaveRecord

Re: [CC]Automatisches Öffnen und Schließen von FORMs

6. April 2023 13:17

Ok, mal hoffentlich verständlicher ausgedrückt:
Ich möchte in der Standard-Verkaufsauftragsform ein Scanfeld einbauen, welches es dem User erlaubt Artikelnummer/Seriennummer zu scannen. Eine Funktion identifiziert hierüber die tatsächliche Auftragsnummer und öffnet dann diesen Auftrag.
Wie stelle ich dies am schlauesten an?

Re: [CC]Automatisches Öffnen und Schließen von FORMs

6. April 2023 16:27

FlensGold hat geschrieben:Wie bekomme ich das ausrufende Fenster geschlossen,

Probiere es mal so,statt
Code:
FOSalesHeader.RUN

dieses
Code:
IF FOSalesHeader.RUNMODAL() = ACTION::Close THEN
  CurrForm.CLOSE;

Re: [CC]Automatisches Öffnen und Schließen von FORMs

10. April 2023 17:08

Erstmal noch frohe Ostern und vielen Dank für die Rückmeldung.
Ich habe es gerade mal getestet, poste hier zum besseren Verständnis mal den Code samt kurzer Erklärung:
Code:
lrc_SalesHeader.RESET;
lrc_SalesHeader.SETRANGE("Document Type","Document Type"::Order);
lrc_SalesHeader.SETRANGE("No.",lrc_RE."Source ID");
IF lrc_SalesHeader.FINDLAST THEN BEGIN
  FOGOFWL.SETTABLEVIEW(lrc_SalesHeader);
  IF FOGOFWL.RUNMODAL() = ACTION::Close THEN
    CurrForm.CLOSE;
  MESSAGE("No.");
END;

Zunächst wird über Filter der gesuchte Datensatz identifiziert. FOGOFWL ist hierbei eine modifizierte FORM des Sales Headers (im Wesentlichen eine Kopie der Form 42 - Sales Order. In derselben Form findet auch der Aufruf statt.

Der obige Code bewirkt folgendes:
1. Die FORM FOGOFWL wird korrekt mit dem gesuchten Datensatz geöffnet.
2. Die aufrufende Form bleibt weiterhin geöffnet.
3. Das Message wird nicht ausgegeben, erst bei manuellen Schließen der Form wird die Belegnummer der aufrufenden Form dargestellt.

Rufe ich das Ganze nur mit FOGOFWL.RUN() (vorher SETTABLEVIEW) öffnet sich ebenfalls die neue Form mit dem korrekten Datensatz. Auch hierbei bleibt die alte Form weiterhin als Fenster im Hintergrund offen. Das Message wird allerdings direkt ausgegeben (mit der aufrufenden Belegnummer).

Ich komme mir gerade etwas doof vor und bin dankbar für jeden Hinweis. Das Ganze kann auch komplett anders laufen, ich brauche lediglich die Möglichkeit die Form via Code mit einem bestimmten Datensatz zu öffnen.
Grüße

Re: [CC]Automatisches Öffnen und Schließen von FORMs

11. April 2023 08:13

Muss das Öffnen einer neuen Form denn unbedingt sein? Sonst könntest du in der bereits offenen Maske auf den anderen Datensatz wechseln. Mit so etwas wie
Code:
rec."Document Type" := "Document Type"::Order;
rec."No. := lrc_RE."Source ID";
rec.find('=');

("rec" nur zum Verdeutlichen, was gemeint ist)

Re: [CC]Automatisches Öffnen und Schließen von FORMs

11. April 2023 08:55

Hallo,
eine neue Form muss keineswegs sein, ist mir auch sehr recht, wenn es ohne geht.

Deinen Hinweis habe ich genommen um folgendes zu testen (ich hoffe ich habe es richtig verstanden):
Code:
Rec.RESET;
Rec.SETRANGE("Document Type","Document Type"::Order);
Rec.SETRANGE("No.",lrc_RE."Source ID");
Rec.FINDLAST;
MESSAGE("No.");


Dies führt zunächst dazu, dass eine Abfrage kommt ob man den aktuellen Datensatz umbenennen möchte. Verneine ich dies wird mir noch kurz via Message der korrekte (aufgerufene) Datensatz gezeigt und nach dessen Bestätigung die Form automatisch geschlossen (Ein CurrForm.CLOSE; findet sich nicht im Code).

Re: [CC]Automatisches Öffnen und Schließen von FORMs

11. April 2023 12:29

Dein Code ist zwar anders, aber das sollte nicht viel machen.
An welcher Stelle deiner Auftragsmaske steht er denn?

Re: [CC]Automatisches Öffnen und Schließen von FORMs

9. Oktober 2023 10:25

Ich schließe das hier mal ab.
Ich habe es nun dabei belassen, dass ich die Form mit dem zuvor herausgesuchten Filter aufrufe und die alte Form im Hintergrund offen lasse. Das scheint soweit auch erstmal zu klappen und nicht weiter zu Stören:

Code:
      FOGOFWL.SETTABLEVIEW(lrc_SalesHeader);
      FOGOFWL.RUN();