Aufruf von Funktionen aus Berichten

Fragen zum Thema InterRun
Antworten
Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Aufruf von Funktionen aus Berichten

Beitrag von Hermann » Do, 13 Apr, 2006 8:38

Hallo Team Schauris,

ich habe mir einen Bericht erstellt, der mir unter anderem die Saldos der Hauptkonten pro Monat anzeigt.
Die Berechung mache ich mit dieser Autofunktion:
LebenPlus_02.Value =
Account("Leben Plus").TotalBalance("28.02.2006") -
Account("Leben Plus").TotalBalance("31.01.2006")

Damit ich nicht für jeden Monat Anfangs und Ende-Datum anpassen muß wollte ich mir ein Funktion schreiben die mir das Monatsende und eine die mir den Monatsanfang berechnet. Die Funktion habe ich im Programm-Center unter Modul im Kassenbuch angelegt. Jedenfalls mache ich etwas grundlegend falsch da z.B. auch eine einfache Funktion bei mir nicht funktioniert.

Beispiel:
im Modul angelegt:
Function Test : String
Result Date
EndFunction

im Bericht verwendet
LebenPlus_02.Value =
Account("Leben Plus").TotalBalance("28.02.2006") -
Account("Leben Plus").TotalBalance(Test)

bekomme ich die Fehlermeldung:
Kein numerisches Zeichen ACCOUNT[A]
Zeile: 2 Spalte: 42 > Account("Leben Plus").TotalBalance(Test)

Ich habe mir dann mal ein Hilfsvariable im Bericht angelegt.
var sMonth : String
sMonth = Test
das führt zu
Zuweisung nicht erkennbar! Text erwartet
Zeile: 2 Spalte: 1 >Einkuenfte_02.Value =

Ein Neustart hilft auch nicht. Mir ist aufgefallen, das z.B. Berichtsfelder/Schlüsselfeder in Blau angezeigt werden. Bei den Funktionen habe ich das auch erwarter. Das ist aber anscheinend nicht so.
Was läuft da falsch?

Beim Durcharbeiten der Beispiele in der Hilfe ist mir aufgefallen, das Groß/Kleinschreibung anscheinend keine Rolle spielt. (z.B. die Variable I in der Procedure SetNull)

Gibt es auch die Möglichkeit Funktionen zu debuggen?

:?
Gruß
Hermann D

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Do, 13 Apr, 2006 21:03

Hallo Hermann,

zunächst möchte ich Dir die aktuelle Beta-Version 5.7 empfehlen, da in einer der letzten Versionen die Funktion Account("Kontoname").xxx Probleme bei der Namensauflösung bereitete. Account(1).xxx würde gehen.

Hier der Link: http://www.eurokass.de/EK250306.exe

>>Jedenfalls mache ich etwas grundlegend falsch da z.B. auch eine einfache Funktion bei mir nicht funktioniert.

Result Date muss lauten: Result = Date, dann geht’s...
In C++ oder Java schreibt man Return Date, in InterRun oder Delphi – da kommen wir her – schreibt man Result = Date bzw. Result := Date.

Sämtliche Datumsfunktion findest Du unter http://www.interrun.de
Den Beginn eines Monats erhält man über BoM(Date) und das Ende über EoM(Date) wobei Date das aktuelle Datum ist.
Möchtest Du z.B. den Anfang des dritten Monats vom Jahr 2006 ermitteln, schreibst Du:

var aMonat : String
aMonat = BoY(Date) | aMonat steht jetzt auf “01.01.2006”
aMonat = AddMonths(aMonat,3) | aMonat steht jetzt auf “01.03.2006”

oder gleich:

aMonat = BoM(AddMonths(BoY(Date),3))

Das Monatsende errechnet sich durch:

aMonat = EoM(AddMonths(BoY(Date),3))

Der endgültige Source wäre:

LebenPlus_02.Value =
Account("Leben Plus").TotalBalance(EoM(AddMonths(BoY(Date),2))) -
Account("Leben Plus").TotalBalance(EoM(AddMonths(BoY(Date),1)))

Die Parameter 1 und 2 für Januar und Februar lassen sich natürlich noch durch Formularkomponenten ersetzen.

Das fehlende Einfärben von Modulfunktionen ist eine Schwäche von EuroKass. Wir werden das nachbessern.

Die Gross/Kleinschreibung spielt in InterRun keine Rolle, Gott sei Dank! Wie gesagt, wir kommen nicht aus der C++ Ecke.

Der Debugger von InterRun läst sich über „debug = true“ aktivieren und über „debug = false“ wieder deaktivieren... doch in EuroKass fehlen noch diverse Schnittstellen, um den gewünschten Effekt zu erzielen aber der Tag wird kommen.

Gruß,
Dirk Schauries
Team Schauries

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Aufruf von Funktionen aus Berichten

Beitrag von Hermann » Fr, 14 Apr, 2006 15:49

