Fehlermeldung bei @dblookup

  • Guten Morgen zusammen!


    Ich habe eine Fehlermeldung bei der Benutzung der @dblookup-Funktion. Ich habe die Funktion schon x-mal benutzt, aber jetzt sehe ich den Wald vor lauter Bäumen nicht.


    Maske 1: "Budget", Felder "Budget_ID" (Zahl), "Budget_Bezeichnung" (Text) und "Budget_Verantwortlicher" (Text), alle Felder bearbeitbar.
    Ansicht 1: Budget, Aufbau wie die Maske


    Maske 2: "Konto", Felder "Konto_Nummer" (Zahl), "Konto_Bezeichnung" (Text), "Konto_Budget_ID" (Zahl), alle Felder bearbeitbar, Felder "Konto_Budget_Bezeichnung" und "Konto_Budget_Verantwortlicher" sollen sich eben automatisch aus der Ansicht "Budget" füllen, nachdem die Budget_ID eingegeben wurde.


    Das Feld "Konto_Budget-Bezeichnung" ist berechnet, mit folgender Formel:

    Code
    @If(Konto_Budget_ID = ""; "bitte Budget auswählen";@DbLookup("Notes":"NoCache";"":"";"Budget";"Konto_Budget_ID";"Budget_Bezeichnung"))


    Wenn ich ein neues Dokument "Konto" anlege, ist richtigerweise das Feld mit "bitte Budget auswählen" vorbelegt. Erfasse ich in das Feld "Konto_Budget_ID" eine "1", kommt der Fehler:

    Code
    FEHLER: Serverfehler: Eintrag im Index nicht gefunden


    In der Ansicht Budget gibt es jedoch ein Dokument mit der Zahl 1 in der ersten Spalte.


    Wo liegt mein Denkfehler? Danke im voraus!

    • Offizieller Beitrag

    Du übergibst nicht den Feldinhalt von "Konto_Budget_ID" sondern den String "Konto_Budget_ID". Lass mal die Anführungszeichen weg.


    Außerdem fehlt da noch eine Fehlerbehandlung, fall es den Eintrag im Feld "Konto_Budget_ID" nicht in der Ansicht gibt.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Hallo Dirk,


    danke für Deinen Tipp, ich wusste, dass es so einfach sein würde... :)


    Die Fehlerbehandlung habe ich mir gespart, weil ich die Auswahl des Budgets über eine Ansichtenauswahl machen wollte. Die habe ich aufgrund der Fehlermeldung aber erstmal herausgenommen um die Fehlerursache einzugrenzen.


    Aber mal eine andere Frage: Macht es Sinn, zwei unterschiedliche Feldbezeichnungen (zusätzlicher Präfix "Konto_" zu nehmen, obwohl der Inhalt ja eigentlich identisch ist? Ich habe zwar die Hilfe zu gemeinsam genutzten Felder gelesen, aber mir erschließt sich nicht der Sinn, außer bei dem genannten Beispiel eines Feldes für das Erstellungsdatum.

    • Offizieller Beitrag

    Also ich würde das Item, wenn es in verschiedenen Masken auftaucht gleich nennen. Soll das Item in einer Maske 2 mal auftauchen, müssen diese unterschiedliche Namen haben.


    Der Vorteil bei gleichen Item-Namen ist, falls die Dokumente, die mit verschiedenen Masken erstellt wurden in einer Ansicht angezeigt werden, dann vereinfacht sich in diesem Fall die Spaltenformel.


    Gemeinsamme Felder haben auch ihre Daseinsberechtigung. Ein Feld muss dann nur einmal erstellt werden (besonders schön ist dies, wenn dort Formeln oder Scripte hinterlegt sind).


    Gruß
    Dirk

  • Hallo Dirk,


    behaupte das Gegenteil, weil ich überhaupt keinen "Ändern"-Button habe, um diese Option überhaupt zu finden.


    Nachdem ich das Feld "Konto_Budget_ID" übrigens auf "Dialogliste" umgestellte habe, um die Ansichtenauswahl zu verwenden, bekommt ich wieder den Fehler. Liegt das jetzt am Feld-Typ, weil dblookup eine Zahl erwartet?

    • Offizieller Beitrag

    die OPtion für den Themenpräfix bekommst Du nur, wenn Du über die Antwort-Schaltfläche antwortest und nicht über das einzelne Beitragsfenster.


    Du hast das Feld "Konto_Budget_ID" auf den Typ Dialogliste umgestellt und dann die Ansichtsauswahl verwendet?
    Ich glaube Du solltest mal eine Fehlerbehandlung in das Feld "Konto_Budget-Bezeichnung" einbauen.

    Code
    wert := @DbLookup("Notes":"NoCache";"":"";"Budget";"Konto_Budget_ID";"Budget_Bezeichnung");
    
    
    @If(Konto_Budget_ID = "" | @IsError(wert); "bitte Budget auswählen";wert)


    Gruß
    Dirk

  • Hallo Dirk,


    ok, ich bin davon ausgegangen, dass ich meinen ersten Beitrag editieren muss. Jetzt sehe ich es auch. :)


    Man sollte auch nicht einfach blind code kopieren, in Deinem code waren die Anführungszeichen wieder drin... :D


    Funktioniert aber trotzdem nicht. Aufgrund der Fehlerbehandlung ist der Fehler natürlich weg, jedoch bleibt der Hinweis "bitte Budget auswählen", egal ob ich die ID von Hand eingebe oder über die Ansichtenauswahl auswähle.


    Viele Grüße, Kai


    Edit: Ein eingefügtes @TextToNumber hat vorerst die Lösung gebracht. :)

    • Offizieller Beitrag
    Zitat

    Man sollte auch nicht einfach blind code kopieren, in Deinem code waren die Anführungszeichen wieder drin...

    wollte ja nur sehen, ob Du es bemerkst ;)


    Code
    wert := @TextToNumber(@DbLookup("Notes":"NoCache";"":"";"Budget";Konto_Budget_ID;"Budget_Bezeichnung")); 
    @If(Konto_Budget_ID = "" | @IsError(wert); "bitte Budget auswählen";wert)


    Gruß
    Dirk

  • Stimmt nicht ganz:

    Code
    wert := @DbLookup("Notes":"NoCache";"":"";"cfgBudget";@TextToNumber(Budget_ID);"Budget_Bezeichnung");
    @If(Budget_ID = "" | @IsError(wert); "bitte Budget auswählen";wert)


    Das @TextToNumber muss vor die Variable. Durch die Eigenschaft als Dialogliste findet Notes keinen Eintrag in der Ansicht, da dieses Feld ja eigentlich eine Zahl enthält... :)

    • Offizieller Beitrag

    Ah konnte ich nicht wissen. Du kannst über @IF auch noch besser Unterscheiden, ob noch keine Buget_ID eingetragen oder ein Fehler aufgetreten ist. Z.B. so:

    Code
    If(Budget_ID = ""; "bitte Budget auswählen"; @IsError(wert); "0"; wert)


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein