[Gelöst] Skript funktioniert nicht! Warum?

24. Juli 2008 11:19

hab hier einen code-schnipsel, den ich grad programmiert hab. er erzielt aber nicht die gewünschte wirkung :-(
aufgrund der abfrage ob zu einem bestimmten rechnungskopf schon ein gebuchter versandauftragskopf existiert, sollen nur die rechnungsköpfe gelistet werden, zu denen noch kein versandauftragskopf existiert und deren beträge summiert werden.
das skript läuft ohne fehler, aber bringt keine ergebnismengen. kann jemand mal draufschauen, wo ich mich in der logik vertan hab. ich seh's nämlich nicht...

Code:
Beginndatum[1] := InputDatum;
Abschlussdatum[1] := InputDatum;
Beginndatum[2] := InputDatum - 3;
Abschlussdatum[2] := InputDatum;
Beginndatum[3] := Beginndatum[2];
Abschlussdatum[3] := Abschlussdatum[2];
Versandcodes[1] := '*EXW';
Versandcodes[2] := '*DDP';
Versandcodes[3] := '*FCA';

FOR LOOP := 1 TO 3 DO BEGIN
  "Sales Invoice Header".SETCURRENTKEY("Order No.");
  "Sales Invoice Header".SETRANGE("Posting Date", Beginndatum[LOOP], Abschlussdatum[LOOP]);
  "Sales Invoice Header".SETFILTER("Shipment Method Code", Versandcodes[LOOP]);
  IF "Sales Invoice Header".FIND('=') THEN BEGIN
    REPEAT
    Auftragsnummer := "Sales Invoice Header"."Order No.";
    "Posted Shipmentorderheader".SETCURRENTKEY("Document No.");
    "Posted Shipmentorderheader".SETRANGE(Date, Beginndatum[LOOP], Abschlussdatum[LOOP]);
    "Posted Shipmentorderheader".SETFILTER("Document No.", Auftragsnummer);
    IF NOT "Posted Shipmentorderheader".FIND('=') THEN BEGIN
      Gesamtbetrag += "Sales Invoice Header".Amount;
    END
    UNTIL "Sales Invoice Header".NEXT = 0;
  END ELSE
    MESSAGE('Keine Shipments mit Code %1 vorhanden', Versandcodes[LOOP]);
END;

MESSAGE('Zum %1 wurden insgesamt %2 Euro an Umsatz nicht realisiert', InputDatum, Gesamtbetrag);


Danke, G.
Zuletzt geändert von GARMIN am 24. Juli 2008 15:28, insgesamt 1-mal geändert.

24. Juli 2008 11:40

Nach kurzen Drüberschauen würde ich zuerst mal die find('=') durch find('-') ersetzen.

24. Juli 2008 11:56

hiya mcclane, stimmt. das resultat ist auch schon etwas besser. es wird ein ergebnis gefunden und danach werden nur noch leere seiten mit dem berichtskopf produziert...

:roll: da wird wohl doch noch was in der logik sein.

kann man eigentlich tabellen abfragen, die man in seinem report desginer garnicht berücksichtigt hat? ich hab das mal versucht, aber da hat der interpreter gemeckert, dass er die variable "tabellenname" nicht kennt.

sers, G.

24. Juli 2008 12:10

GARMIN hat geschrieben:kann man eigentlich tabellen abfragen, die man in seinem report desginer garnicht berücksichtigt hat? ich hab das mal versucht, aber da hat der interpreter gemeckert, dass er die variable "tabellenname" nicht kennt.


Statt als DataItem kannst du eine beliebige Tabelle als globale oder lokale Record-Variable anlegen, genauso wie in allen anderen Objekten auch.

24. Juli 2008 12:11

Hallo,

die Tabellen müssen nur definiert werden unter Ansicht / CAL glaobals oder CAL locals - je nachdem ob du die Tabelle im ganzen Report benötigst oder nur lokal

Name DataType Subtype Length
SalesHeader Record Sales Header

Zu deinem Report: dazu müßte man nun sehen wie der Report aufgebaut ist. Wo und wie willst Du im Moment deine gefundenen Versandaufträge ausgeben?

24. Juli 2008 12:52

merci@natalie :-)

@west: die rechnungsköpfe zu denen keine gebuchten versandköpfe existieren sollen einfach als liste ausgegeben und deren beträge summiert werden. in diesem fall denke ich, muss ich einfach nur die gebuchten versandköpfe wie von dir und natalie beschrieben als lokale recordvariable des skripts anlegen, um dann beim durcharbeiten die auftragsnummern der gefundenen rechnungsköpfe dort abgleichen zu können...

der aufbau ist wohl auch aus meinem obigen code-snippet zu erkennen :?:

thanks, G.

24. Juli 2008 13:18

So wie du die Funktionsweise beschreibst, hätte ich mir den Reportaufbau folgendermaßen vorgestellt:

Der Report hat nur das DataItem "Sales Invoice Header" (ggf. ergänzt um "Sales Invoice Line").
Dort, im OnAfterGetRecord-Trigger vom "Sales Invoice Header", steht dann dein Quelltext drin.
Änderung: Wenn ein Versandauftrag gefunden worden ist, dann kommt
Code:
CurrReport.SKIP;

24. Juli 2008 15:27

merci nochmals@natalie: die idee ist gut, ich glaube ich sollte mich noch genauer mit der reihenfolge der trigger auseinandersetzen. ich hatte den ganzen code in PreDataItem - und da ist es natürlich schwierig das gewollte zu leisten...

wo du schon zwei gute tips parat hattest - gibts irgendwo eine umfassende online-dokumentation zu den möglichkeiten von MSDynamics und speziell NAV? Ich hab bis jetzt hauptsächlich in der web- und softwareentwicklung gearbeitet und zB beim umgang mit PHP immer php.net verwendet. navision24.de ist nicht so toll, vor allen dingen weil nicht der komplette befehls- und trigger- etc pp umfang dokumentiert sind (ausserdem fehlt die angabe ab welchem NAV und SP ein entsprechender befehl zur Verfügung steht).

Danke soweit und Problem kann dann wohl als solved gelten. G.

24. Juli 2008 15:42

GARMIN hat geschrieben:wo du schon zwei gute tips parat hattest - gibts irgendwo eine umfassende online-dokumentation zu den möglichkeiten von MSDynamics und speziell NAV?


Meine Haupt-Quellen (neben dem Forum natürlich):