Hallo Dirk,

ich habe erst mal auf die neue Version upgedatet. Aber es kommt leider trotzdem nicht zum gewünschten Ergebnis:
wenn ich deine Version verwende:

LebenPlus_01.Value = Account("Leben Plus").TotalBalance(EoM(AddMonths(BoY(Date),1))) ..

bekomme ich diese Fehlermeldung

Kein numerisches Zeichen ACCOUNT[A]
Zeile: 1 Spalte: 49 >Account("Leben Plus").TotalBalance(EoM(AddMonths(BoY(Date),1))) -..

Auch wenn ich den Kontonamen durch den absoluten Index ersetze kommt der gleiche Fehler. Kann das sein, das die Funktion TotalBalance mit dem berechneten Wert nicht zurecht kommt?
Ich habe die Berechung testweise mit AccountSum so eingesetzt, was dann zu dieser Fehlermeldung führt.

Zuweisung nicht erkennbar! Text erwartet
Zeile: 1 Spalte: 53 > AccountSum("Leben Plus","01.01.2006",EoM(AddMonths(BoY(Date),1)))

Muß ich beim Update ggf. die alte Version vorher deinstallieren?

Gruß & Schöne Ostern
Hermann D

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Fr, 14 Apr, 2006 16:18

Hallo Hermann,

ich sehe gerade, dass die Funktion AddMonth beim Anwender gar nicht funktionieren kann, da ich alle internen Properties zu Testzwecken per Datei einlese, diese hat der Anwender aber nicht. Sorry!

Ich werde für heute Abend ein Update erstellen (http://www.eurokass.de/EK140406.exe), dann sollte es gehen.

Ältere EuroKass-Versionen brauchen nie deinstalliert werden.

Viel Spaß noch und ebenfalls Frohe Ostern.

Gruß,
Dirk Schauries
Team Schauries

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Beitrag von Hermann » So, 16 Apr, 2006 11:07

Hallo Dirk,

das Update hat leider nicht geholfen.
Als ich das Update über die vorherige Version installiert habe hat sich die Eurokass.exe beim Start immer aufgehängt. Ich habe dann die alte Version entfernt und neu installiert. Start war dann OK aber in meinem Bericht bekomme ich immer noch die Fehlermeldung

Kein numerisches Zeichen ACCOUNT[A]
Zeile: 1 Spalte: 46 > Account("Leben").TotalBalance(EoM(AddMonths(BoY(Date),1))) ....

:? :cry:

Ich versuche das Problem noch etwas einzukreisen. Wenn ich noch etwas herausfinde melde ich mich wieder

Gruß
Hermann D

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » So, 16 Apr, 2006 12:06

Hallo Hermann,

der Osterhase verriet mir gerade, dass es AddMonth und nicht AddMonths lauten muss – als ob der programmieren könnte. Aber ich glaube, er hat Recht, denn bei mir läuft der Source ohne Probleme: Account("Kontoname").TotalBalance(EoM(AddMonth(BoY(Date),1))) liefert einen gültigen Fließkommawert.
Versuchs noch mal ohne s am Ende.

Frohe Ostern und bis demnächst...

Gruß,
Dirk Schauries
Team Schauries

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Beitrag von Hermann » Mo, 17 Apr, 2006 11:42

Hallo Dirk,

stimmt! Kaum macht man es richtig, schon gehts.
Das "s" habe ich auch überlesen. Kommt davon wenn man (ich) einfach kopiert. :-)
Jedenfalls funktioniert das jetzt wie erwartet.

Danke für die rasche Hilfe!!
:D :D
Gruß
Hermann D

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Beitrag von Hermann » Di, 18 Apr, 2006 15:32

Hallo Team Schauries,

mit der Lösung haben wir jetzt nur den einen Teil meiner Fragen beantwortet.
Bei mir ist es leider noch so, das ich keine Funktionen aus Berichten verwenden kann. Aber wenn ich mir die Beiträge im Forum durchlese muß es eigentlich funktionieren.

Ich habe mir in einem Bericht ein Textfeld angelegt, das mir den Monatsnamen abhängig vom Auswertedatum anzeigen soll.

Das kann man so im Bericht lösen:
TextMonat_01.Text = MonthName(MonthNumber(AuswerteDatum.Date))
das funktioniert wie erwartet.

Ich möchte das nun in eine Funktion auslagern:
Im Bericht:
TextMonat_01.Text = getMonatGruppenName(AuswerteDatum.Date)

die Funktion im Modul Kassenbuch.kas
Function getMonatGruppenName(dAuswerteDatum : String) : String
Result = MonthName(MonthNumber(dAuswerteDatum))
EndFunction

-> Neustart (ist der inder Version, 5.7.0 noch notwendig?)

Ergebnis:
Zuweisung nicht erkennbar! Text erwartet
Zeile: 1 Spalte: 40 >TextMonat_01.Text = getMonatGruppenName(AuswerteDatum.Date)

