7 Antworten Neueste Antwort am Apr 8, 2016 12:19 PM von kip

    Rechnungsnummer anhand von Rechnungstypen erstellen

    kip

      Hallo,

       

      ich scheitere gerade an dem Versuch, automatisch Rechnungsnummern zu erstellen.

      Die Datenbank schaut wie folgt aus:

      Bildschirmfoto 2016-03-26 um 11.29.35.png

      Für die Rechnungstypen (ER, AR, SR) habe ich eine Werteliste basierend auf der Tabelle "Rechnungstypen" erstellt.

      Da ich später automatisch generierte Rechnungsnummern ggf. einmalig anpassen muss, wollte ich ein Skript erstellen, das bei Auswahl eines Rechnungstyps (Feld verlassen) eine Nummer nach folgendem Muster erstellt und als Vorschlag in "Rechnungsnummer" einträgt:

       

      Projekte::Projektkürzel & "-" & Rechnungen::Rechnungstypen & "-" (fortlaufende Nummer (nach Möglichkeit zweistellig))

       

      Mein Problem bezieht sich auf den letzten Teil der Nummer.

      Ich wäre dankbar, wenn mir jemand zeigen könnte, wie ich mit einer Formel die Werte in Tabelle Rechnungen anhand der Rechnungstypen filtere und dann die Zahl um 1 erhöhen kann.

       

      kip

        • 1. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
          erolst

          Du könntest – entweder über eine neue Selbst-Beziehung Rechnung zu Rechnung per Projekt_ID, oder via SQL – das Maximum im Feld Rechnungsnummer auslesen, den numerischen Anteil um eins erhöhen und in einer neuen Nummer verwenden.

           

          Z. B. so:

           

          Let ( [

            maxString =

              ExecuteSQL ( "

               SELECT Max ( Rechnungsnummer )

               FROM Rechnungen

               WHERE Rechnungstyp = ?

              " ; "" ; "" ; Rechnungen::Rechnungstyp

              ) ;

            maxNumber = GetAsNumber ( Right ( maxString ; 2 ) ) ;

            theNewMax = SerialIncrement ( "00" ; maxNumber + 1 )

            ] ;

            Projekte::ProjektKürzel & "-" & Rechnungen::Rechnungstypen & "-" theNewMax

          )

          • 2. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
            kip

            Hallo erolst,

             

            ... fast !

             

            Deine Formel macht alles, was sie soll (wenn man ein & in der letzten Zeile ergänzt und Rechnungen::Rechnungstyp durch Rechnungen::Rechnungstyp_ID ersetzt), aber das Problem sitzt wie so oft vor dem Computer. Ich hatte in meiner Beschreibung vergessen, dass die fortlaufende Nummer sich auf den Rechnungstyp beziehen, also Ergebnisse wie folgt aus werfen sollte:

             

            ProjektA-AR-01

            ProjektA-AR-02

            ProjektA-ER-01

            ProjektA-AR-03

            ProjektA-AR-04

            ProjektA-ER-02

             

            Das macht es noch etwas komplexer ;-)

            • 3. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
              erolst

              kip wrote:

              Ich hatte in meiner Beschreibung vergessen, dass die fortlaufende Nummer sich auf den Rechnungstyp beziehen […] sollte:

               

              Das ist doch schon berücksichtigt mit

               

              WHERE Rechnungstyp = ?

                  " ; "" ; "" ; Rechnungen::Rechnungstyp

               

              also “berücksichtige bei der Berechnung des bisherigen Maximums nur Rechnungen mit demselben Typ wie der aktuelle Datensatz"

               

              Wenn dem nicht so wäre, bräuchte man ja ohnehin nur ein durchlaufendes Zahlenfeld …

              • 4. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
                kip

                ... stimmt !

                 

                Ich habe die Verknüpfung der Tabellen und die Zusammenstellung der Werteliste gerade noch einmal überprüft und Deine Formel neu eingegeben. Jetzt passt es.

                 

                Vielen Dank !

                • 5. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
                  kip

                  ... anscheinend doch noch nicht ganz fertig: wenn ich das richtig verstanden habe, sucht SQL zwar die höchste Nummer eines Typs, das aber auch projektübergreifend. Die Rechnungsnummern sollten ja bei jedem neuen Projekt auch neu beginnen.

                  Muss das in der Formel berücksichtigt werden, oder in der Tabelle bzw. den Beziehungen? (zur Zeit habe ich ein Portal mit Quelle "Rechnungen" auf einem Layout, das auf Projekte aufbaut)

                   

                  Und noch eine Frage: Im Drucklayout möchte ich bei Abschlagsrechnungen prinzipiell folgenden Aufbau erreichen:

                   

                  4. Abschlagsrechnung

                  Leistung laut Nachweis: 400 €

                  abzl. Zahlung vom 01.01.2001 aus Rechnung 1: 100 €

                  abzl. Zahlung vom 02.01.2001 aus Rechnung 2: 100 €

                  abzl. Zahlung vom 03.01.2001 aus Rechnung 3: 100 €

                  Summe (Rechnungsbetrag Rechnung 4): 100 €

                   

                  d.h. bei einer Abschlagsrechnung sollen die bisher getätigten Zahlungen mit aufgeführt werden. Mir ist nur nicht klar, wie man das im Layout realisieren kann.

                   

                  Ich würde es so versuchen:

                  - Layout basierend auf dem aktuellen Projekt

                  - darauf ein Portal mit Filter "alle Rechnungen vom Typ Abschlagsrechnung mit Datum kleiner als das Datum der aktuellen Rechnung"

                  - Leistung laut Nachweis ist ein Formelfeld, das alle bisherigen Zahlungen inkl. der Summe berücksichtigen müsste (gehört das zur Tabelle Rechnungen oder zur Tabelle Projekte?)

                   

                  ... oder gibt es da einen einfacheren Ansatz?

                   

                  kip

                  • 6. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
                    erolst

                    kip wrote:

                     

                    ... anscheinend doch noch nicht ganz fertig: wenn ich das richtig verstanden habe, sucht SQL zwar die höchste Nummer eines Typs, das aber auch projektübergreifend. Die Rechnungsnummern sollten ja bei jedem neuen Projekt auch neu beginnen.

                    Muss das in der Formel berücksichtigt werden, oder in der Tabelle bzw. den Beziehungen? (zur Zeit habe ich ein Portal mit Quelle "Rechnungen" auf einem Layout, das auf Projekte aufbaut)

                     

                    Na, dann modifizierst du die SQL-Abfrage als

                     

                    ExecuteSQL ( " […] AND project_ID = ? " ; "" ; "" ; Rechnungen::Rechnungstyp ; Rechnungen::project_ID )

                     

                    um sie auf Datensätze mit Kombination “aktueller Typ / aktuelles Projekt” zu beschränken.

                     

                    kip wrote:

                    Muss das in der Formel berücksichtigt werden, oder in der Tabelle bzw. den Beziehungen? (zur Zeit habe ich ein Portal mit Quelle "Rechnungen" auf einem Layout, das auf Projekte aufbaut)

                     

                    In der Formel.

                     

                    Beachte bei SQL generell, dass es zwar in der Abfrage kontextunabhängig arbeitet – Tabellenauftreten werden nur als Einsprungspunkt in die Tabelle verwendet – aber wenn du Filemaker-interne Feldreferenzen verwendest, so wie hier bei den Parametern, ist der Kontext dann schon wichtig. Wir gehen hier davon aus, dass du diese genannte Formel im Kontext von Rechnungen evaluierst – und auch nur dort findest du ja die Kombination von Typ und Projekt-ID.

                     

                    Zu deiner anderen Frage schreibe ich dir morgen was.

                    • 7. Re: Rechnungsnummer anhand von Rechnungstypen erstellen
                      kip

                      ... kleine Erinnerung - ich wäre an einer Antwort für den zweiten Teil der Frage immer noch sehr interessiert:

                       

                      Im Drucklayout möchte ich bei Abschlagsrechnungen prinzipiell folgenden Aufbau erreichen:

                       

                      4. Abschlagsrechnung

                      Leistung laut Nachweis: 400 €

                      abzl. Zahlung vom 01.01.2001 aus Rechnung 1: 100 €

                      abzl. Zahlung vom 02.01.2001 aus Rechnung 2: 100 €

                      abzl. Zahlung vom 03.01.2001 aus Rechnung 3: 100 €

                      Summe (Rechnungsbetrag Rechnung 4): 100 €

                       

                      d.h. bei einer Abschlagsrechnung sollen die bisher getätigten Zahlungen mit aufgeführt werden. Mir ist nur nicht klar, wie man das im Layout realisieren kann.

                       

                      Ich würde es so versuchen:

                      - Layout basierend auf dem aktuellen Projekt

                      - darauf ein Portal mit Filter "alle Rechnungen vom Typ Abschlagsrechnung mit Datum kleiner als das Datum der aktuellen Rechnung"

                      - Leistung laut Nachweis ist ein Formelfeld, das alle bisherigen Zahlungen inkl. der Summe berücksichtigen müsste (gehört das zur Tabelle Rechnungen oder zur Tabelle Projekte?)

                       

                      ... oder gibt es da einen einfacheren Ansatz?

                       

                      mit Gruß,

                      kip