0

Globale Funktion: In der Cloud funktioniert sie, auf dem Mac nicht

Ahoi. Ich habe wieder mal ein Problem mit Inkompatibilitäten zwischen den Plattformen.

Es sollen automatisch Belegnummern generiert werden, und zwar nach einem bestimmten Schema, das an anderer Stelle angegeben werden kann. Im vorliegenden Beispiel sieht dieses Schema (BelegNrAufbau) so aus:

KK-JJMM-L3 (Bsp: ZE-1907-001)

Es könnte aber auch so aussehen: KK_JJ__-L4 (ZE19-0001). Oder so: ___JJMM_L5 (190700001). Das aber nur zum Verständnis, für das Problem ist es unerheblich, das tritt in allen Varianten gleichermaßen auf.

Da die Belegnummer an verschiedenen Stellen generiert werden soll, habe ich dafür eine im Grunde recht simple globale Funktion definiert:

function GetBelegNr(BelArt : text,BNrStart : number,BelDat : date) do
    let BNrAufbau := first((select _Einstellungen).BelegNrAufbau);
    let BNrBsp := "";
    let BNrKK := substr(BNrAufbau, 0, 2);
    let BNrT1 := substr(BNrAufbau, 2, 1);
    let BNrJJ := substr(BNrAufbau, 3, 2);
    let BNrWW := substr(BNrAufbau, 5, 2);
    let BNrT2 := substr(BNrAufbau, 7, 1);
    let BNrLN := substr(BNrAufbau, 9, 1);
    if BNrKK != "__" then
        BNrBsp := BNrBsp + BelArt
    end;
    if BNrT1 != "_" then
        BNrBsp := BNrBsp + BNrT1
    end;
    if BNrJJ != "__" then
        BNrBsp := BNrBsp + format(BelDat, "YY")
    end;
    if BNrWW != "__" then
        BNrBsp := BNrBsp + switch BNrWW do
            case "QQ":
                "Q" + format(BelDat, "Q")
            case "MM":
                format(BelDat, "MM")
            end
    end;
    if BNrT2 != "_" then
        BNrBsp := BNrBsp + BNrT2
    end;
    let LfdNr := BNrStart + 1;
    BNrBsp := BNrBsp + switch BNrLN do
        case "3":
            format(LfdNr, "000")
        case "4":
            format(LfdNr, "0000")
        case "5":
            format(LfdNr, "00000")
        end;
    BNrBsp
end

 

Der Aufruf der Funktion erfolgt in einem Berechnungsfeld:

let BelArt := 'Kürzel';
let BNrStart := 'Start bei Nr';
let BelDat := today();
let NextBNr := GetBelegNr(BelArt, BNrStart, BelDat);
styled(NextBNr, Farbe)

 

Ergebnis: In der Cloud-App funktioniert's, in der Mac-App nicht.

 

FiBu_GlobalFunk1_Cloud

 

FiBu_GlobalFunk1_Mac

Hat jemand eine Idee, woran das liegen könnte? Und noch wichtiger: Wie sich das beheben/umgehen lässt? Bin für jeden sachdienlichen Hinweis dankbar.

13 Antworten

