Gelöst: Formularausruf von Report aus

12. April 2007 14:57

Hallo miteinander
Ich bin ein Neuling im Bereich Navision, aber darf das jetzt öfters amchen :-?
Ich bin z.T. noch etwas verwirrt, weil ich sonst Basic und Java programmiere.

Ich will vom Trigger OnPreDataItem aus ein Formular aufrufen.
Das macht er auch, aber das Programm wird im Hintergrund einfach fortgesetzt, ohne auf eventuelle Nutzereingaben abzuwarten. :cry:

Was kann ich daran ändern??

MfG Schaarschi
Zuletzt geändert von Schaarschi am 16. April 2007 09:11, insgesamt 1-mal geändert.

12. April 2007 15:33

Du meinst eine Form?
dann ruf die mit Form.Runmodal auf, dann wartet das Prg und du kannst sogar resultate auswerten

12. April 2007 15:42

Nein ich habe einen Report und will von dort aus ein Formular aufrufen,
in dem Benutzereingaben stattfinden sollen, die dann im Report weiterverarbeitet werden sollen.

Er öffnet zwar das Formular, aber läuft dann im Report einfach weiter.

12. April 2007 15:44

Für diesen Zweck gibt es das RequestForm. Das ist Bestandteil eines Reports. Du kannst es im Report bearbeiten unter Ansicht -> Requestform.
Wenn du hier Felder platzierst bekommst du im Report automatisch ein Zustzregister mit dem Namen Optionen.

12. April 2007 15:51

Es soll ein Report sein, der eine Mehrfach-Etiketterstellung ermöglicht.
Wenn der User von einer Nummer mehrere Etiketten haben will.

Ich frage dafür den Filter ab, das kann ich aber so weit ich das erkannt habe, nicht schon im Request-Form machen, da da der Filter noch nicht in das Record eingelsen wurde.

Somit kann ich das erst später machen, wenn der Report bereits läuft.
Ich hole mir deshalb die Filterwerte in eine Tabelle und bilde diese Tabelle auf einem neuen Formular ab, damit der User dann noch einstellen kann, wie viele er Etiketten von welcher Nummer haben möchte

Vielleicht noch mal so besser zur verdeutlichung

Über Hinweise würde ich mich sehr freuen, is ja gut möglich das ich das bisher völlig falsch angegangen bin :cry:

12. April 2007 16:04

auch beim Report gibt es die Runmodal funktion

12. April 2007 16:09

Da bringt er bei mir immer eine Fehlermeldung, das ich RUNMODAL in einer Schreibtransaktion nicht verwenden dürfe.

Wie müsste ich den RUNMODAL-Befehl aufrufen??

Ich werde aus dem Reference Guide nicht schlau

12. April 2007 16:22

achso, wenn schon Daten geschrieben wurden, dann musst du vorher einen Commit machen. Du musst aber dann auch dafür sorgen, dass bei einem späteren Abbruch die bisher geänderten Daten wieder zurückgenommen werden.
aber wieso wurde schon eine Transaktion gestartet, wenn dein unterreport ausgeführt werden soll?
ICh denke mal deine Reihenfolge ist verkehrt. mach doch erst die Form auf, lass den User die Anzahl einstellen und übergebe dann Zeile für Zeile die parameter an jeweils einen Report mit Runmodal, und zwar so, dass nicht jedesmal die Requestform gestartet wird.

12. April 2007 16:52

Aber wenn ich zu erst das Form aufmache, weiß ich ja noch nicht, welche Nummern der User ausdrucken möchte.
Ich kann aber den Filter auch erst zur Laufzeit abgreifen.

Inwiefern sollte ich sonst das "Pferd" anders aufzäumen??

12. April 2007 18:59

gut, du willst also die Requestform nutzen um den User zu fragen, welche Etiketten er drucken will und dann für jedes Etikett nachfragen, wie oft?
warum nicht einmal festlegen lassen wie oft jedes Etikett gedruckt werden soll?
Das kannst du mit in die Requestform machen.
Wenn du das für jedes einzeln willst, schreibst du die gefilterten Etiketten also in eine neue Tabelle?
ist das eine temporäre Tabelle?
Wenn ja, kannst du unbesorgt nach dem Füllen ein Commit machen und dann die Form mit runmodal öffnen.
Wenn nicht, bekommst du eh Probleme, wenn mehr als einer Etiketten drucken will, wenn du diese Tabelle nicht auch noch nach Usernamen filterst. Dann muss aber gewährleistet sein, dass keine 2 Leute mit gleichem Usernamen reingehen.
Wenn das alles erledigt ist, musst du VOR dem Füllen dieser Tabelle auf den Usernamen filtern und deleteall machen, auch wenn du das am Ende des Reports sowieso macht. Das löschen vorher ist deshalb nötig, da durch das Commit der Inhalt in der Tabelle bleibt, wenn im weiteren Verlauf ein Fehler passiert.

