(gelöst) Funktionswert zurückgeben

20. April 2017 09:12

Guten Morgen!

Ich programmiere bereits seit einiger Zeit immer wieder mal kleine Anpassungen in unserem Navision 2016 selbst.
Nun stehe ich aktuell vor dem Problem, das ich das Ergebnis einer Funktion zurückgeben muss.

Wird in der Tabelle 5409 (FA-Arbeitsplan) das neue Feld Spindelzeit abgeändert, so ruft Navision die Funktion Bearbeitungszeit der CodeUnit NHFunctions auf und berechnet die neue Bearbeitungszeit pro Stück.
Code:
IF Spindelzeit > 0 THEN
  NHFunctions.Bearbeitungszeit(Rec."Input Quantity",Rec."No.",Rec."Item No. Prod. Line",Rec.Spindellaenge,"Working Time (Net)",Spindelzeit);


Dieser Aufruf, sowie die Berechnung innerhalb der Funktion
Code:
Bearbeitungszeit(Stueckzahl : Decimal;Arbeitsplatzgruppe : Code[20];Artikel : Code[20];Spindellaenge : Decimal;Arbeitszeitnetto : Decimal;Spindelzeit : Decimal) Bearbeitungszeit : Decimal
IF recWorkcenter.GET(Arbeitsplatzgruppe) THEN BEGIN
   IF recItem.GET(Artikel) THEN BEGIN
      Spindelanzahl := ROUND((Stueckzahl * recItem.Thickness) / Spindellaenge, 1, '>');
      BearbeitungszeitStueck := ((Spindelzeit * Spindelanzahl) / Stueckzahl) + Arbeitszeitnetto;
   END;
END;

funktionieren wie gewünscht.

Mein Problem besteht nun darin, dass das Ergebnis (BearbeitungszeitStueck) zurück an das Feld "Run Time" der Tabelle 5409 übergeben werden muss.
Was muss ich tuen, damit ich diesen Wert entspr. hinterlegt bekomme?

Vielen Dank für eure Hilfe bereits im Voraus!


Gruß
Fuige
Zuletzt geändert von fuige am 20. April 2017 10:08, insgesamt 1-mal geändert.

Re: Funktionswert zurückgeben

20. April 2017 09:14

Code:
IF Spindelzeit > 0 THEN
  Rec."Run Time" := NHFunctions.Bearbeitungszeit(Rec."Input Quantity",Rec."No.",Rec."Item No. Prod. Line",Rec.Spindellaenge,"Working Time (Net)",Spindelzeit);


das ist alles :)

Edit:
Oh ich sehe gerade das deine Funktion noch gar nicht den Wert zurück gibt
Bearbeitungszeit := Stueckzahl * BearbeitungszeitStueck

muss da natuerlich noch irgendwo rein

Re: Funktionswert zurückgeben

20. April 2017 09:18

Hi!

Mit diesem Funktionsaufruf erhalte ich folgende Meldung.

Type conversion is not possible because 1 of the operators contains an invalid type.
Decimal := VOID

Re: Funktionswert zurückgeben

20. April 2017 09:27

voidFunction()
//dosomething
ReturnVariable() returnwert : Decimal
//dosomething
returnwert := 1;

ReturnExit() : Decimal
//dosomething
EXIT(1);


Code:
voidFunction(); // kein return wert
wert := ReturnVariable(); //1
Wert := ReturnExit(); //1


wenn deine methode so definiert ist wie du sie hier geschrieben hast, dann solltest du den Fehler nicht bekommen

Re: Funktionswert zurückgeben

20. April 2017 09:35

Code innerhalb der Funktion nun so angepasst und als Return Value bei den lokalen Variablen ist Bearbeitungszeit vom Typ Decimal definiert.

Code:
Bearbeitungszeit(Stueckzahl : Decimal;Arbeitsplatzgruppe : Code[20];Artikel : Code[20];Spindellaenge : Decimal;Arbeitszeitnetto : Decimal;Spindelzeit : Decimal) Bearbeitungszeit : Decimal
IF recWorkcenter.GET(Arbeitsplatzgruppe) THEN BEGIN
   IF recItem.GET(Artikel) THEN BEGIN
      Spindelanzahl := ROUND((Stueckzahl * recItem.Thickness) / Spindellaenge, 1, '>');
      Bearbeitungszeit := ((Spindelzeit * Spindelanzahl) / Stueckzahl) + Arbeitszeitnetto;
   END;
END;


Der Fehler bleibt leider der selbe!

Re: Funktionswert zurückgeben

20. April 2017 09:45

Hallo,

naja, deine Funktion liefert jetzt einen Wert zurück, das ist schon mal schön, aber was machst du mit dem Wert? Nichts! Und das ist das Problem:

Du musst deinen Funktionsaufruf einer Variablen zuweisen:

Code:
IF Spindelzeit > 0 THEN
  Bearbeitungszeit := NHFunctions.Bearbeitungszeit(Rec."Input Quantity",Rec."No.",Rec."Item No. Prod. Line",Rec.Spindellaenge,"Working Time (Net)",Spindelzeit);


Gruß Fiddi

Re: Funktionswert zurückgeben

20. April 2017 09:52

Ich bin wieder einmal begeistert von diesem Forum!
Schnelle Hilfe mit kompetenten und freundlichen Antworten.

Die Erklärung von Ted war vollkommen korrekt.
Bei mir lag es nun daran, das ich die Tabelle 5409 schon geöffnet hatte, bevor ich die Angabe Return Value in der CodeUnit hinterlegt hatte.
Nachdem ich Tabelle 5409 geschlossen, neu geöffnet und dann den Funktionsaufruf angepasst hatte, ging auch alles wie hier beschrieben.

Vielen, vielen Dank für die schnelle Hilfe.
Fuige