Laufende Nummer aus Ansicht holen

  • Ich möchte in einer Ansicht (Name: (LFDNR)) Dokumente "durchnummerieren".


    Ich dachte dabei daran wie folgt vor zu gehen:


    In der Maske, die Grundlage der Ansicht ist gibt es ein Feld LfdNr.
    DIeses ist in der Ansicht als 1. sortierte Spalte eingefügt.


    Beim Erstellen eines neues Dokuments wird nun im Feld LfdNr als Berechnung folgendes eingefügt:


    - Hole dir die Ansicht (LFDNR)
    - Nimm aus dem ersten gefundenen Dokument den Wert des Feldes LfdNr (bei richtiger SOrtierung ist das ja die letzte vergebene Nummer)
    - Erhöhe diesen Wert um 1
    - Schreibe den Wert in das Feld lfdNr des neuen Dokuments.


    Geht das so?
    Oder hat eine/r eine andere Idee wie man dieses Prob lösen kann??
    Ich glaube es gab im alten Forum mal nen Thread darüber, finde ihn aber nicht mehr.

  • Ich meine ich hätte da mal was drüber gelesen.
    Wenn Du User hast, die eine Lokale Replik nutzen oder gar Schlepptops, dann wirst Du damit nicht viel Glück haben, da dann Nummer doppelt vergeben werden.
    Ein Agent, der periodisch die neuen Dokumente auf dem Server zusammensammelt und dann Nummern vergibt macht hier wohl mehr Sinn.

  • Hi,


    maybe kannst Du mit diesen Codes was anfangen *g*


    Fortlaufendenummer über Profildokument
        
             
    Erstellen Sie eine Profildokument mit dem Namen "(Profil)" das das Feld "Nummer" enthält.
    Das Folgende Script in in den - PostOpen Event - der Maske einbauen.
    In der Maske wird das Feld Nummer_F als Platzhalter für die fortlaufende Nummer benutzt.



    Möchte man; das die Nummer erst beim Speichern erstellt wird so gehört der gesamte Code in den QuerySave event - man verhindert dadurch; das eine Nummer erstellt wird; obwohl das Dokument gar nicht gespeichert wurde.


    Code Example


    Sub Postopen(Source As Notesuidocument)

    Dim session As New Notessession
    Dim db As NotesDatabase
    Dim ws As New NotesUIWorkspace
    Dim doc As Notesdocument
    Dim uidoc As NotesUIDocument
    Dim test As Variant

    Set db = session.Currentdatabase
    Set uidoc = ws.CurrentDocument
    Set doc = uidoc.Document

    If Not doc.IsNewNote Then
    Exit Sub
    End If

    Set doc = db.GetProfileDocument( "(Profil)")
    test = doc.GetItemValue( "Nummer" )
    nummer = Val(test(0))
    nummer = nummer + 1
    doc.Nummer_F = Str( nummer )
    Call doc.save(True; True)
    Set uidoc = ws.CurrentDocument
    Call uidoc.FieldSetText( "Nummer_F"; Str( nummer ) )
    End Sub


    _______________________________________________________________________________________________________________



    Full Explanation
    This formula will calculate the next available number.


    Code Example


    REM - This sets up lookup values
    CLASS := "Notes";
    CACHE := "Cache";
    NOCACHE := "NoCache";
    SERVER := @Subset(@DbName; 1);
    DATABASE := "";
    VIEW := "($CallTrackingNumbers)";
    KEY := "XXXX-999999";
    COLUMN := 1;


    REM - This looks up & returns the column of already saved


    GetString := @If(@IsError(@DbColumn(CLASS : NOCACHE; DATABASE; VIEW; COLUMN)); "XXXX-000000"; @DbColumn(CLASS : NOCACHE; DATABASE; VIEW; COLUMN));
    LastNumUsed := @TextToNumber(@Right(GetString; 6));
    NewNum := LastNumUsed + 1;
    Digits := @Length(@Text(NewNum));
    Zeros := 6 - Digits;
    @If(CallIdNumber = ""; @If(@IsDocBeingSaved; "XXXX-" + @Repeat("0"; Zeros) + @Text(NewNum); ""); CallIdNumber)




    MfG
    Dubbai

    MfG dubbai


    Sicheres Auftreten bei völliger Ahnungslosigkeit :idea: