Fortlaufende Nummer mit Einbezug der gelöschten Nummern

FM Clients alle Versionen (außer FM-Mobile) und Betriebssysteme
Forumsregeln
Sie befinden sich im Archivforum! Sie können hier alte Beiträge lesen und vorhandene Diksussionen ergänzen.
Neue Diskussionen können Sie in diesem Archiv nicht erstellen!

Fortlaufende Nummer mit Einbezug der gelöschten Nummern

Beitragvon Anonymous » Mi 22. Mär 2006, 10:55

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.
Nachrichtensymbol: Bild
FileMaker Client Version: FM Client 5.0

Hallo zusammen,

eine Frage an die Profis :

In einer relativ einfachen Archiv-DB habe ich ein Feld, in welchem
eine fortlaufende Nummer generiert wird. Dieses Feld kann und muss nicht mit dem Filemaker-Datensatz übereinstimmen.

Ich möchte bestehende Daten aus einer Excel-Tabelle importieren, was soweit problemlos klappt. In dieser Tabelle sind bereits entsprechende Nummern vergeben, jedoch etwas willkürlich, d.h. z.B. Datensätze 1-200, 300-400, 600-1200 etc.

Das Problem :

1. Zwar werden in der Filemaker-DB die Datensätze korrekt eingetragen, jedoch ignoriert Filemaker diese Nummern bei Erstellen der fortlaufenden Datensätze und es entstehen doppelte Einträge.

2. Gerne würde ich Filemaker dazu bringen, dass er beim Erstellen von neuen Datensätzen zuerst prüft, ob die entsprechende Nummer bereits vergeben ist und dann die jeweils nächste freie Nummer vergibt.

Kann mir da jemand helfen ? Mit bestem Dank

Adriano.
Anonymous
 

Antwort

Beitragvon euromike » Mi 22. Mär 2006, 14:34

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Hallo Adriano,

ich würde das so lösen:

1. Feld erstellen, in das die fortlaufende Nummer soll (Zahl), Definition als Seriennummer (Startwert 1).
2. Script erstellen, das Deine Excel-Tabelle importiert, die fortlaufende Nummer deiner Excel-Datensätze in das entsprechende FM-Feld importieren. Beim Import das Häckchen für Automatische Eingabeoptionen durchführen NICHT setzen.
3. Datensätze sortieren nach der fortlaufenden Nummer aufsteigend.
4. Gehe zu letztem Datensatz.
5. Scriptbefehl "Nächste fortlaufende Nummer setzen" angeben mit Feld fortlaufende Nummer + 1.
6. Wenn Du jetzt einen neuen Datensatz erstellst, dann bekommst Du die nächste freie Seriennummer zugeteilt und es gibt keine Dubletten mehr...
Gruss,
Michael
euromike
 
Beiträge: 73
Registriert: Fr 17. Feb 2006, 01:00
Wohnort: Reutlingen

Antwort

Beitragvon Anonymous » Mi 22. Mär 2006, 22:37

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Hallo euromike,

Erstmal besten Dank für deine Antwort !

Vielleicht muss ich mich genauer Ausdrücken : Der Import der Excel-Daten ist nur eine einmalige Angelegenheit, was wahrscheinlich ein entsprechendes Script überflüssig macht.

Ich verstehe auch den Zusammenhang von "Automatische Eingabeoptionen durchführen NICHT setzen" und deinen Punkten 5 + 6 nicht ganz. Ist z.B. Punkt 5 als Skriptbefehl unabdingbar, bzw. wie soll dies geschehen ? Ein Button definieren ?

Du merkst, ich bin noch ziemlich in den Filemaker-Anfängen und danke für jegliche Geduld.

Schöne Grüsse,
Adriano.
Anonymous
 

Antwort

Beitragvon euromike » Mi 22. Mär 2006, 23:43

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Hallo Adriano,

zu Deinen Fragen:

> "Ich verstehe auch den Zusammenhang von "Automatische
> Eingabeoptionen durchführen NICHT setzen" und deinen Punkten 5
> + 6 nicht ganz. Ist z.B. Punkt 5 als Skriptbefehl unabdingbar, bzw.
> wie soll dies geschehen ? Ein Button definieren ?"

