[gelöst] Syntax-Fehler in einem report

9. Januar 2011 14:34

Hallo am WE, (NAV 2009 CC)

ich kriegt heute meinen NAV-Partner nicht, habe aber Differenzen in einem (Individual-)report, den der NAV-Partner nach meinen Vorstellungen zusammengeschustert hat.
Jetzt habe ich mir die Sache mal durchgesehen und stolpere an einem Punkt an dem ich einen Syntaxfehler vermute (siehe unten rot - müsste das nicht eher := statt += heissen? was heisst += ?.
Warum da NAV beim Compilieren nicht meckert? Vielleicht doch kein Fehler?

Danke für Kommentare.

IF TempComponent.GET("Item No.") THEN BEGIN
TempComponent."Reorder Point"+="Remaining Quantity";
TempComponent.MODIFY;
END ELSE BEGIN
TempComponent."No.":="Item No.";
TempComponent."Reorder Point":="Remaining Quantity";
TempComponent.INSERT;
END;
Zuletzt geändert von SGanzmann am 9. Januar 2011 22:49, insgesamt 1-mal geändert.

Re: Syntax-Fehler in einem report

9. Januar 2011 14:45

Code:
TempComponent."Reorder Point"+="Remaining Quantity";

ist die Kurzform von
Code:
TempComponent."Reorder Point" := TempComponent."Reorder Point" + "Remaining Quantity";


Im "offiziellen" C/AL ist dieser Befehl nicht erhalten, es wurde auch mal davon abgeraten das zu verwenden, falls diese Schreibweise irgendwann nicht mehr unterstützt werden sollte. Benutze ich aber schon seit Jahren viel und gerne :wink:.

-=,*= und /= sind ebenfalls verwendbar, sind allesamt "Compound-assignment operators" (dt. "Komplexe Zuweisungen").

Re: Syntax-Fehler in einem report

9. Januar 2011 18:52

Und zur Verbesserung des Codes kannst du noch ein LOCKTABLE machen, um einem doppelten Select (im SQL) vorzubeugen:

Code:

CLEAR(TempComponent);
IF TempComponent.GET("Item No.") THEN BEGIN
  TempComponent.LOCKTABLE;
  TempComponent."Reorder Point"+="Remaining Quantity";
  TempComponent.MODIFY;
END ELSE BEGIN
  CLEAR(TempComponent);
  TempComponent.LOCKTABLE;
  TempComponent.INIT;
  TempComponent."No.":="Item No.";
  TempComponent."Reorder Point":="Remaining Quantity";
  TempComponent.INSERT;
END;

Re: Syntax-Fehler in einem report

9. Januar 2011 22:49

Danke wiedermal für umfassende Hilfe - man lernt halt immer was dazu...

Re: Syntax-Fehler in einem report

10. Januar 2011 08:54

BlackJack hat geschrieben:Und zur Verbesserung des Codes kannst du noch ein LOCKTABLE machen, um einem doppelten Select (im SQL) vorzubeugen:

Ähm ... mit LOCKTABLE vermeidet man keine "doppelten SELECT (im SQL)" ... sowas gibt's nicht ... mit LOCKTABLE wird kurz gesagt eine Transaktion serialisiert (um "Dirty Reads" zu vermeiden) und die betroffenen Datensätze werden gesperrt.

Sowohl beim MODIFY als auch beim INSERT werden die Datensätze ohnehin implizit exklusiv gesperrt, d.h. der LOCKTABLE bringt eh nix ...

Und: Wenn es sich bei der Tabelle "TempComponent" tatsächlich um eine temporäre Tabelle handelt, dann bringt der LOCKTABLE schon zweimal nix, weil die ganze Verarbeitung eh lokal - und eben temporär - abläuft ...