Wieso ist eine Auswertung in der Console änderst als in einer globalen Funktion?
Hallo Zusammen
Ich möchte eine globale Funktion in einem Report hinterlegen, die mir Daten aus zwei Tabellen ausliest. Arbeitsnachweise und 'P036-Clartiy'. Die zweite Tabelle ist ein wöchentlicher Import. Ich benötige die Funktion für eine Zeilenweise Auswertung (Excelersatz)
Wenn ich die Auswertung in der Console eingebe, dann bekomme ich das richtige Resultat. Wenn ich die Ausertung direkt im Report eingebe, bekomme ich das korrekte Resultat. Wenn ich die gleiche Auswertung als Funktion einfüge funktioniert die Auswertung nicht mehr.
Beispiel Funktion (Die Variablen der Funktion habe ich für den Vergleich direkt eingegeben (Datum, Projekt und Zeile):
function getTaskRecord(transdate : date,project_code : number,Zeile : number) do
let Datum := today() - 27;
let Dvon := first(select Arbeitsnachweise where 'Datum von' > Datum - 7).'Datum von';
let Dbis := last(select Arbeitsnachweise where 'Datum bis' < Datum + 7).'Datum bis';
let Projekt := 32510038;
let myTab := (select 'P036-Clarity' where project_code = Projekt and transdate >= Dvon and transdate <= Dbis and charge_code = "BILLCS").task_name;
let myUnique := unique(myTab);
let myResult := item(myUnique, 0);
myResult
end
Resultat:
Nichts
Beisspiel Console:
let Datum := today() - 27;
let Dvon := first(select Arbeitsnachweise where 'Datum von' > Datum - 7).'Datum von';
let Dbis := last(select Arbeitsnachweise where 'Datum bis' < Datum + 7).'Datum bis';
let Projekt := 32510038;
let myTab := (select 'P036-Clarity' where project_code = Projekt and transdate >= Dvon and transdate <= Dbis and charge_code = "BILLCS").task_name;
let myUnique := unique(myTab);
let myResult := item(myUnique, 0);
myResult
Korrektes Resultat:
01. Allgemeine Dienstleistungen
Funktion im Report:
let Zeile := 0;
getTaskRecord(transdate, project_code, Zeile)
Wo liegt hier der Unterschied in der Auswertung? Wenn ich in der Funktion die einzelnen Varialblen, also statt myResult bsp. Projekt abfrage oder transdate dann sind die Resultate der Variablen korrekt.
Viele Dank für Eure Unterstützung
Gruss Markus
2 Antworten
-
Hallo Markus. So wie ich das sehe, ist es eine Funktion ohne Parameter. Da Du alles über Variablen in der Funktion löst. Dann wäre der einfachste Fall der, daß Du alle Parameter und die Typnamen löscht. Die Funktion heißt dann
*
function getTaskRecord() do
let Datum := today() - 27;
let Dvon := first(select Arbeitsnachweise where 'Datum von' > Datum - 7).'Datum von';
let Dbis := last(select Arbeitsnachweise where 'Datum bis' < Datum + 7).'Datum bis';
let Projekt := 32510038;
let myTab := (select 'P036-Clarity' where project_code = Projekt and transdate >= Dvon and transdate <= Dbis and charge_code = "BILLCS").task_name;
let myUnique := unique(myTab);
let myResult := item(myUnique, 0);
myResult
end
*
...und wird mit
getTaskRecord()
aufgerufen. Ansonsten schlage ich Dir vor, die Parameter umzubenennen, damit sie nicht den gleichen Namen wie Feldnamen der Tabelle haben. (Da Du ja die Funktion nicht im Original gepostet hast, ist das ja vielleicht sogar so.) Parameter unterliegen den gleichen Bedingungen wie Variablen ausserhalb der Funktion - eindeutige Namen.Dann ist mir aufgefallen, dass der Parameter "Zeile" nirgendwo in der Funktion übergeben wird. Dann kannst Du schlussendlich auch keine Argumente beim Aufruf der Funktion übergeben, da sie in der Funktion ja keine Entsprechung finden. Schussendlich: alle Parameter, die du in der Funktion deklarierst, müssen beim Aufruf der Funktion als Argument eingetragen und können dann in der Funktion übergeben werden. Ich hoffe es klingt nicht zu schulmeisterlich. Schau mal, ob Dir das etwas nützt. Mirko
-
Vielen Dank für die Prompte Antwort
Das Problem hat sich gelöst, in dem ich, wie du schreibst, die Parameter so benannt habe, dass sie nicht den gleichen Namen hatten wie die Feldnamen.
Und nein es war überhaupt nicht schulmeisterisch sondern eine gute Hilfe!
Content aside
- vor 2 JahrenZuletzt aktiv
- 2Antworten
- 107Ansichten