0

Summierung abhängig von Auswahlfeld

Hallo zusammen,

ich  habe die Doku gelesen, das Forum zu Rate gezogen,  alles an select, where etc. ausprobiert und bekomme es nicht hin ...

 

Es handelt sich um eine n:m-Beziehung folgender Tabellen:

"Buchungssätze" - "ZO Inst-Belege" - "Dokumente"

In "Buchungssätze"  soll in einem Funktionsfeld die Summe des Feldes "Betrag in €" derjenigen zugeordneten Datensätze der Tabelle "Dokumente" berechnet werden, bei denen das Auswahlfeld "Auslage/Direkt" (ebenfalls in "Dokumente") den Wert "1" hat.

Der Hintergrund: Es soll geprüft werden, ob die Summe der Beträge der zugeordneten Zahlungsbelege dem in der Belegliste eingetragenen Betrag entspricht. Dabei sollen nur diejenigen zugeordneten Belege in die Berechnung einbezogen werden, die direkt vom Endempfänger kommen, nicht etwaige Auslagebelege (die haben den Wert 2).

Für Hinweise wäre ich dankbar!

Ein schönes Wochenende und schöne Grüße

ali

8 Antworten

null
    • Ninox-Professional
    • planoxpro
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Hallo Ali, versuch's mal so;

    sum('ZO Inst-Belege'[Dokumente.'Auslage/Direkt' = 1].Dokumente.'Betrag in €')
      • Ali
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Super! Das wars! Ich muss an der Grammatik arbeiten ...
      Besten Dank :-)

      • Ali
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Jetzt wollte ich gleich mein neu erworbenes Wissen einsetzen und bin schon wieder gescheitert.
      Geprüft werden soll via Funktionsfeld:

      Stimmt das Datum im Feld "BL-Belegdatum" der Tabelle "Buchungssätze" mit dem Datum des Feldes "Beleg Belegdatum" der Tabelle "Dokumente" überein?

      Die Schwierigkeit: Einem Buchungssatz können mehrere Dokumente zugeordnet sein. Diese können im Auswahlfeld "Auslage/Direkt" (der Tabelle "Dokumente") den Wert 1 (Beleg Endempfänger) oder 2 (Auslagebeleg) haben.

      Handelt es sich um eine Beleg Endempfänger (1) kann es nur einen zugeordneten Beleg geben und die Prüfung ist einfach.

      Ist es aber eine Auslagenbuchung, können mehrere Endbelege zugeordnet sein, deren Datum dann aber keine Rolle spielt. Hier soll die Prüfung dann nur mit dem Auslagenbeleg (2), von dem es ebenfalls nur einen zugeordneten geben kann, erfolgen.

      Es ist wieder ein Grammatikproblem, oder?

      Ich danke im Voraus für Unterstützung.

      Beste Grüß

      ali

    • Ninox-Professional
    • planoxpro
    • vor 2 Monaten
    • Gemeldet - anzeigen

    Sorry, aber das ist mir jetzt zu hoch ...

     said:
    Stimmt das Datum im Feld "BL-Belegdatum" der Tabelle "Buchungssätze" mit dem Datum des Feldes "Beleg Belegdatum" der Tabelle "Dokumente" überein?

    Das heißt, es sollen von vornherein nur Dokumente mit übereinstimmendem Datum berücksichtigt werden?

    Und dann soll geprüft werden, ob Auslage/Direkt = 1 oder 2?

    Und dann ...?

      • Ali
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Oh sorry, dann war ich nicht genau genug.

      Es soll immer geprüft werden, ob die beiden Daten übereinstimmen. Tun sie das, soll die Funktion ausgeben: "Ja", wenn nein, dann "Nein".
      Kann man das jetzt verstehen?

      Danke!

      • Ali
      • vor 2 Monaten
      • Gemeldet - anzeigen

        Vielleicht noch zur Ergänzung: 
      Sobald bei den zugeordneten Dokumenten eine "Auslage/Direkt" = 2 dabei ist, soll nur dessen Datum geprüft und die Dokumente mit der "Auslage/Direkt" = 1 ignoriert werden. Ist keine 2 dabei, soll das zugeordnete Dokument mit der "Auslage/Direkt = 1" geprüft werden.

      • Ninox-Professional
      • planoxpro
      • vor 2 Monaten
      • Gemeldet - anzeigen

       

      Hm. Also soll gar nichs summiert werden? Es gibt zu 'Auslage/Direkt' = 1 oder 2 sowieso immer nur jeweils ein passendes Dokument? Und wenn dessen Datum mit dem im Buchugssatz übereinstimmt, soll der Betrag ausgelesen werden?

      Falls ja, würde ich das so versuchen:

      let myBlDat := 'BL-Belegdatum';
      let myDok2 := first('ZO Inst-Belege'[Dokumente.'Auslage/Direkt' = 2].Dokumente);
      if myDok2 and myDok2.'Beleg Belegdatum' = myBlDat then
          myDok2.'Betrag in €'
      else
          let myDok1 := first('ZO Inst-Belege'[Dokumente.'Auslage/Direkt' = 1].Dokumente);
          if myDok1 and myDok1.'Beleg Belegdatum' = myBlDat then
              myDok1.'Betrag in €'
          else
              null
          end
      end

      • Ali
      • vor 2 Monaten
      • Gemeldet - anzeigen

       Noch einmal allerbesten Dank!

      Ich hab mir das etwas umgeschrieben, weil ich ja nur eine Rückmeldung haben wollte, ob die beiden Daten identisch sind oder nicht. Das Script im Formelfeld "Übereinstimmung Belegdaten" sieht jetzt so aus:

      let myOK := styled("Übereinstimmung", "green", "white", "mood");
      let myFalse := styled("Abweichung", "red", "white", "sentiment_dissatisfied");
      let myWTF := styled("unbekannter Fehler", "orange", "white", "sentiment_neutral");
      let myBlDat := 'BL Belegdatum';
      let myDok1 := first('ZO Inst - Belege'[Dokumente.'Auslage/Direkt' = 1].Dokumente);
      let myDok2 := first('ZO Inst - Belege'[Dokumente.'Auslage/Direkt' = 2].Dokumente);
      if myDok2 and myDok2.'Beleg Belegdatum' = myBlDat then
          myOK
      else
          if myDok2 and myDok2.'Beleg Belegdatum' != myBlDat then
              myFalse
          else
              if myDok1 and myDok1.'Beleg Belegdatum' = myBlDat then
                  myOK
              else
                  if myDok1 and myDok1.'Beleg Belegdatum' != myBlDat then
                      myFalse
                  else
                      myWTF
                  end
              end
          end
      end

      Das funktioniert, wenn ich das recht sehe, super!

      In einem zweiten Schritt, aber das hat Zeit, würde ich gerne folgende Weiterungen einbauen:
      1. Das Feld soll nur angezeigt werden, wenn es für einen Buchungssatz einen zugeordneten Datensatz in "Dokumente" gibt und
      2. wenn es  einen nach obigen Kriterien zugeordneten Datensatz "Dokumente" gibt, bei dem kein Wert im Feld  'Beleg Belegdatum' eingetragen ist, die Meldung " Belegdatum nachtragen" erscheint bzw.
      3. umgekehrt, wenn es  einen nach obigen Kriterien zugeordneten Datensatz "Dokumente" gibt, aber in der Tabelle "Buchungssätze"  kein Wert im Feld  'BL Belegdatum' eingetragen ist, die Meldung "Belegdatum in der Belegliste nachtragen" erscheint bzw.
      4. wenn beide Werte fehlen, die Meldung erscheint: "Sowohl in der Belegliste als auch für den Beleg das Belegdatum nachtragen!"

      Aber auch so – Danke noch mal! – kann ich damit schon sehr gut arbeiten und Problemfälle herausfiltern :-)

Content aside

  • Status Answered
  • vor 2 MonatenZuletzt aktiv
  • 8Antworten
  • 29Ansichten
  • 2 Folge bereits