0

dynamisches Auswahlfeld per Modularisierung füllen?

Hallo zusammen,

ich habe eine Stammdatentabelle mit gepflegten Mitarbeitern, diese Mitarbeiter sind mit verschiedenen Datensätzen aus der Untertabelle Kostenstellen verknüpft.

In der Zeiterfassungstabelle möchte ich nur für den Benutzer zugewiesene Kostenstellen in einem dynamischen Auswahlfeld anzeigen lassen.

in "dynamic values" schreibe ich:

let ma := first(select Mitarbeiter where Mitarbeiter.'zugewiesener Ninox-Benutzer'=user())
ma.Mitarbeiter.Kostenstellen

Im Ergebnis werden die dynamischen Werte aber nicht gefüllt.
Wo ist mein Denkfehler?

19 Antworten

null
    • Developer by Smartplanung
    • smartplanung
    • vor 1 Jahr
    • Gemeldet - anzeigen

    "ma" enthält ja schon einen Record aus der Tabelle Mitarbeiter!? Dann sollte es also so sein:

    let ma := first(select Mitarbeiter where 'zugewiesener Ninox-Benutzer' = user())
    ma.Kostenstellen

    oder alternativ:

    select Kostenstellen where Mitarbeiter.'zugewiesener Ninox-Benutzer' = user()
    • a_berndt
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Mein Fehler, ich habe mich komplett falsch ausgedrückt.
    Die "Stammdatentabelle"ist in Wirklichkeit eine Stammdaten-Datenbank und die "Zeiterfassungstabelle" ist eine Zeiterfassungs-Datenbank.

    Die Mitarbeiter sind per Modularisierung miteinander Verknüpft. Ungefähr so:

    Stammdaten-Datenbank

    Mitarbeiter
     -> Untertabelle Kostenstellen

    Zeiterfassungs-Datenbank

    Mitarbeiter

     -> Mitarbeiter (verknüpfung zum Mitarbeiter aus Stammdaten-Datenbank)

     

    ma enthält also nun einen Eintrag aus der Mitarbeitertabelle der Zeiterfassungsdatenbank. Ich möchte die Kostenstellen aus der Verknüpfung zur Stammdatentabelle in ein dynmaisches Auswahlfeld schreiben.

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      in welcher Datenbank befindet sich das Auswahlfeld?

      Ein Ansatz wäre:

      let ma := first(select Mitarbeiter where Mitarbeiter.'zugewiesener Ninox-Benutzer'=user())
      do as database 'Zeiterfassungs-Datenbank'
         select Kostenstellen where Mitarbeiter = ma
      end

      es kann jetzt sein, dass ich die Datenbanken verwechselt habe. Wenn nicht und es trotzdem nicht geht, solltest Du vielleicht über ein Formelfeld prüfen, ob die Variable ma überhaupt beschrieben wird. Sonst müsste man da auch nochmal spezifischer schauen, wie man den Wert bekommt.

      In der Modularisierung weiß ich gerade nicht, wie sich direkte Verknüpfungen von Datensätzen aus anderen Datenbanken verhalten. Wenn man jedoch mit select arbeiten möchte oder auch mit record(table, id) muss es immer mit do as database 'datenbankname' geschehen.

      • a_berndt
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      Das habe ich mal auf einen Button gelegt:

      let ma := mitarbeiter().Mitarbeiter.'Ninox-Nutzer zuordnen';
      do as database Personalstammdaten
          let personalstamm_mitarbeiter := (select Mitarbeiter where 'Ninox-Nutzer zuordnen' = ma);
          let res := (select Kostenstellen where Mitarbeiter = personalstamm_mitarbeiter);
          for ks in res do
              debug(text(ks.Kostenstellen))
          end
      end

      Als Ergebnis in der Konsole bekomme ich die Korrekten Kostenstellen

      Das ganze im Dynamischen Auswahlfeld:

      let ma := mitarbeiter().Mitarbeiter.'Ninox-Nutzer zuordnen';
      let res := null;
      do as database Personalstammdaten
          let personalstamm_mitarbeiter := (select Mitarbeiter where 'Ninox-Nutzer zuordnen' = ma);
          res := (select Kostenstellen where Mitarbeiter = personalstamm_mitarbeiter)
      end;
      res

      Leider ohne Ergebnis. 

      Auch in dieser Variante wird das Feld nicht gefüllt:

      let ma := mitarbeiter().Mitarbeiter.'Ninox-Nutzer zuordnen';
      do as database Personalstammdaten
          let personalstamm_mitarbeiter := (select Mitarbeiter where 'Ninox-Nutzer zuordnen' = ma);
          select Kostenstellen where Mitarbeiter = personalstamm_mitarbeiter
      end

      Die Dynamische Auswahl soll in der Arbeitszeit-Datenbank gefüllt werden.

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

       ich habe es jetzt mal versucht nachzustellen - vermutlich nicht 1:1 wie es bei Dir ist. Aber ich habe jetzt zwei Datenbanken erstellt:

      Stammdaten
      Tabellen: Mitarbeiter (Vorname + Nachname) --> Untertabelle Kostenstellen (mit einem Feld Konto)
      Ein Mitarbeiter hat jetzt Kostenstellen

       

      Zeiterfassung
      Tabelle Mitarbeiter mit einer Verknüpfung 1:n auf Mitarbeiter (Stammdaten)

      Wenn ich nun in der Zeiterfassung einen Mitarbeiter auswähle kann ich in einem Formelfeld die Kostenstellen aufrufen:

      let ma := Mitarbeiter;
      do as database Stammdaten
          concat((select Kostenstellen where Mitarbeiter = ma).Konto)
      end
      

      Ergebnis: 112233, 223344, 334455

      Wenn ich nun im dAF folgendes eintrage:

      let ma := Mitarbeiter;
      do as database Stammdaten
          select Kostenstellen where Mitarbeiter = ma
      end
      

      Erhalte ich keine Werte. Die Verbindung scheint aber da zu sein, da ich unter "Name des dynamischen Werts" die vorhandenen Felder links angezeigt bekomme.

      Wenn sonst keiner eine Lösung hat, würde ich jetzt mal auf einen Bug tippen.

      Ich werde es mal als Bug melden und schauen, was sich ergibt.

      • a_berndt
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Vielen Dank für Deine Mühe. Verhält sich bei mir genauso, die Felder werden angezeigt, das dynamische Auswahlfeld bleibt aber leer.

      Danke fürs Bug melden, ich hoffe es ist auch ein Bug der bald gefixed werden kann.

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Kannst du deine Bsp-DB'en mal hier zur Verfügung stellen.

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen
    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Wenn es eine Untertabelle von Mitarbeiter ist und die Untertabelle im DAF angezeigt werden soll, dann muss der zu vergleichende Wert eine Zahl sein.
     ma := number(?) [? = ID des Records in Tabelle Mitarbeiter, dessen Untertabelleneinträge angezeigt werden sollen als reine Zahl]
    do as database Stammdaten
    select Kostenstelle where Mitarbeiter = ma
    end

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

       

      let ma := number(Mitarbeiter);
      do as database Stammdaten
          select Kostenstellen where Mitarbeiter = ma
      end
      

      und

      let ma := number(Mitarbeiter);
      do as database Stammdaten
          select Kostenstellen where number(Mitarbeiter) = ma
      end
      

      Das DAF bleibt nach wie vor leer.

      Die Formelfelder zeigen bei der Umstellung immer noch korrekte Werte an.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Es sieht so aus, als ob der numerische Wert nicht akzeptiert wird in 'do as database'.

    let ma := 1;
    do as database Stammdaten
        select Kostenstellen where Mitarbeiter = ma
    end

    funktioniert, wenn die ID vorhanden ist.

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

       ich habe es jetzt auch mal versucht mit einem Nummernfeld welches die ID erhält, wenn der Mitarbeiter verknüpft wird. Aber auch da wird nichts angezeigt. Wenn ich der Variable wie in deinem Beispiel händisch die 1 gebe, werden die Kostenstellen im DAF angezeigt.

      Auch das verschieben der Variable unter das do as database bringt nichts.

      Meldest Du den Bug?

      • UweG
      • vor 1 Jahr
      • Gemeldet - anzeigen

       Ich habe auch alle mir einfallenden Varianten getestet. Es wird die VerknüpfungsID irgendwie nicht im select akzeptiert.

    • UweG
    • vor 1 Jahr
    • Gemeldet - anzeigen

    Kannst du bitte den Bug ins Partnerforum einstellen.

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

      ok

      • Developer by Smartplanung
      • smartplanung
      • vor 1 Jahr
      • Gemeldet - anzeigen

      ist gemeldet

      • a_berndt
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Gibt es hier Neuigkeiten, kann ich das irgendwo sehen?

      • Developer by Smartplanung
      • smartplanung
      • vor 11 Monaten
      • Gemeldet - anzeigen

       der Status des Bugs ist im Forum als "Zur Kenntnis genommen" markiert. Leider noch nicht als "Fix Pending". Demnach ist da noch nichts passiert.

      Es ist aktuell eine Beta für 3.11 im Umlauf, wo das Problem nach wie vor besteht. Ich habe es gerade nochmal getestet.

      • a_berndt
      • vor 11 Monaten
      • Gemeldet - anzeigen

       Dank dir für die Info :)