Neuen Trigger erstellen

28. Juli 2008 10:06

Hallo Zusammen,

wir sind gerade dabei einen Bericht der in Excel ausgegeben wird zu erstellen.
Sobald wir unsere Berechnungen in den Code schreiben meckert er, er will den Code in einem Sectioncodestück haben. Doch leider haben wir ja in einem Excelbericht keine Sections....
Dann haben wir es mit Sections versucht, da haben wir aber das Problem das er die Sections ganz zum Schluss durchläuft, also als letztes rechnet. Das sollte er aber nicht machen, er sollte ja rechnen bevor er das Excel öffnet.

Wir wollten jetzt einen neuen Trigger erstellen in dem wir den Code also die Berechnungen rein schreiben können.

Nur leider wissen wir nicht ob dies mit einem neuen Trigger überhaupt funktioniert? Und wenn ja, wie man ihn erstellt bzw. welche Parameter wir ihm mitgeben müssen usw.??

Wäre super wenn uns jemand helfen könnte.

Vielen Dank im Voraus!!!

Re: Neuen Trigger erstellen

28. Juli 2008 10:15

Hallo D_Gross!

D_Gross hat geschrieben:[...] Sobald wir unsere Berechnungen in den Code schreiben meckert er, er will den Code in einem Sectioncodestück haben.

Wer meckert? Navision oder Excel? Gibt es eine Fehlermeldung?

Gruß, Marc

28. Juli 2008 10:22

Hallo,

Navision meckert das der Code in einem Sectioncodestück stehen muss und dann bricht er ab. Steht der Code dann in den Sections wäre zwar die Fehlermeldung weg, dann funktionierts aber nicht da er erst ganz am Schluss in die Sections läuft.

28. Juli 2008 10:37

Wie sieht denn der C/AL-Code genau aus?

Gruß, Marc

28. Juli 2008 10:45

Es sind verschiedene Berechnungen. Zum Beispiel:


Code:
IF loc_hilfOrigSumme <> 0 THEN
  loc_hilf1 := (loc_hilfOrigSumme / 100);
IF loc_BerechSumme <> 0 THEN
  loc_prozGesamt := (loc_BerechSumme / loc_hilf1);



Im normalen Bericht der nicht in Excel ausgebenen wird, steht ein Code im Body, einer im Groupfooter und einer im Footer.

Gruß,
D_Gross

28. Juli 2008 11:44

Das heißt, wenn du den genannten C/AL-Code in einem anderen Trigger packst, als OnPreSection und OnPostSection bekommst du eine Fehlermeldung?

Ich glaube nicht, dass es der von dir genannten C/AL-Code ist, der den Fehler verursacht. Eher sowas ist wie CurrReport.SHOWOUT, etc. Aber genau kann ich das nicht beurteilen, da ich nicht den gesamten C/AL-Code kenne...

Gruß, Marc

28. Juli 2008 12:45

Ja genau, wenn ich den Code z.B. in OnPreDataItem schreibe bekomme ich die Fehlermeldung.
Ja ein CurrReport.SHOWOUTPUT ist in einem der drei Codes enthalten.
Kann ich das Problem lösen indem ich einen neuen Trigger erstelle?

28. Juli 2008 22:32

Einen neuen Trigger kannst du nicht erstellen.

Du könntest aber das CurrReport.SHOWOUTPUT entfernen und dann wirst du wahrscheinlich den C/AL-Code auch in einem anderen Trigger (beispielsweise in OnAfterGetRecord) ausführen können. Statt dem CurrReport.SHOWOUTPUT muss natürlich etwas entsprechendes nachprogrammiert werden.

Gruß, Marc

Re: Neuen Trigger erstellen

5. August 2008 13:24

Ja, richtig wenn ich das CurrReport.SHOWOUTPUT auskommentiere, kommt zumindest diese Fehlermeldung nicht mehr.
Soweit so gut.
Leider werden immer noch falsche Beträge ausgegeben. Falsch im Sinne von:
Jeder Artikel wird 13 mal untereinander aufgelistet. (Anstatt einmal richtig) Die erste Zeile stimmt, ab dann wird allerdings der richtige Betrag pro Zeile jeweils dazuaddiert.
Konnte den Fehler leider noch nicht finden ;(

Aber nochmal eine Verständnisfrage: Wie ist es denn nun üblich in Excelberichten. Gibt es da auch Sections oder wird üblicherweise der gesamte Code im Hauptcode untergebracht? Weil ich hätte auch schon Excel-Berichte mit Sections gesehen, die funktionieren..
Und findet man vielleicht irgendwo eine schöne Beschreibung bzgl. der Ausgabe von Berichten in Excel die für blutige Anfänger geeignet ist? :) Hab bisher noch nichts hilfreiches für mich gefunden..
Bisher kann ich nur den Code aus bereits funktionierenden Excel-Berichten rauskopieren, was auch gelegentlich ganz gut klappt, aber leider fehlts halt oft noch an dem nötigen Feinschliff - wie in diesem Fall..

Gruß, D_Gross

Re: Neuen Trigger erstellen

5. August 2008 13:32

Berechnungen wie
Code:
IF loc_hilfOrigSumme <> 0 THEN
  loc_hilf1 := (loc_hilfOrigSumme / 100);
IF loc_BerechSumme <> 0 THEN
  loc_prozGesamt := (loc_BerechSumme / loc_hilf1);

gehören normalerweise in OnAfterGetRecord (also ins DataItem) und
CurrReport.SHOWOUTPUT(...); ausschließlich in den OnPreSection (also in den Sections).

Außerdem - falls notwendig - kannst du im OnPostSection folgendes verwenden:
Code:
IF CurrReoport.SHOWOUTPUT THEN
  AddiereZBzurZwischensumme;

Dieser Code ist dafür da, um ganz sicher nur solche Datensätze zu zählen, die auch tatsächlich angedruckt werden. Ich benutze dieses Konstrukt immer zur Ermittlung von Zwischensummen für TransHeader und TransFooter, da NAV da manchmal die Zwischensummen nicht richtig selbst bildet.