null
    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Copytexter,

    befor ich mich mit dem code beschäftige... versuch bitte

    function GetBelegNr(BelArt : text,BNrStart : number) do
    let BelDat:=today();

    .........

     

    und Aufruf ohne BelDat (wenn es immer heuties Datum ist)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Hallo Leo, danke für deinen Tipp. Ich habe es ausprobiert, und jetzt sieht das Ergebnis so aus:

    -1907-001

    Es wird also offenbar auch das Argument "BelArt" (2-stelliges Buchstabenkürzel aus Textfeld) nicht ausgewertet. Und was "BelDat" betrifft: Das ist normalerweise nicht "today()", sondern würde später aus einem Datumsfeld (Belegdatum) ausgelesen werden. Irgendwie muss ich das also auch mit übergeben.

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ok, dann für Datum die Variable in Funktion als number 

    ---

    GetBelegNr(BelArt : text,BNrStart : number,BelDatNum : date) do

     

    BelDat:=date(BelDatNum)

    ---

    und Aufruf:

    ---

    ....

    let BelDatNum:=number(Datum)

    let BelArt:=text('Kürzel')

    ---

    • Leonid_Semik
    • vor 4 Jahren
    • Gemeldet - anzeigen

     tippfehler:

    GetBelegNr(BelArt : text,BNrStart : number,BelDatNum : number) do

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Dasselbe Ergebnis wie vorher: -1907-001.

     

    Aaaber ...

     

    Das hat mich darauf gebracht, das Datum testweise mal aus einem Datenfeld vom Typ 'Datum' auszulesen. Das funktioniert. Und es funktioniert auch mit "date(today())". Anscheinend geht die Mac-App mit "today()" irgendwie anders um als die Cloud-App. Seltsam, aber wenn man's weiß ...

     

    Du hattest also wieder mal den richtigen Riecher. Es lag am Datumsformat. Da wäre ich ohne deinen Anstoß wahrscheinlich nicht so schnell drauf gekommen (wenn überhaupt). Vielen Dank!

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Nochmal der Reihe nach, falls jemand mal ein ähnliches Problem hat: In der Mac-App wurde die mit 'today()' bestückte Variable 'BelDat' nicht korrekt als Datumswert interpretiert, was dazu führte, dass beim Funktionsaufruf auch die anderen Argumente 'BelArt' und 'BNrStart' nicht übernommen wurden. Die Änderung auf 'date(today())' hat das Problem gelöst.

    Der Funktionsaufruf sieht jetzt so aus:

    let BelArt := 'Kürzel';
    let BNrStart := 'Start bei Nr';
    let BelDat := date(today());
    let NextBNr := GetBelegNr(BelArt, BNrStart, BelDat);
    styled(NextBNr, Farbe)

     

    Und das Ergebnis stimmt nun auch in der Mac-App:

    FiBu_GlobalFunk1_Mac_Success

     

    Ninox ohne Leo wäre wie Autofahren ohne Navi: Es geht, dauert aber länger.

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    "Ninox ohne Leo wäre wie Autofahren ohne Navi: Es geht, dauert aber länger."

     

    Das kann ich nur unterschreiben!

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ey, das gibt's doch gar nicht! Auf einmal funktioniert es nicht mehr. Ich hatte den Code der Funktion zum Testen dupliziert und 'GetBelegNr2' genannt. Da hat's funktioniert, siehe obigen Screenshot. Dann habe ich vorhin den vorherigen Kram gelöscht und die Funktion wieder in 'GetBelegNr' umbenannt. Sonst nix.

    Himmelherrgottdonnerwetternochmal! Jetzt kann ich wieder von vorne anfangen!

    PS: An der Aussage zu Leo ändert das natürlich nichts. ;)

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Update:  Jetzt wird's völlig abstrus: Ich hatte nach dem Auslesen des Belegnummern-Schemas einfach mal einen Dialog zur Anzeige des Wertes eingefügt:Und damit funktionierte es. Nahm ich den Dialog wieder raus, ging's nicht mehr.

    Dann habe ich noch ein wenig weiter herumexperimentiert, u. a. das Script der Funktion dupliziert und jeweils ne Ziffer dahintergestellt. So habe ich jetzt drei Funktionen gleichen Inhalts untereinander. Und jetzt kommt's: Rufe ich die erste der drei Funktionen auf, egal, wie sie heißt, funktioniert's nicht. Steht die aufgerufene Funktion an zweiter oder drittel Stelle im Editor, dann geht's. Wirklich! Isso.

    Spaßeshalber habe ich noch versucht, eine 2-Zeilen-Pseudo-Funktion vor der ersten "richtigen" zu platzieren. Lustigerweise gibt's dann wieder ein ganz anderes Ergebnis (ZA--). Mit zwei Funktionen geht es auch, es darf nur nicht die erste aufgerufen werden (hier: GetBelegNr2). Ich habe aktuell also tatsächlich zwei mal dieselbe Funktion untereinander stehen, aber nur die zweite (GetBelegNr) funktioniert:

    function GetBelegNr2(BelArt : text,BNrStart : number,BelDat : date) do
        let BNrAufbau := first((select _Einstellungen).BelegNrAufbau);
        let BNrBsp := "";
        [...]
        BNrBsp

    end;
    function GetBelegNr(BelArt : text,BNrStart : number,BelDat : date) do
        let BNrAufbau := first((select _Einstellungen).BelegNrAufbau);
        let BNrBsp := "";
        [...]
        BNrBsp

    end

     

    Das aufrufende Script sieht so aus:

    let BelArt := 'Kürzel';
    let BNrStart := 'Start bei Nr';
    let BelDat := today();
    let NextBNr := GetBelegNr(BelArt, BNrStart, BelDat);
    styled(NextBNr, Farbe)

    So funktioniert es. Momentan.

    Das soll einer verstehen. Versteht das einer?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ich bin ja auch vor einiger Zeit über ein nicht nachvollziehbares Problem mit globalen Funktionen gestolpert, die von jetzt auf nachher nicht funktionierten - ich will ja nicht unken, aber ich fürchte da ist generell noch etwas im Argen.

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Ja, ich erinnere mich dunkel. War das auch so verrückt? Gab's da irgendwelche Parallelen?

    • Torsten_Stang.1
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Verspätetes Hallo, die Kanaren haben mich die Tage etwas abgelenkt ;-)

     

    Parallen gab's nicht wirklich, außer: die Codes gingen von einem auf den anderen Tag nicht mehr in der globalen Funktion, obwohl technisch in Ordnung. :-/

     

    lg, Torsten

    • Ninox-Professional
    • planoxpro
    • vor 4 Jahren
    • Gemeldet - anzeigen

    Dia Kanaren, natürlich. Schuld sind immer andere. ;)

Content aside

  • vor 4 JahrenZuletzt aktiv
  • 13Antworten
  • 3415Ansichten