C/Side Frage - Die "Never Ending Story"

8. August 2006 14:58

Nochmal zwei Anfängerfrage :wink: die vielleicht schmunzeln bei den Leuten die sich auskennen verursachen..

1) Kann ich irgendwie überprüfen ob ein Feldwert ein Int (oder kein Int) ist und den Wert dann in ein anderes Feld schreiben? Ich hätte irgendwie keine passende Funktion gefunden!??!

2) Ich müßte alle gesperrte Artikel entsperren und später wieder sperren. Wie ist die "Best Practice" um sich die Artikelnummern zu merken?

lg und besten Dank
Christian
Zuletzt geändert von zefhome am 10. August 2006 16:04, insgesamt 1-mal geändert.

8. August 2006 16:00

zu 1 )
Kann man mit der DIV-Funktion prüfen
Code:
if a DIV 1 = a then
  IsInteger := TRUE;


zu 2)
neues Hilfsboolfeld "Zu Sperren" in die Artikeltabelle einbauen, die Feldwerte aus "Gesperrt" über einen Processing-Report dort reinkopieren und hinterher wieder zurückschreiben.

8. August 2006 16:13

Erst mal danke für die Ansätze!!!!!!!

ad 1) wenn a kein Int is hauts mir dann nen error oder geht Nav einfach drüber?

ad 2) Gute Idee.. Werde ich so machen..

8. August 2006 16:32

ad 1) wenn a kein Int is hauts mir dann nen error oder geht Nav einfach drüber?


Wenn a kein Integer ist, also einen Decimalanteil hat ( der kann über die MOD Funktion ermittelt werden), sind linke und rechte Seite der Gleichung nicht identisch und es passiert nichts. IsInteger muss bei mehreren Durchläufen natürlich immer wieder auf die InitValue FALSE gesetzt werden.

Beispiel :
Code:
a := 35.698;
b := a DIV 1; 
c := a MOD 1; 


ergibt :
b = 35
c = 0.698
Zuletzt geändert von Kowa am 8. August 2006 16:35, insgesamt 1-mal geändert.

8. August 2006 16:34

und wenn a z.B. ein String ist? Wie verhält sich Nav dann?

8. August 2006 16:38

zefhome hat geschrieben:und wenn a z.B. ein String ist? Wie verhält sich Nav dann?


Dann benutzt man erst die EVALUATE Funktion mit Rückgabewert. Wenn dieser OK ist, dann ist der String numerisch umwandelbar.

Code:
Ok := EVALUATE(Variable, String);
Zuletzt geändert von Kowa am 8. August 2006 16:54, insgesamt 1-mal geändert.

8. August 2006 16:54

1000 Dank!

10. August 2006 10:29

Eine weitere Frage: Wie kann ich per Code einen Report aufrufen?

lg und Danke
Christian

10. August 2006 11:25

Gruesse,

hierfuer kannst du entweder
REPORT.RUNMODAL(Number [, ReqWindow] [, SystemPrinter] [, Record])
oder
REPORT.RUN(Number [, ReqWindow] [, SystemPrinter] [, Record])
verwenden. Den genauen Unterschied der beiden Funktionen kann ich dir ehrlich gesagt auch nicht erklaeren, zumal auch in der Hilfe nichts genaueres steht. ;)

Gruesse
feri

10. August 2006 11:39

Danke!

Auch im Application Designer Guide steht nix darüber.. Kennt jemand den Unterschied?

lg
Christian

10. August 2006 11:42

doch was gefunden..

Siehe Mibuso Forum

10. August 2006 15:24

Generell :
Modale Aufrufe erlauben nicht, den Focus ( Aktivierung des Fensters ) auf ein anderes Fenster zu legen , bevor hier eine Eingabe erfolgt ist. Ein bekanntes Beispiel dafür ist das "Speichern unter..." Fenster zum Dateispeichern.

In Navision :
Modale Aufrufe ( auch von Forms oder Dataports) erwarten immer ein Eingabe vom User, wenn sie mit Request Form aufgerufen werden. Deswegen sind sie während einer Schreibtransaktion nicht zulässig, weil sonst das ganze System wegen der Tabellensperren für weitere Schreibtransaktionen blockiert wird. Der ReqWindow-Parameter muss in solchen Fällen also immer FALSE sein

Eine weitere Art einen Report zu starten, ist eine Reportvariable für den gewünschten zu definieren. Dann kann an diese Variable ein .RUN oder .RUNMODAL angehängt werden. Bei dieser Methode können auch Funktionen im Report aufgerufen werden.

Code:
MyReport.MyFunc; // beliebige Funktion
MyReport.SETTABLEVIEW(Rec);
MyReport.RUN;

10. August 2006 16:03

Wenn ich hier schon so gute Hilfe finde Frage ich jetzt noch was das mich zwar als Noob outet, aber das is okay :)

Also: Ich habe im "Sales Header" bei den "Return Orders" ein zusätzliches Feld das angibt ob eine Reklamation beim Hersteller ist ("Status Reklamation" = "beim Hersteller").
Daraus befülle ich ein FlowField in den "Sales Line"'s ob diese Zeile da ist oder nicht.

Jetzt kommt meine Frage:
Auf einem Report möchte ich jetzt den Lagerstand abzgl. der Produkte die beim Lieferanten sind haben. (Anzahl=Inventory - der Artikelanzahl aus einer "Sales Line" mit False im Feld IstDa)

Also würde ich alle Items durchgehen und dann auf dem OnAfterGetRecord-Trigger versuchen per Code die Summe aller SalesLines.Quantity zu diesem Artikel (Filter auf "Document Type" = "Return Order", "No." und "IstDa" = False).

Also theortisch sollte das gehen, ich bin nur leider C/Side ein bissi schwach auf der Brust um das umzusetzen. Hätte jemand einen Vorschlag für die Filter und das Subtrahieren?

lg
Christian

11. August 2006 18:38

Bitte mach für diese Frage ein neues Thema auf , da in diesem sonst zuviel verschiedene Themen behandelt werden die nichts miteinander zu tun haben.