12. April 2007 20:06

Aber die Nummern die der User ausdrucken will, die werden ja erst in dem Filter festgelegt.
Und da weiß ich ja im Request auch noch nicht, welche Nummern er ausgewählt hat, das is ja mein größtes Problem am Anfang gewesen.
Deshalb kann ich im Request-Form vom User noch nicht wirklich was abfragen.
Bisher schreibe ich die Daten in eine eigene Tabelle, keine Temporäre.
Weil ich sonst hätte die Daten nicht in einer Table-Box auf dem zusätzlichen Formular präsentieren können.
Die Tabelle in der die Daten für die Etiketten bisher drinne stehen, is ja ne art Schlüsseltabelle, da gibt es kein Mengenfeld oder so, wo ich Daten über die Anzahl reinschreiben kann

13. April 2007 00:42

ja, ist schon klar, dass es nicht die gleiche Tabelle sein kann, Du musst aber auf jeden Fall dafür sorgen, dass der Inhalt nach Usern getrennt wird, sonst gibts Kuddelmuddel beim Ausdruck.
Wenn Deine Tabelle gefüllt ist, machst du ein COMMIT und dann kannst du die Form mit Runmodal öffnen.

13. April 2007 08:11

Und wie komme ich dann wieder in den Schreibprozess zurück??
Es hat jetzt insofern geklappt das mit dem COMMIT der restlliche Programmablauf angehalten wird.
Jetzt kommt er aber nicht mehr wieder an der richtigen Stelle rein wo ich das gerne hätte

Aber auf jeden Fall schon mal Danke für die Hilfe bis hierher

13. April 2007 09:44

auf deiner Form brauchst du jetzt noch eine OK Taste und den Aufruf der Form machst du mit
Code:
IF NOT DeineForm.RUNModal=ACTION::OK THEN CURRREPORT.QUIT;

wenn also jemand was anderes als OK benutzt um die Form zu schließen, wird der Report abgebrochen. Anderenfalls macht er mit der nächsten Zeile im Programm weiter.

13. April 2007 09:51

Ich hab das so einfügen wollen,
doch da meinte das Programm dann beim kompilieren das ich so einen Präfixoperator da nicht verwenden dürfte.
Ich habe es bisher jetzt so gelöst, dass ich einen COMMIT mache
und dann mein Formular mit RUNMODAL aufrufe.
Dort gibt der User dann zu jeder Nummer seine Anzahl ein und drückt dann auf OK.
Dadurch wird dann die Form mit CLOSE geschlossen und es geht weiter im Report.

Bisher läuft das auchganz gut.
Wenn wieder was schief läuft werde ich mich melden.

Danke erst mal

13. April 2007 10:11

welchen Präfixoperator?
DeineForm?
den Namen musst du natürlich mit dem deiner Variablen vom Typ Form ersetzen.
Du kannst natürlich auch direkt aufrufen:

Code:
IF NOT FORM.RUNModal(<Nummer deiner Form>)=ACTION::OK THEN CURRREPORT.QUIT;

das geht genau so. Du musst halt nur mitbekommen, wenn der User was anderes drückt um die Form zu schließen, um den Report abzubrechen.

13. April 2007 10:14

Ich hab jetz noch folgendes Problem
Wenn der USer in die Tablle seine Anzahl einträgt, stehen die zwar im Form erst mla drin,
aber später im Report is noch alles leer.
Liegt das dann an dem COMMIT??
Und wenn wie kann ich das wieder hinbekommen, das er die Werte dort übernimmt, damit ich im weiteren Reportverlauf damit weiter arbeiten kann.

Ich hatte das mit RUMNODAL folgendermaßen geschrieben:

Code:
IF NOT form_etikett.RUNModal=ACTION::OK THEN CURRREPORT.QUIT;


und form_etikett ist als Form in den Globals deklariert

13. April 2007 13:18

Hallo,

das mit dem Präfixoperator kommt von dem NOT.

Richtig wäre
Code:
IF NOT (form_etikett.RUNMODAL = ACTION::OK)
  THEN CurrReport.QUIT;


oder

Code:
IF form_etikett.RUNMODAL <> ACTION::OK THEN
  CurrReport.QUIT;


Wie auch immer, ich empfehle grundsätzlich Vergleiche in Klammern zu setzen, da ich die Erfahrung gemacht habe, dass der Code dann besser zu lesen ist. (Meine Meinung :wink: )

Gruß
Frank