laufende Nummer

  • Da gibt es mehrere Möglichkeiten.
    Hängt stark von den Vorraussetzungen ab.
    Kann denn jeder auf alle Dokumente zugreifen ? Wenn ja kann man es einfach über eine Ansicht machen die die Laufenden Nummern anzeigt und ein Feld Berechnet beim Anlegen das den obersten Wert ausliest und 1 dazu zählt.
    Ist dies nicht gegeben würde ich das ganze über einen Hintergrundagenten machen, dem Zugriff auf alle Dokumente gewährt wird. Ansonsten die gleiche Technik wie oben.
    Eine andere Möglichkeit wäre in einem Profildokument den letzten Wert abzulegen. Kann ich aber nur abraten, weil meiner Erfahrung nach da sehr oft doppelte Nummern vorkommen. Anscheinend wird das Profidokument anders gecacht wie normale Dokumente

  • Hallo,


    eine laufende Nr. kann auch über ein Profildokument realisiert werden. Im Profildokument sollte dann eine Nr. hochgezählt werden bei jedem Neuanlegen. Evtl. mit Vorgabe das Startwertes.


    Profildokumente sind auch dann sinnvoll wenn verschiedenen Nummernkreise verwendet werden sollen, evtl. nach Art der Rechnung!


    Aber darauf achten das die Benutzer auch Zugriffsberechtigt für das Profildokument sind (bei Autorenrechten).


    Aber prinzipell können diese Nummerierungen fehleranfällig sein!
    Schade das Notes hier keine Standard-Lösung bietet.

  • Hallo man sollte entweder über einen View oder ein normales Dokument gehen. Ein Profil Dokument wird bei jedem Benutzer im cache gehalten und ist deshalb nicht aktuell.
    Gruß
    Harry

  • besonders aufpassen musst du, wenn du mit mehreren repliken / servern arbeitest! dann musst du einen server zum "master" machen. nur dort darf die letzte nummer gelesen werden.


    empfehlen würde ich auch, die nummer erst beim speichern des dokuments zu berechnen. sonst kann es auch zu überschneidungen der nummern kommen.

    bunt ist das dasein und granatenstark. volle kanne hoshi's!


    IBM Certified Advanced System Administrator (R5, D6, D7)
    IBM Certified Advanced Application Developer (R5, D6, D7, D8)

  • Moin Leuts,


    stand vor einem Jahr vor dem gleichen Problem. Letztlich darf eine RE-Nr.: nicht doppelt vergeben werden, sollte fortlaufend sein, etc.
    Dafür ist ein Profil-Dok sicher nicht der (beste o.) richtige Weg. Die Berechnung der neuen nächsten Rechnungsnummer sollte erst beim speichern der RE erfolgen. Die letzte laufende RE-Nr. sollte in einem Dok in der DB gespeichert sein und bei jeder Neuvergabe dorthin zurück geschrieben werden. Um zu verhindern, dass eine Nummer doppelt vergeben wird, muß dieses Dok während der Berechnung für andere gesperrt sein. Weiterhin ist sicher eine zumindest jähliche Umstellung des Nummernkreises sinnvoll...


    Greetings
    Sven


    PS: hab da eine SeqNum.nsf, in der alles gut beschrieben ist ... ;)

    • Offizieller Beitrag

    an dem Vorschlag, dass die laufende Nummer erst beim Speichern berechnet wird kommst Du nicht vorbei. Allerdings würde ich die Nummer in kein Dokument schreiben, sondern würde in einer versteckten Ansicht, die nach laufender Nummer sortiert ist, die letzte Nummer auslesen.


    Bei einigen Anwendungen, auf die nur 3 bis 5 User Zugriff haben, schreiben wir die laufende Nummer in ein Dokument. Dabei erscheinen dann ziemlich oft Speicher und Replizierkonflikte, deshalb halte ich diese Idee die laufende Nummer in einem Dokument zu hinterlegen für nicht so gut.


    Verwende ich laufende Nummern, dann beschränke ich das Editieren der Dokumente auf einen Server, damit werden viele Probleme mit laufenden Nummern im Vorfeld unterbunden.


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Ich würde die laufende Nummer sogar noch etwas später als beim Speichern berechnen:


    Lass einen periodischen Agenten mit allen Zugriffsrechten auf alle Dokumente alle paar Minuten laufen.
    Dieser liest dann jeweils die höchste Nummer aus und vergibt bei den Dokumenten ohne Nummer die laufende Nummer.
    Hat zwar dadurch etwas Zeitversatz, ist aber die sicherste Variante, sofern du dafür sorgst dass dieser Agent auch nur auf einem Server läuft (bei mehreren Repliken)

  • Ich habe ein ähnliches Problem folgendermaßen gelöst. Habe quasi einen Dummy mit der Startnummer erstellt und eine View aufgebaut mit folgender Selektierung: Form Dummy und die eigentlichen Masken. In der ersten Spalte wird der Counter angezeigt. View heißt in diesem Beispiel "VTB_Counter". Dann nutze ich Querysave und packe nachfolgenden Script rein. Die vorangestellten Nullen müssen nicht sein - wurde aber so verlangt.


    Dim s As New notessession
    Dim db As notesdatabase
    Set db = s.currentdatabase
    Dim view As notesview
    Set view = db.getview("VTB_Counter")
    Dim ws As New notesuiworkspace
    Dim uidoc As notesuidocument
    Set uidoc = ws.currentdocument
    Dim doc As notesdocument
    Set doc = view.GetFirstDocument
    Dim Act_No As String
    Dim Carrier As String
    Dim AG_Code As String
    Dim Ref_res As String
    Dim Last_No As Variant
    Dim res_From,res_To,Res_Form_T,res_To_T As Variant



    If uidoc.IsNewDoc Then ' *****Öffne die entsprechende View und hole letzte Nummer

    Last_No=doc.GetItemValue("Counter")
    Act_No=Last_No(0)+1

    '_________________________________________________________________


    '*****Werte aus dem Dokument auslesen

    Carrier=uidoc.FieldGetText("WO_Carrier")
    AG_Code=uidoc.FieldGetText("WO_AgencyCode")


    '_________________________________________________________________

    '******Zähler in Format bringen
    Dim RefNo_Form As String
    RefNo_Form= Right$("000000" & Cstr(Act_No),6)


    '----------------------------------------------------------------------
    T="IWO-" 'Vorangestellter Text vor der eigentlichen Referenznummer
    Ref_res=T+Carrier + AG_Code +RefNo_Form
    Uidoc.FieldSetText "WO_Ref_hide", Ref_res
    Uidoc.FieldSetText "WO_Counter",Act_No
    End If

  • Hi, ich hatte das "laufende Nummer"-Problem vor ein paar Monaten und regelte es damals mit einem Profildokument, jetzt soll die DB aber auch anderen Usern zur Verfügung gestellt werden, die aber irgendwie nichts anlegen können, was auf das Profildokument zurückzuführen ist.


    Ich habe mir das obere Script versucht zu nutze zu machen doch leider bekomm ich immer einen Type-Mismatch und ich kann mir nicht erklären was diese "Dim res_From,res_To,Res_Form_T,res_To_T As Variant" Zeile für eine Rolle spielt.


    Vielleicht könnt Ihrs mir mal kurz erklären, damit das Script läuft.


    Vielen Dank!