Wenn Du Datensätze importierst, bekommst Du nach der Definition der Importfelder die Abfrage "Automatische Eingabeoptionen". Wenn Du ein Häckchen setzt, dann bedeutet dies, das das Feld mit der fortlaufenden Seriennummer (Startwert 1) mitzählt und Du somit die Nummern, die Du in Excel hast, nicht in die Datenbank bekommst.
Häckchen aus, dann ist auch die Seriennummernfunktion aus.

Ja, Du hast recht - Du brauchst nicht unbedingt ein Script für den Import, kannst auch alle Schritte einzeln machen:

1) Datensätze importieren (eben OHNE Häckchen bei Eingabeoptionen),
2) Datensätze sortieren nach der Seriennummer,
3) Zum letzten Datensatz und Dir die letzte Seriennummer merken,
4) In den Felddefinitionen im Feld Seriennummer - Optionen - Fortlaufende Nummer einfach Deinen gemerkten Wert + 1 eintragen.
5) Fertig. Legst Du jetzt einen neuen Datensatz an, dann bekommst Du die nächste fortlaufende Nummer...

Ich gehe jetzt mal davon aus, das Du unter FM8 entwickelst. Falls Du es nicht hinbekommst, schick mir einfach per "private Nachricht" Deine Telefonnummer und wann Du erreichbar bist, dann lösen wir das Problem sicher ganz schnell :-D
Gruss,
Michael
euromike
 
Beiträge: 73
Registriert: Fr 17. Feb 2006, 01:00
Wohnort: Reutlingen

Antwort

Beitragvon Anonymous » Do 23. Mär 2006, 10:14

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Guten Morgen euromike,

Danke für deine Ausführungen !

Nun verstehe ich was du meinst, bzw. bin ich selbst auch schon
soweit gekommen. Entwickeln tu ich mit Filemaker Pro 5.

Deine Lösung funktioniert auch soweit, jedoch löst sie mir ein
relevantes Problem nicht : Die leeren Nummern inmitten der Daten-
sätze, welche zuerst verwendet werden sollen, bevor die nächst-
höchstmögliche Nummer verwendet wird. Eine Beispiel-DB :

2 Felder : Nummer + Inhalt
Datensätze mit den Nummern 1-10 und 30-50, jeweils mit Inhalt

Die Nummer, mit welcher Filemaker nun normalerweise weiterarbeitet,
ist die Nummer 51. Ich möchte jedoch zuerst die Nummern 11-29
ausfüllen.

Dies wäre wohl erste Prioriät für den Moment. Wenn du eine kleine
Beispiel-DB möchtest, kann ich dir diese ja an die Mail-Adresse bei
Customers-Choice senden.

Alle Grüsse,
Adriano.
Anonymous
 

Antwort

Beitragvon Dobingo » Mo 27. Mär 2006, 17:22

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Hmm, schweres Ding was Du da hast. Dürfte aber vom Ablauf her möglich sein... Der Punkt ist ja, das der Abstand von den einzelnen Seriennummern bei Dir immer "1" sein muss. Also von 1 zu 2 Abstand 1, von 2 zu 3 Abstand 1, usw.
Wenn nun aber ein Sprung von 51 zu 80 da ist, hast Du nen größeren Abstand - und da würde ich den Ansatz machen. Also baue ein Script für die Erstellung neuer Datensätze das wie folgt vor geht.

1) Alle Datensätze anzeigen
2) Sortieren nach Seriennummer
3) Gehe zu Erstem DS

Schleife
4) Variable1 = Seriennummer
5) Gehe zu nächstem DS
6) Variable2 = Seriennummer
7) Kontrolle ob Abstand größer 1
(wenn Variable2 - Variable1 = 1, Schleife von vorne, Sonst Verlasse Schleife)

Schleife Ende
8) VariableNeuerDS=Variable1+1

9) Neuer Datensatz erstellen
9) Feldwert Setzen VariableNeuerDS in Primärschlüsselfeld
Dobingo
 
Beiträge: 636
Registriert: Di 31. Jan 2006, 01:00

Antwort

Beitragvon euromike » Mo 27. Mär 2006, 19:18

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

@Dobingo:
Wie sieht Dein Lösungsansatz im Detail aus? (...man lernt ja nie aus)
___

Hallo Adriano,

ich wollte Dir mal einen Lösungsansatz mitteilen:

