thisDoc.LastDetailPos= collection.count
Call thisdoc.Save(True, True)
If thisDoc.LastDetailPos(0) > 1 Then
For i = 1 To collection.count
Set docdetail = collection.GetNthDocument(i)
docDetail.Pos = i
Call docDetail.Save( True, True )
Next
thisDoc.LastDetailPos = collection.count
Else
thisDoc.LastDetailPos = 0
End If
Call viewForRefresh.Refresh()
Call uiDoc.Refresh()
End If
Script debugger cannot debug the current object in a dialog.Script debugger will be disabled until dialog is closed.
/quote]
Der komplette Code für dei Action"Artikel löschen" sieht so aus:CodeSub Click(Source As Button) Dim collection As NotesDocumentCollection Dim docDetail As NotesDocument Dim viewForRefresh As NotesView Dim strPos As String Dim i As Integer Set viewForRefresh = db.GetView( "(BestellPositionen)" ) Set view2 = db.GetView( "(BestellPositionenByKey)") Call view2.Refresh() Set collection = view2.GetAllDocumentsByKey(thisDoc.UniversalID) Select Case collection.Count Case 0: Msgbox "Keine Position vorhanden.", 48, db.title Case 1: Set docDetail = collection.GetFirstDocument Call docDetail.Remove (True) Case Else: strPos = Inputbox$( "Welche Position löschen?", "Position löschen", "1" ) If strPos <> "" Then Call view2.Refresh() Set docDetail = view2.GetDocumentByKey( thisDoc.UniversalID + "-" + strPos ) Call docDetail.Remove( True) End If End Select REM Positionen neu durchnummerieren Set collection = db.Search( |Form = "BestandsabfrageDetail" & ParentUNID = "| + thisDoc.UniversalID + |"|, Nothing, 0 ) thisDoc.LastDetailPos= collection.count Call thisdoc.Save(True, True) If thisDoc.LastDetailPos(0) > 1 Then For i = 1 To collection.count Set docdetail = collection.GetNthDocument(i) docDetail.Pos = i Call docDetail.Save( True, True ) Next thisDoc.LastDetailPos = collection.count Else thisDoc.LastDetailPos = 0 End If Call viewForRefresh.Refresh() Call uiDoc.Refresh() End Sub
thisDoc ist global deklariert.
So resistent gegenüber Aufforderungen sich klarer auszudrücken war bis jetzt noch niemand.
7_Stein ist doch ganz offensichtlich nicht Ed Brill.
@7_Stein: Solche "Sortieralgorythmen" bringen nix gutes.
Die Funktionalität von 1 bis x sauber durchgezählten Dokumenten hat sehr hohe Performance-Kosten.
Jede Nacht lief ein Agent durch die Datenbank, der zwischen den Nummern Lücken schuf, d.h. er ging alle Dokumente durch und vergab neue Nummern mit jedesmal frischen 10er Abständen. Wenn die dann ein Dokument zwischen 10 und 20 legen wollten, nahmen die eben 13 oder 14 oder 17.
Es ist nämlich in aller Regel nicht wichtig, dass bei den Nümmerschen auf 7 die Nummer 8 folgt. Wichtig ist, dass es die Möglichkeit gibt die Dokumente in eine gewisse Reihenfolge einzusortieren.
Das solltest du mal einigen Institutionen wie z.B. einer Finanzbuchhaltung, einer Revision oder der Steuerfahndung erklären. Die werden dich diesbezüglich erst An-, dann Auslachen und anschließend zu Ihrem Tagesgeschäft mit der fortlaufenden Belegnummerierung zurückkehren.
....
thisDoc.LastDetailPos steht eine 0 drin.heisst, das Script findet KEINE Dokumente! Also wird nichts weiter gemacht. Es wäre jetzt zu untersuchen, warum keine Dokumente gefunden werden und dazu ist o.g. Messagebox gedacht.
Falls es dafür keine ökonomisch begründbaren Intentionen gibt:Jetzt machst du es dir zu einfach. Diesen Druck gibt es tatsächlich, z.b. von Seiten der Finanzbehörden. Die verlangen eine lückenlose Verfolgung der Eingangsbelege. und das erreichst du nur über fortlaufende Nummern. Wenn da etwas nicht stimmt fängt die Außenprüfung an zu bohren und dann viel Spaß.
Falls es dafür keine ökonomisch begründbaren Intentionen gibt:und das erreichst du nur über fortlaufende Nummern. Wenn da etwas nicht stimmt fängt die Außenprüfung an zu bohren und dann viel Spaß.
Man kann ja eine stored procedure schreiben, die dann angetriggered wird, wenn die/der an der Pforte 4 mal pfeift.Mit automatischer Türblockierung, Ohh tut mir leid da klemmt was, solange die Prozedur noch nicht fertig ist.
So und was deine Neuberechnung der Positionen angeht:
Dim collection As NotesDocumentCollection
Dim docDetail As NotesDocument
Dim olddocdetail as notesdocument
Dim viewForRefresh As NotesView
dim view2 as NotesView
Dim strPos As String
Dim i As Integer
Set viewForRefresh = db.GetView( "(BestellPositionen)" )
Set view2 = db.GetView( "(BestellPositionenByKey)")
HIER SIND LAUFZEITPROBLEME BEI VIELEN DOKUMENTEN IN DER DATENBANK ZU ERWARTEN
Call view2.Refresh()
Set collection = view2.GetAllDocumentsByKey(thisDoc.UniversalID)
Select Case collection.Count
Case 0:
Msgbox "Keine Position vorhanden.", 48, db.title
Case 1:
Set docDetail = collection.GetFirstDocument
Call docDetail.Remove (True)
Thisdoc.LastDetailPos = 0
Call thisdoc.Save(True,False)
Case Else:
strPos = Inputbox$( "Welche Position löschen?", "Position löschen", "1" )
If strPos <> "" Then
Call view2.Refresh()
Set docDetail = view2.GetDocumentByKey( thisDoc.UniversalID + "-" + strPos )
Call docDetail.Remove( True)
End If
set docdetail = collection.getfirstdocument()
do while not docdetail is nothing
set olddocdetail = docdetail
UMWANDELN WENN KEIN STRING ->
if docdetail.pos(0) > StrPos
Docdetail.pos = docdetail.pos(0) -1
end if
set docdetail = collection.getnextdocument(olddocdetail)
Enddo
UND WENN DU PARTOUT DIE ANZAHL DER POSITIONEN SPEICHERN WILLST
Thisdoc.LastDetailPos = ThisDoc.LastDetailPos(0) - 1
DANN DAS THISDOC APSPEICHERN WEIL ES JA BACKEND IST
Call ThisDoc.Save(True,False)
End Select
Und hier musst du nur noch das UIdoc wieder in den Voerdergrund holen. Du hast ja schließlich im Backend gearbeitet.
Damit ist das sauber strukturiert und kein überflüssiger Code drin.
@Atlantischer Seemann
... nämlich der docdetail.save damit die veränderte positionsnummer auch abgespeichert wird und dann ist das mit dem Olddoc aber wieder richtig.
Und nein da sollte es eigentlich nicht knallen. sobald du ein Dokument veränderst fliegt es nämlich aus der Collection raus, sonst wäre der Zirkus mit dem Olddoc nicht immer wieder notwendig. ...
Ich fahr jetzt erstmal in den Urlaub. Notes-freie Zone ;) ;Dtoll, alle fahren weg... thailand, indien... ok, und ich versuch' mich derweil an dem 7'er server, admin, client, designer... :'( viel spaß dir aber wohin auch immer ;)
Aber hier so nieder gemacht zu werden, nur weil man sich vielleicht zu umständlich oder zu missverständlich ausdrückt, finde ich echt eine Sauerei.