C/Side - Syntaxfehler

24. Mai 2013 14:31

Hallo zusammen,

im Zuge eines ERP-Kurses an der Uni komme ich in den Genuss mich mit MS Dynamics Nav 5 zu vergnügen. Um die Sache ein wenig spannender zumachen, dürfen wir auch etwas Programmiererfahrung mit C/Side sammeln. Im Zuge dessen programmieren wir eine Art Studentenverwaltung mit allem was das Herz begehrt, Tabellen, Forms, Reports, FLowFileds und auch Triggern. Das ganze ich zwar nich Prüfungsrelevant, jedoch würde ich es gerne verstehen.

An und für sich kommt uns der Dozent schon wirklich sehr entgegen, so haben wir für die benötigten Trigger auch eine an C/Side angelehnte Form des Pseudo-Codes erhalten, sowie eine detailierte Beschreibung der Parameter, Variablen etc.:

Parameter
pPruefungsnr Integer
pSemester Code(10)
pMatrikelnr Integer

Variablen
_ErgebnisRec Record Ergebnis
_Count Integer

Return Value
ergCount Integer

Der Pseudocode sieht so aus:

Code:
BEGIN
    Anzahl auf 0 setzen;
    Wenn in der Tabelle ErgebnisInfo Datensätze gefunden wurden
        BEGIN
        Durchlaufe die Tabelle ErgebnisInfo
            BEGIN
            Wenn Pruefungsnr und Semester und Matrikelnr übereinstimmen
                Erhöhe die Anzahl;
            END;
        END;
    Ergebnis := Anzahl;
END;


Letztendlich soll die Funktion die Anzahl der bisherigen Versuche eines Studenten zählen und diese zurückgeben. Ich verstehe auch sehr genau was zutun ist, bzw. aus welchen Arbeitsschritten die Funktion besteht.

1) Zählervariabel auf 0 setzen.
2) Tabelle mit Hilfe eines Records durchlaufen
3) Gucken ob Matrikelnr, Semester und Prüfungsnummer bereits in der Tabelle vorhanden sind und ggf. Zähler erhöhen.
4) Abschließend den Wert in die Rückgabevariabel geben.

Soweit stellt das alles auch keinen komplexen Algorithmus dar, mein Code sieht auch dementsprechend aus.

Code:
BEGIN
    _Count := 0;
    IF _ErgebnisRec.FIND('-') THEN
   BEGIN
        REPEAT
            IF (_ErgebnisRec.Pruefungsnr = pPruefungsnr)
            AND (_ErgebnisRec.Semester = pSemester)
            AND (_ErgebnisRec.Matrikelnr = pMatrikelnr) THEN
            Begin
                _Count := _Count+1;
            End;
        UNTIL _ErgebnisRec.NEXT = 0;
   END;
    ergCount := _Count;
END;


Wenn ich diesen Code nun aber an entsprechender Stelle einfüge und die Tabelle, es handelt sich um eine Funktion für Trigger, kompilieren möchte, erhalte ich bloß ein nichts sagendes "Syntaxfehler.".

Damit mich hier niemand falsch versteht, ich bitte nicht darum das mir hier jemand meine Sachen erledigt. Jedoch benötige ich einen Hinweis warum dieser Code nicht akzeptiert wird. Ferner würde ich gerne wissen ob es nicht eine IDE für C/Side gibt, damit ich nicht weiterhin mit diesem Billig-Texteditor von Nav arbeiten muss.

Vielen dank schonmal. :)

Re: C/Side - Syntaxfehler

24. Mai 2013 14:42

Das BEGIN in der ersten und END in der letzten Zeile deines Codes gehören nicht in den Quelltext.
Wenn ich zusätzlich deinen Quelltext nach NAV-Standard formatiere, sieht das Ergebnis so aus:

Code:
_Count := 0;
IF _ErgebnisRec.FIND('-') THEN BEGIN
  REPEAT
    IF (_ErgebnisRec.Pruefungsnr = pPruefungsnr) AND
       (_ErgebnisRec.Semester = pSemester) AND
       (_ErgebnisRec.Matrikelnr = pMatrikelnr)
    THEN BEGIN
      _Count := _Count + 1;
    END;
  UNTIL _ErgebnisRec.NEXT = 0;
END;
ergCount := _Count;

Ich erkenne sonst nichts syntaktisch Falsches daran.

Höchstens etwas Kosmetik: Du könntest auf Variable auf _Count zugunsten von ergCount verzichten. Einen Wert um 1 erhöhen kann man etwas kürzer schreiben. So:
Code:
ergCount := 0;
IF _ErgebnisRec.FIND('-') THEN BEGIN
  REPEAT
    IF (_ErgebnisRec.Pruefungsnr = pPruefungsnr) AND
       (_ErgebnisRec.Semester = pSemester) AND
       (_ErgebnisRec.Matrikelnr = pMatrikelnr)
    THEN BEGIN
      ergCount += 1;
    END;
  UNTIL _ErgebnisRec.NEXT = 0;
END;


Ferner würde ich gerne wissen ob es nicht eine IDE für C/Side gibt, damit ich nicht weiterhin mit diesem Billig-Texteditor von Nav arbeiten muss.
Nee, das wurde uns NAV-Programmierern noch nie gegönnt :mrgreen:
Man stelle sich vor, seit NAV 2013 gibt es sogar buntes Syntax-Highlighting ...

Re: C/Side - Syntaxfehler

24. Mai 2013 14:58

Natalie hat geschrieben:Man stelle sich vor, seit NAV 2013 gibt es sogar buntes Syntax-Highlighting ...


Ich widerspreche ja ungern, aber das in der Tat feine Feature gabs schon in nav6/09.

Re: C/Side - Syntaxfehler

24. Mai 2013 14:59

Markus Merkl hat geschrieben:
Natalie hat geschrieben:Man stelle sich vor, seit NAV 2013 gibt es sogar buntes Syntax-Highlighting ...


Ich widerspreche ja ungern, aber das in der Tat feine Feature gabs schon in nav6/09.

Ups, verdammt :mrgreen:
Naja, jedenfalls gabs das unter NAV 5.xx noch nicht ... :roll:

Re: C/Side - Syntaxfehler

24. Mai 2013 15:18

Natalie hat geschrieben:
Markus Merkl hat geschrieben:
Natalie hat geschrieben:Man stelle sich vor, seit NAV 2013 gibt es sogar buntes Syntax-Highlighting ...

Ich widerspreche ja ungern, aber das in der Tat feine Feature gabs schon in nav6/09.

Ups, verdammt :mrgreen:

NAV 2013 macht dafür anderswo leichte Fortschritte: Die Möglichkeit, Trigger und Funktionen ein- und auszuklappen kam dazu.

Re: C/Side - Syntaxfehler

24. Mai 2013 18:46

Hallo zusammen,

zunächst einmal vielen Dank für die vielen schnellen Antworten.
Mittlerweile habe ich es hinbekommen, woran es genau lag kann ich leider nicht sagen. Jedoch vermute ich einige Nicht-Druckbare-Zeichen welche der C/Side-Editor nicht anzeigt, auf jeden Fall ging alles nachdem ich alle unnötigen Leerzeichen entfernt und erneut gesetzt habe. Sehr Kurios das ganze.

Vielleicht komme ich ja nochmal auf euch zurück, sollte sich noch ein Problem ergeben. ;)