12 Replies Latest reply on Jan 29, 2015 6:12 AM by dennisf.

    Scriptfrage

    dennisf.

      Hallo liebe Community,

       

      ich habe folgendes Problem und weiss nicht richtig wie ich es lösen kann. Ich denke am ehestens über ein Script. Da ich neue auf dem Gebiet bin, wäre ich für eine Hilfestellung sehr dankbar

       

      Ich habe eine Datenbank geschrieben, welche als Auftragsverwaltung dient. Hier gibt es u. a. die Felder "Anzahl Maßnahmen", welches festlegt ob ein Auftrag vor Ort 1, 2, 3 oder mehrere Maßnahmen beinhaltet. Hierzu gehören auch die entsprechenden Datenfelder (Datumsfeld) "Termin1, Termin2, etc.) In diese Felder werden dann die vor Ort Daten eingetragen. Bsp. Beim 3er Auftrag sind 3 Felder mit Daten gefüllt.

       

      Jetzt zu meiner Frage. Ich möchte mir gerne per Button auf einer gesonderten Seite alle Aufträge anzeigen lassen, welche noch offen sind und wo die letzte Maßnahme länger als 10 Tage her ist. Hat jemand eine Idee wie ich das am geschicktesten lösen kann?

      Es müsste ja zuerst geprüft werden, welche Aufträge noch offen sind, also ob bei einem 2er Auftrag weniger als 2 Daten drin sind, bei einem 4er Auftrag weniger als 4 Daten, etc. Ebenso muss ich dann das jeweilige letzte Datum zum aktuellen Tagesdatum prüfen und dort -10 Tage Differenz einbauen.

      Nur wie verfasse ich so etwas in einem Script?

       

      Danke für ein paar hilfreiche Tipps.

      MFG

      Dennis

        • 1. Re: Scriptfrage
          oliver.boeckmann

          Hallo Dennis,

          ich würde das so machen:

          1) In der Tabelle Aufträge ein Formelfeld das ermittelt ob noch Maßnahmen ausstehen  ja/nein

          2) ein weiteres Formel-Feld das ermittelt wie lange die letzte Maßnahme her ist, sagen wir in Tagen

          3) ein Script auf dem Button, das in das Auftragslayout wechselt und dort ein Suche durchführt

                         offnen Maßnamen: ja  UND letzte Maßnahme > 10

                         Sortieren nach letzte Maßnahme absteigend

           

          Hoffe das hiflt.

          • 2. Re: Scriptfrage
            mbraendle

            Hm, die Verwendung von Feldern "Termin1", "Termin2" etc. weist darauf hin, dass das Datenmodell nicht normalisiert ist (siehe Normalisierung (Datenbank) – Wikipedia). (Müssten dann für 20 Massnahmen 20 Terminfelder angelegt werden? Und wenn plötzlich eine 21. Massnahme dazukommt?)

            Es bräuchte eine Tabelle "Massnahmen", mit Feldern wie z.B. Massnahme_Beschreibung, Termin, erledigt etc. sowie einem Feld für den Fremdschlüssel ID_Auftrag.

            • 3. Re: Scriptfrage
              dennisf.

              Hallo Oliver,

               

              super, vielen Dank.

              Das hat funktioniert

              • 4. Re: Scriptfrage
                dennisf.

                Ich hätte da in diesem Zusammenhang noch ein Problem bzw. eine Frage

                Ich habe nun ein Feld "erledigt" erstellt, welches abfragt ob ein Auftrag alle Daten erhalten hat oder nicht. Dementsprechend wird das Feld "erledigt" entweder auf 0=unerledigt oder 1=erledigt gesetzt. Ich habe dazu folgende Formel verwendet:

                WENN (FELD"Behandlungsanzahl"=1 UND FELD"Behandlungsdatum1" >0 DANN FELD"erledigt"=1 SONST FELD"erledigt"=0) ODER

                WENN (FELD"Behandlungsanzahl"=2 UND FELD"Behandlungsdatum1" >0 UND FELD"Behandlungsdatum2">0 DANN FELD"erledigt"=1 SONST FELD"erledigt"=0)

                etc.

                bis Behandlungsanzahl 6

                 

                Leider habe ich hier immer das Problem, dass die gerade Behandlungsanzahlen automatisch eine 1 im FELD"erledigt" stehen haben, obwohl im Feld"Behandlungsdatum1" nichts steht?

                 

                Woran könnte das liegen?

                Besten Dank an alle Antworter

                Gruss

                Dennis

                • 5. Re: Scriptfrage
                  erolst

                  dennisf. wrote:

                  bis Behandlungsanzahl 6

                   

                  Auch wenn du die ursprüngliche Frage als beantwortet markiert hast – du solltest Martins Anregung/Vorschlag/Einwand umsetzen und eine Termine/Maßnahmen-Tabelle als “Kindtabelle” von Projekte erstellen:

                  • welche Berechnungen auch immer du für einen einzelnen Termin benötigst, du erstellst sie nur einmal

                  • welche Felder du auch immer benötigst, um einen Termin zu definieren, du legst sie nur einmal an

                  • die Auswertung/Aggregation von Datensätzen funktioniert viel einfacher und flexibler als die von Feldern

                   

                  Das Problem bei deiner jetzigen Formel ist, dass ODER nach dem ersten “wahren” Ergebnis das Rechnen einstellt, weil damit bereits klar ist, dass der gesamte Ausdruck WAHR ist; du willst aber ein Ergebnis über alle involvierten Felder.

                   

                  Probiere mal

                   

                  Summe ( Feld1 ; … Feld6 ) = 6 (gibt das Ergebnis 1 (wahr) oder 0 (falsch) zurück)

                   

                  Hättest du die o. a. Bezugstabelle, könntest du einfach schreiben:

                   

                  Anzahl ( Termine::datumErledigt ) < Anzahl ( Termine::Primärschlüssel )

                   

                  (d. h., es gibt unerledigte Termine) und die Formel wäre für jede beliebige Anzahl von Projektterminen gültig (wohingegen du die anderen Formeln anpassen musst, wenn du z. B. neue Felder TerminN anlegst; und das wäre sicher nur eines von vielen Problemen dieser unzulänglichen Struktur …).

                   

                  Gruß,

                  Oliver (ein anderer )

                  • 6. Re: Scriptfrage
                    dennisf.

                    Hallo Oliver,

                     

                    okay, besten Dank für die Antwort. Dann muss ich mich mal mit dem Anlegen bzw. Bearbeiten von Kindtabellen vertraut machen.

                     

                    Gruss Dennis

                     

                    P. S. Um das Problem vorübergehend zu beseitigen, würde Dein Vorschlag mit

                    Summe ( Feld1 ; … Feld6 ) = 6 (gibt das Ergebnis 1 (wahr) oder 0 (falsch) zurück)

                    aber nur bei 6 Maßnahmen greifen, oder?


                    Sollte ich beispielsweise nur ein Auftrag mit 2 Behandlungen haben, würde das Ergebnis ja falsch sein, oder?

                    • 7. Re: Scriptfrage
                      erolst

                      dennisf. wrote:

                      Sollte ich beispielsweise nur ein Auftrag mit 2 Behandlungen haben, würde das Ergebnis ja falsch sein, oder?

                       

                      Habe deinen Anfangspost nochmal gelesen; hiervon ausgehend

                      dennisf. wrote:

                      Hier gibt es u. a. die Felder "Anzahl Maßnahmen", welches festlegt ob ein Auftrag vor Ort 1, 2, 3 oder mehrere Maßnahmen beinhaltet

                       

                      muss es dann wohl

                       

                      Summe ( Feld1 ; … Feld6 ) = anzahlMassnahmen

                       

                      heißen.

                      • 8. Re: Scriptfrage
                        oliver.boeckmann

                        Hallo Dennis,

                         

                        was das Aufteilen der Informationen in Bezugstabellen angeht, gehe ich mit dem anderen Oliver mit. Perspektivisch tust du dir einen großen Gefallen, dich jetzt damit auseinander zu setzen. Es könnte ja noch um Abrechnung von Kosten oder Errechnen von Gesamtdauer der Behandlungen, oder die Zuordnung von Behandlungen zu Mitarbeitern, und Auswertung aus Sicht des Kunden oder Mitarbeiters, oder Art der Behandlungen gehen. Solche Anwendungsfälle werden deutlich einfacher abzubilden und darzustellen mit einem normalisierten Modell. Bis zu welchem Grad man normalisiert muss nach Zweckmäßigkeit entschieden werden. Zu starke Normalisierung erhöht die Komplexität und wirkt sich negativ auf die Performance aus. Mit den Wertelisten in FileMaker lassen sich einige Kindtabellen sparen, also auch damit könntest du dich befassen, falls noch nicht geschehen.

                         

                        In deinem Fall bleibt noch die Frage offen, wann die Bezugsdatensätze erzeugt werden sollten? Direkt schon beim erstellen des Auftrags? Weil dann schon klar ist, wie viele Behandlungen es sind, oder erst Zug um Zug, wenn eine Behandlung erfolgt ist, wird entschieden ob es noch eine braucht. Meine Erfahrung sagt, so dicht wie möglich am realen Szenario orientieren. Wenn bei Auftragserstellung klar ist, wie viele Behandlungen es werden, und welche Behandlung welche Art hat, oder ähnliche Dinge festgelegt werden, würde ich die Behandlungen schon anlegen und die Festlegungen darin treffen.

                         

                        Was das ODER angeht, bin ich anderer Meinung. Du hast mit den ver-ODER-ten Wenns die FALLS oder AUSWAHL Funktion nachgebaut. Wenn es sich nun um einen Auftrag mit 2 Behandlungen handelt, dann ist das erste Wenn 0 und es wird beim nächsten Wenn weitergeprüft. Sollte das dann 1 werden, ist das Ergebnis klar, falls nicht, werden alle anderen auch geprüft und alle ergeben 0, somit ist alles 0. Um zu Testen ob es am ODER liegt, kannst du alle ODER mit + ersetzen. Besser wäre hier jedoch die Funktion Auswahl.

                         

                        Hoffe das hilft

                         

                         

                         

                         

                        Am 29.01.2015 um 13:23 schrieb dennisf. <noreply@filemaker.com>:

                         

                                                  <https://community.filemaker.com/?et=watches.email.thread>

                        Scriptfrage

                        Antwort von dennisf. <https://community.filemaker.com/people/dennisf.?et=watches.email.thread> in Discussions - Komplette Diskussion anzeigen <https://community.filemaker.com/message/171460?et=watches.email.thread#171460>

                        Hallo Oliver,

                         

                         

                        okay, besten Dank für die Antwort. Dann muss ich mich mal mit dem Anlegen bzw. Bearbeiten von Kindtabellen vertraut machen.

                         

                         

                        Gruss Dennis

                         

                        Sie können auf diese Nachricht antworten, indem Sie diese E-Mail beantworten oder die Nachricht unter FileMaker Community aufrufen <https://community.filemaker.com/message/171460?et=watches.email.thread#171460>

                        Starten Sie eine neue Diskussion in Discussions per E-Mail <mailto:discussions-community-discussions@filemaker-inc-v7.hosted.jivesoftware.com> oder unter FileMaker Community <https://community.filemaker.com/choose-container.jspa?contentType=1&containerType=14&container=2310&et=watches.email.thread>

                        Sie folgen Scriptfrage <https://community.filemaker.com/message/171460?et=watches.email.thread#171460> in diesen Aktivitätenlisten: Posteingang

                        Bearbeiten Sie Ihre Emailvoreinstellungen <https://community.filemaker.com//user-preferences!input.jspa>

                         

                        FileMaker Developer Conference 2015 • Las Vegas, Nevada • July 20-23 • www.filemaker.com/devcon <http://www.filemaker.com/devcon>

                        • 9. Re: Scriptfrage
                          dennisf.

                          Also entweder sehe ich den Wald vor lauter Bäumen nicht oder ich verstehe das Problem falsch...

                          Habe nun folgende Formel hinterlegt:

                           

                          Wenn ( Summe (Behandlung1 ; Behandlung2 ; Behandlung3 ; Behandlung4 ; Behandlung5 ; Behandlung6) = Behandlungsanzahl ; erledigt = 1; erledigt = 0 )

                           

                          Das Phänomen bleibt das gleiche. Ändere ich das Feld "Behandlungsanzahl" auf 1,3,5 ab steht in Feld "erledigt" die 0, ändere ich das Feld au 2,6 ab steht die 1 drin. Ich habe bei den 6 Datumsfeldern "Behandlung1;...;Behandlung6" jeweils kein Eintrag?

                          • 10. Re: Scriptfrage
                            erolst

                            oliver.boeckmann wrote:

                            Was das ODER angeht, bin ich anderer Meinung.

                            Bin ich inzwischen auch, weil die Formel noch umständlicher geschrieben war, als ich beim Überfliegen dachte (aber gründliches Lesen soll helfen; ich probier's mal damit … )

                            oliver.boeckmann wrote:

                            Besser wäre hier jedoch die Funktion Auswahl.

                            Implementiert wie?

                            oliver.boeckmann wrote:

                            Bis zu welchem Grad man normalisiert muss nach Zweckmäßigkeit entschieden werden. Zu starke Normalisierung erhöht die Komplexität und wirkt sich negativ auf die Performance aus.

                             

                            Man sollte das Konzept aber zumindest kennen, um zu wissen, zu welchem Zeitpunkt man es aus Gründen der Zweckmäßigkeit/Leistung über Bord wirft …

                            • 11. Re: Scriptfrage
                              erolst

                              dennisf. wrote:

                              Wenn ( Summe (Behandlung1 ; Behandlung2 ; Behandlung3 ; Behandlung4 ; Behandlung5 ; Behandlung6) = Behandlungsanzahl ; erledigt = 1; erledigt = 0 )

                               

                              Du hast glaubich ein kleines Verständnisproblem beim Definieren der Formel.

                               

                              Unter der Annahme, dass dein Formelfeld „erledigt“ heißt, ist „erledigt =“ bereits impliziert (steht auch in fett über dem Formeleingabefeld); du schreibst nur den Ergebnisausdruck, also


                              Summe (

                                LiesAlsBoolean ( BehandlungsDatum1 ) ;

                                LiesAlsBoolean ( BehandlungsDatum2 ) ;

                                LiesAlsBoolean ( BehandlungsDatum3 ) ;

                                LiesAlsBoolean ( BehandlungsDatum4 ) ;

                                LiesAlsBoolean ( BehandlungsDatum5 ) ;

                                LiesAlsBoolean ( BehandlungsDatum6 ) ;

                              )

                              = Behandlungsanzahl


                              … exakt dasselbe wie Falls ( Summe ( … ) = Behandlungsanzahl ; 1 ; 0 )

                               

                              In der Anlage ein kleines Beispiel.

                              • 12. Re: Scriptfrage
                                dennisf.

                                Super

                                Es funktioniert tadelos

                                Vielen lieben Dank für die Hilfe. Wenn man das im Beispiel sieht ist es irgendwie einfacher zu verstehen

                                Danke...

                                 

                                Gruss Dennis