Hallo,
ich möchte jeder Rechnung eine neue Rechnungsnummer verpassen. wie kann ich das machen?
laufende Nummer
- Manfred
- Erledigt
-
-
Habe mal Deinen Beitrag verschoben, weil es ja doch eher um eine programmiertechnische Lösung geht.
-
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.
-
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
SvenPS: hab da eine SeqNum.nsf, in der alles gut beschrieben ist ...
-
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 -
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!
-
Diese Zeile definiert mehrere Variablen auf einmal