Zunächst mußt Du die "Lücken" herausfinden, d.h. Du baust Dir eine 2. Datenbank auf, die die Felder "eins", "Vergeben" (Text) und "Nummer" enthält. Das Feld "Nummer" als Zahl mit fortlaufender Nummer definieren (Startwert 1). Das Feld "eins" ist eine Formel mit
Wert = 1, Zahl (brauchst Du für eine 1:1-Beziehung). Jetzt mach noch ein Feld "Nummer_VAR", dass Du als Variablenfeld Zahl definierst.
-
Dann setzt Du eine Beziehung zwischen dem Seriennummernfeld Deiner Hauptdatenbank und dem "Nummer"-Feld der 2. Datenbank. Dein Feld "Vergeben" definierst Du als Formelfeld
Wenn(2.Datenbank:"Nummer" = Hauptdatenbank:"Seriennummer"; "x"; "")
-
Definiere in Deiner Hauptdatenbank auch ein Feld "eins" als Formel mit Wert = 1. Lege noch ein Feld "Hilfsfeld_Nummer" an, dass Du als Variable, Zahl definierst. Baue eine Beziehung zur zweiten Datenbank mit den Feldern "eins" - "eins" auf. Jetzt importierst Du alle Excel-Tabellen in Deine Hauptdatenbank. Stelle die höchste Nummer Deiner Excel-Nummern fest (z.B. 950) und stelle die Nummer der importierten
Datensätze fest (z.B. 800 Stk.). Die Differenz ergibt, dass es 150 freie Nummern geben muss.
-
Lege nun auf der 2. Datenbank 950 neue Datensätze an. Die "Nummer"-Felder befüllst Du mit fortlaufenden Nummern (1 bis 950). Das Feld "Vergeben" zeigt nun 800 mal "x" an. Diese Nummern sind in der Hauptdatenbank also bereits belegt. 150 Nummern sind nicht belegt, also nun frei zur Vergabe.
-
Schreibe in das Feld "Hilfsfeld_Nummer" der Hauptdatenbank den größten Wert der 2. Datenbank rein (hier also 950), so weis das Programm, ab wann es mit den Seriennummern weitergeht, wenn aus der 2 Datenbank keine Nummern mehr zur Verfügung stehen.
Jetzt schreibe in der Hauptdatenbank ein Script "Freie Nummer suchen". Das Script sollte wie folgt aussehen:
-> Script ausführen[Teilscripts, Extern: "2. Datenbank"] und ruft dort das Script "Freie Nummer suchen" auf.

Jetzt noch ein zweites Script "Neuen Datensatz anlegen":
-> Neuer Datensatz
-> Wenn [2.Datenbank:Nummer_VAR = """"]
-> Feld angeben ["Seriennummer", "Hilfsfeld_Nummer + 1"]
-> Feld angeben ["Hilfsfeld_Nummer", "Seriennummer"]
-> Script verlassen
-> Sonst
-> Feld angeben ["Seriennummer", "2.Datenbank:Nummer_VAR"]
-> Script verlassen
-> Ende-Wenn
-
So, jetzt brauchst Du noch das "Gegenscript" in der 2. Datenbank, dass Du einfach auch "Freie Nummer suchen" nennst:
-> Fehleraufzeichnung setzen [Ein]
-> Alle Datensätze anzeigen
-> Feld angeben ["Nummer_VAR", """"]
-> Suchen aktivieren []
-> Feld angeben ["Vergeben", ""=""]
-> Suchen []
-> Wenn ["Status(AktuellFehler = 401"]
-> Fehleraufzeichnung setzen [Aus]
-> Script ausführen[Teilscripts, Extern: "Hauptdatenbank"] <- Script "Neuen Datensatz anlegen"
-> Sonst
-> Fehleraufzeichnung setzen [Aus]
-> Sortieren[ nach Feld "Nummer" aufsteigend" ]
-> Gehe zu Datensatz Erster
-> Feld angeben ["Nummer_VAR", "Nummer"]
-> Script ausführen[Teilscripts, Extern: "Hauptdatenbank"] <- Script "Neuen Datensatz anlegen"
-> Ende-Wenn

Wenn Du jetzt von der Hauptdatenbank aus das Script "Freie Nummer suchen" aufrufst, dann wird zuerst geprüft, ob noch eine freie Nummer vorhanden ist. Ist eine vorhanden, so wird diese benutzt / keine mehr vorhanden, dann wird immer die letzte Nummer aus "Hilfsfeld_Nummer" + 1) verwendet, also aufsteigend neue Nummern.

So, das war schon alles ;-)
Ich hoffe, Dein Problem ist damit gelöst.

