So, habe das Problem gelöst.
Die alte Variante mit der Formelsprache:
REM {Kuerzel bestimmen};_Name := ADM;_List := @Explode(_Name; " ");_Kuerzel := @If(@Count(_List) = 1; @UpperCase(_Name);@UpperCase(@Left(_List[1]; 1)) + @UpperCase(@Left(_List[@Count(_List)]; 1)));REM {Jahr bestimmen};_Jahr := @Right(@Text(@Year(@Today)); 2);REM {Naechste Nummer bestimmen};_Nummern := @DbLookup("": "NoCache"; ""; "AngebotsnummerView"; _Kuerzel; 2);_Nummer := @If(@Elements(_Nummern) > 0; _Nummern[1]; @IsNull(_Nummern); "1"; _Nummern);_Neue_Nummer := @If(@IsNumber(@TextToNumber(_Nummer)); @TextToNumber(_Nummer) + 1; 1);_Volle_Nummer := @If(@Length(@Text(_Neue_Nummer)) = 1; "000" + @Text(_Neue_Nummer);@Length(@Text(_Neue_Nummer)) = 2; "00" + @Text(_Neue_Nummer);@Length(@Text(_Neue_Nummer)) = 3; "0" + @Text(_Neue_Nummer);@Text(_Neue_Nummer));FIELD Angebotsnummer :=@If(@IsNull(Angebotsnummer) | Angebotsnummer = ""; _Jahr + "/" + _Kuerzel + "/" + _Volle_Nummer; Angebotsnummer);@Success
Die neue und funktionierende Variante mit Lotus Script.
Sub Querysave(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim allDocuments As NotesDocumentCollection
Dim searchCriteria As String
Dim ADM As String
Dim Token As String
Dim Kuerzel As String
Dim Index As Integer
Dim Jahr As String
Dim Angebotsnummer As String
Dim AngebotsnummerR As String
Dim KuerzelAngebot As String
Dim Nummer As Integer
Dim MaxNummer As Integer
Dim NeueNummer As String
If (Source.EditMode And Source.IsNewDoc) Then
Set db = session.CurrentDatabase
searchCriteria = "(!@IsNull(Angebotsnummer))"
searchCriteria = searchCriteria + " & (Angebotsnummer != """")"
searchCriteria = searchCriteria + " & (@Left(Angebotsnummer; 2) = @Right(@Text(@Year(@Today)); 2))"
searchCriteria = searchCriteria + " & (!@IsError(@TextToNumber(@Right(Angebotsnummer; 4))))"
REM Kürzel bestimmen
ADM = Cstr(Source.Document.GetFirstItem("ADM").Text)
Token = ADM
Kuerzel = Left$(Token, 1)
While (Instr(Token, " ") > 0)
Index = Instr(Token, " ")
Token = Right$(Token, Len(Token) - index)
Kuerzel = Kuerzel + Left$(Token, 1)
Wend
Kuerzel = Ucase$(Kuerzel)
REM Jahr bestimmen
Jahr = Format$(Date, "yy")
REM Nächste Nummer bestimmen
maxNummer = 0
Set allDocuments = db.Search(searchCriteria, Nothing, 0)
Set doc = allDocuments.GetFirstDocument
If (Not doc Is Nothing) Then
Messagebox "Verarbeite " + Cstr(allDocuments.Count) + " Dokumente", MB_OK, "Verarbeite"
Do
If (doc.HasItem("Angebotsnummer")) Then
Angebotsnummer = doc.GetFirstItem("Angebotsnummer").Text
AngebotsnummerR = Right$(Angebotsnummer, 4)
KuerzelAngebot = Mid$(Angebotsnummer, 4, 2)
If (Kuerzel = KuerzelAngebot) Then
If (Isnumeric(AngebotsnummerR)) Then
Nummer = Cint(AngebotsnummerR)
If (Nummer > MaxNummer) Then
MaxNummer = Nummer
End If
End If
End If
End If
Set doc = allDocuments.GetNextDocument(doc)
Loop Until (doc Is Nothing)
End If
REM Neue Nummer setzen
NeueNummer = Jahr + "/" + Kuerzel + "/" + Format$(MaxNummer + 1, "0000")
Call Source.FieldSetText("Angebotsnummer", NeueNummer)
End If
End Sub
Alles anzeigen
Wobei Source.EditMode And Source.IsNewDoc wahrscheinlich doppelt gemobbelt ist.