Gründe

Es gibt zwei gute Gründe warum ein Report für so einen Job benutzt werden sollte und nicht beispielsweise eine Codeunit:

  1. Ein Report besitzt von Haus aus schon die Eigenschaft, dass er Datensätze durchgeht und pro Datensatz einen Trigger ausführt.
  2. Beim Starten des Reports ist das Setzen von Filter und Sortierung möglich.

Anleitung

In diesem Tutorial werden wir die Möglichkeit schaffen, bequem über einen Report Debitoren, Kreditoren und Artikel zu sperren.

Gehe in den „ObjectDesigner“ und erstelle einen neuen Report. Füge die drei DataItems „Customer“, „Vendor“ und „Item“ hinzu.

Report Designer - Drei DataItems Customer, Vendor, Item

Die Report-Eigenschaft „ProcessingOnly” musst du auf „Ja” setzen. Die nachfolgende Abbildung zeigt die Auswirkung dieser Eigenschaft.

Die Report-Eigenschaft ProcessingOnly

Normalerweise werden mit Reports Daten ausgedruckt. In unserem Fall wollen wir das nicht und setzen die o. g. Eigenschaft. Durch das Setzen dieser Eigenschaft erreichen wir, dass beim Ausführen des Reports nichts gedruckt und der Button „Seitenansicht” auf der RequestForm erst gar nicht dargstellt wird. Außerdem wird der Button „Drucken” durch den Button „OK” ausgetauscht.

Lege eine globale Variable mit dem Namen „ModfiyAll“ und vom Typ „Boolean“ an und eine globale Textkonstante mit dem Namen „Text000“ und dem Wert „Jeden %1 sperren?“.

Anschließend muss in dem „OnPreDateItem“-Trigger aller drei DataItems die folgenden zwei Programmzeilen hinterlegt werden:

IF NOT HASFILTER THEN
	ModfiyAll := CONFIRM(Text000, FALSE, TABLECAPTION);

Die erste Zeile prüft ob Filter gesetzt wurden. Ist dies nicht der Fall wird in der zweiten Zeile mit dem Befehl CONFIRM ein Dialogfenster geöffnet. In diesem Dialogfenster erscheint die Frage ob alle gesperrt werden sollen. Die Antwort des Benutzers wird in der Variable „ModifyAll“ in Form TRUE/ FALSE gespeichert.

Als nächstes schreibe die folgenden vier Programmzeilen in den beiden „OnAfterGetRecord“-Trigger der DataItems „Customer“ und „Vendor“:

IF HASFILTER OR ModfiyAll THEN BEGIN
	Blocked:=Blocked::All;
	MODIFY;
END;

In dem „OnAfterGetRecord“-Trigger des DateItems „Item“ die folgenden Programmzeilen:

IF HASFILTER OR ModfiyAll THEN BEGIN
	Blocked:=TRUE;
	MODIFY;
END;

Wir prüfen hier ob Filter gesetzt wurden oder ob die Vairable „ModfiyAll“ den Wert TRUE besitzt. In beiden Fällen wird der aktuelle Datensatz gesperrt.

Speichere den Report unter einer freien ID ab.

Beim Starten des Reports hätte der Benutzer die Möglichkeit Filter zu setzen und unter Berücksichtigung dieser Filter würde der Report die entsprechenden Debtioren, Kreditoren und Artikel sperren. Wenn kein Filter angegeben wird, würde Navision normalerweise alle entsprechenden Datensätze sperren. Aus diesem Grund haben wir eine kleine Sicherheitsabfrage programmiert.