Ich schicke Dir noch die Testdatei fp5 per E-Mail.
Gruss,
Michael
euromike
 
Beiträge: 73
Registriert: Fr 17. Feb 2006, 01:00
Wohnort: Reutlingen

Antwort

Beitragvon euromike » Mo 27. Mär 2006, 20:52

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

@Dobingo:
Jetzt hab ichs kapiert. Sehr guter Lösungsansatz ;-)

@Adriano
Ich glaube, mit Dobingos Lösung bist Du schneller am Ziel...
___


Gruss,
Michael


[ Diese Nachricht wurde editiert von : euromike am 27.03.2006 20:56 ]
Gruss,
Michael
euromike
 
Beiträge: 73
Registriert: Fr 17. Feb 2006, 01:00
Wohnort: Reutlingen

Antwort

Beitragvon Dobingo » Di 28. Mär 2006, 16:28

Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

@Euromike:
Danke fürs Kompliment... (auch wenn ich mein Script etwas unvorteilhaft aufgeschrieben habe)

@Adriano:
Du musst sehen, was Du haben möchtest. Bei Euromikes Vorschlag siehst Du natürlich auch gleichzeitig noch, welche Nummern frei wären (u.U. nicht zu vernachlässigen) und hast eine Übersicht, wann die Lücken aufgefüllt sind.

In meinem Vorschlag werden die Lücken halt "nur" aufgefüllt und mit der kleinsten freien Seriennummer begonnen.

Aber sofern Du noch Hilfe benötigst, immer wieder gerne.

Gruß Ingo
Dobingo
 
Beiträge: 636
Registriert: Di 31. Jan 2006, 01:00

Re: Antwort

Beitragvon aleph » Mo 10. Jan 2011, 15:39

Dobingo hat geschrieben:
Hinweis: Eintrag wurde aus altem Forum importiert. Ggf. kann es dadurch zu Darstellungsproblemen kommen.

Hmm, schweres Ding was Du da hast. Dürfte aber vom Ablauf her möglich sein... Der Punkt ist ja, das der Abstand von den einzelnen Seriennummern bei Dir immer "1" sein muss. Also von 1 zu 2 Abstand 1, von 2 zu 3 Abstand 1, usw.
Wenn nun aber ein Sprung von 51 zu 80 da ist, hast Du nen größeren Abstand - und da würde ich den Ansatz machen. Also baue ein Script für die Erstellung neuer Datensätze das wie folgt vor geht.

1) Alle Datensätze anzeigen
2) Sortieren nach Seriennummer
3) Gehe zu Erstem DS

Schleife
4) Variable1 = Seriennummer
5) Gehe zu nächstem DS
6) Variable2 = Seriennummer
7) Kontrolle ob Abstand größer 1
(wenn Variable2 - Variable1 = 1, Schleife von vorne, Sonst Verlasse Schleife)

Schleife Ende
8) VariableNeuerDS=Variable1+1

9) Neuer Datensatz erstellen
9) Feldwert Setzen VariableNeuerDS in Primärschlüsselfeld



hallo dobingo!

ich bin ein dz pastler und suche ich eine lösung für mein problem. ich sehe dass du vor vielen jahre eine antwort auf dieses problem vorgeschlagen hast. ich habe versucht deine lösung anzuwenden aber ich stolpere über meine eigene ignoranz.

könnte ich dir bitten etwas genaueres zu sein?

ich habe als attachment eine db gemacht wo ich durch skript versuche, deine lösung anzuwenden. ich wäre dir sehr verbunden, wenn du den skript vervollständigen könntest. vielleicht meine erwartung ist eine frechheit, und wenn du es so erfindest wäre dir auch dankbar, wenn du mir einfach den weg zeigst.

danke sehr in voraus

enrique
Dateianhänge
Fortlaufend.fp7.zip
(3.7 KiB) 62-mal heruntergeladen
aleph
 
Beiträge: 6
Registriert: Do 22. Okt 2009, 00:00


Zurück zu FM Clients