Klar kann man das in der Autofunktion lösen, aber ich will mich in das Arbeiten mit Funktionen einarbeiten.
Was machen ich falsch? Stost mich doch mal mit der Nase drauf!!

Gruß
Hermann D

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Di, 18 Apr, 2006 20:24

Hallo Hermann,

merkwürdig, merkwürdig!
Ich habe Dein Beispiel über die Zwischenablage kopiert und ... es funktioniert auf Anhieb.

Hier noch mal alles im Detail:
Bericht, Textfeld TextMonat_01, Datumsfeld AuswerteDatum und einen Button erstellt.
Im OnClick-Ereignis des Buttons Deinen Source übernommen - TextMonat_01.Text = getMonatGruppenName(AuswerteDatum.Date)

Im Kassenbuch-Modul Deine Funktion kopiert (Function getMonatGruppenName(dAuswerteDatum : String) : String
Result = MonthName(MonthNumber(dAuswerteDatum))
EndFunction

Dann EuroKass neu gestartet (ab kommendem Wochenende nicht mehr nötig), Bericht geöffnet, auf den Button geklickt und..., alles wunderbar, da steht im Textfeld „April“.

Dann habe ich, nur so zum Spaß, im OnChange-Ereignis („Beim Ändern“) des Datumsfelds ebenfalls Deinen Source TextMonat_01.Text = getMonatGruppenName(AuswerteDatum.Date) kopiert. Jetzt ändert sich das Textfeld sofort bei jeder Änderung im Datumsfeld, wenn sich der Monat ändert.

Vielleicht liegt der Fehler ganz wo anders?

Überleg noch mal.

Gruß,
Dirk Schauries
Team Schauries

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Beitrag von Hermann » Mi, 19 Apr, 2006 11:11

Hallo Dirk,
das ist in der Tat merkwürdig. Ich habe mich heute noch einmal mit dem Problem beschäftigt.
Vorbereitung: Kassenbuch auf einem andern Rechner (W2000+ SP4) neu installiert und dann zwei Berichte (test + test2) mit den vorher verwendeten Funktionen in dem Beispielkassenbuch erstellt.

Wenn ich die Funktionen aus einer Procedure im Modul aufrufe läuft alles wunderbar.

Wenn ich aus einer Berichtsprocedure eine Procedure im Modul aufrufe --> läuft auch

Wenn ich aus einer Berichtsprocedure eine Funktion aufrufe
---> Zuweisung nicht erkennbar! Text erwartet
Zeile: 9 Spalte: 32 >MonatName = getMonatGruppenName(Date)
Es spielt dabei keine Rolle, ob ich da eine Variable oder eine direkte Texteingabe beim Aufruf verwende

Ich habe das Kassenbuch gezippt und ans Forum per Email verschickt. Da habe ich noch den Funktionsaufruf mit Klammer.
-->MonatName = (getMonatGruppenName(Date))
Macht aber keinen Unterschied im Ergebnis.

Ich bin gespannt, ob das Kassenbuch bei dir auf Anhieb läuft

Gruß
Hermann D

Benutzeravatar
Team Schauries
Site Admin
Beiträge: 1058
Registriert: Mo, 17 Jan, 2005 20:25
Wohnort: Essen

Beitrag von Team Schauries » Mi, 19 Apr, 2006 11:38

Hallo Hermann,

auf Anhieb nicht aber als ich die überflüssigen Klammern bei:

MonatName = (getMonatGruppenName(Date))

entfernt habe, verhielt sich alles wie gewohnt.

Bei Stringzuweisungen sind vorangestellte Klammern ein Stolperstein, bei mathematischen Funktionen ein MUSS, wenn Punkt- vor Strichrechnung gewünscht wird.
Anmerkung:
InterRun parst nämlich von links nach rechts, ohne Rücksicht auf Operatoren:
1 + 2 * 3 ergibt 9 und nicht 7.
1 + (2 * 3) ergibt 7.

Noch mal der Hinweis: Bei jeder Änderung im Kassenbuch-Modul wird diese erst nach Neuladen des Kassenbuchs wirksam.
In der kommenden Betaversion ist dieses Manko behoben.

Gruß,
Dirk Schauries
Team Schauries

Hermann
Profi
Beiträge: 23
Registriert: Do, 15 Dez, 2005 15:32
Wohnort: Gaggenau

Beitrag von Hermann » Mi, 19 Apr, 2006 13:31

Hallo Dirk,

die Klammern sind bei mir auch weg. Aber wie schon gesagt. Es geht nicht.

Ich frage mich nur was bei mir so anders ist, das genau diese Art des Funktionsaufrufes nicht geht???

Macht jetzt erst mal nichts. Für meinen ursprünglichen Bericht brauche ich das nicht unbedingt. Vielleicht bekomme ich ja doch noch heraus woran das hängt.

Gruß & Danke
Hermann D

Antworten