Domino 9 und frühere Versionen > ND6: Entwicklung

Ausdrucke kommen nicht in der richtigen Reihenfolge

(1/2) > >>

iukhdh:
Hallo Forum,

da bin ich mal wieder.
Ich habe ein kleines Problem, wo mir einfach nicht klar ist woran es liegen könnte.
Ich drucke im Rahmen unserer Leistungsbewertung über Notes (Jaha ... ich weiss ...) je Mitarbeiter ein Anschreiben und ein Bewertungsblatt aus. Ich habe eine Ansicht in der ich die betroffenen Datensätze markiere und dann über einen Ansichtsbutton einen Agenten starte. Das klappt alles hervorragend, bis auf eine Kleinigkeit:

Anstatt

Anschreiben Mitarbeiter A
Berechnungsblatt Mitarbeiter A
Anschreiben Mitarbeiter B
Berechnungsblatt Mitarbeiter B
Anschreiben Mitarbeiter C
Berechnungsblatt Mitarbeiter C
Anschreiben Mitarbeiter D
Berechnungsblatt Mitarbeiter D

kommen die Ausdrucke durcheinander raus, also z.B.

Anschreiben Mitarbeiter A
Berechnungsblatt Mitarbeiter A
Anschreiben Mitarbeiter B
Berechnungsblatt Mitarbeiter C
Anschreiben Mitarbeiter D
Berechnungsblatt Mitarbeiter B
Anschreiben Mitarbeiter C
Berechnungsblatt Mitarbeiter D

Man muss die Blätter also hinterher immer noch sortieren. Woran könnte das liegen?

Ich frage im Code verschiedene Bedingungen ab und nehme dann mal dieses, mal jenes Anschreiben, danach dann immer das gleiche Berechnungsblatt.

Kann es sein, dass sich die Druckaufträge irgendwie "überholen", weil die eine oder andere Abfrage etwas länger dauert? Aber bei meinem Verständnis sollten die doch eigentlich der Reihe nach kommen, so wie die Druckbefehle vom Notes gegeben werden, oder?

Kennt jemand dieses Verhalten?

Vielen Dank und schönes Wochenende im Voraus.

Hier der Code:



--- Code: ---Sub Initialize
Dim session As New NotesSession
Dim db As Notesdatabase
Dim collection As NotesDocumentCollection
Dim docTemp As NotesDocument
Dim docTemp2 As NotesDocument
Dim nuiw As New NotesUIWorkspace
Dim docToPrint As NotesUIDocument

'Hol die aktuelle Datenbank
Set db=session.CurrentDatabase
'Hol alle markierten Dokumente
Set collection = db.UnprocessedDocuments
'Hol das erste der Dokumente
Set docTemp = collection.GetFirstDocument


'Schleife um die markierten Dokumente der Reihe nach abzufragen
While Not (docTemp Is Nothing)
'Schonmal das nächste Dokument raussuchen
Set docTemp2 = collection.GetNextDocument(docTemp)

'Ausdruckroutine nur dann, wenn es sich um eine Eingabemaske handelt.
If docTemp.form(0)="Eingabe" Then


'Ausdruck wenn es sich um den freigestellten PRV handelt
If docTemp.Personalrat(0) ="Ja" Then
docTemp.form ="AusdruckPersonalrat"
Goto Drucken
End If
'Ausdruck wenn Mitarbeiter nix bekommt
If docTemp.Gesamtpunktzahl(0) <3.071 Then
docTemp.form ="Ausdruckbekommtnix"
Goto Drucken
End If
'Ausdruck wenn Mitarbeiter ohne Leistungszulagen was bekommt
If docTemp.Gesamtpunktzahl(0) >=3.071 And docTemp.andereLeistungszulagen(0) ="Nein" Then
docTemp.form ="Ausdruckbekommtwas"
Goto Drucken
End If

... hier fehlen dann noch 3 weitere Abfragen, die ich hier nicht aufliste ...

'Ausdruck bei allen anderen Varianten die dann fehlerhaft sein müssen

docTemp.form ="Maximalleer"

'Dokument ausdrucken
Drucken:
nuiw.EditDocument True,doctemp
Set docToPrint = nuiw.CurrentDocument
Call docToPrint.Print (1)
Call docToprint.close

' Berechnungsblatt ausdrucken

If docTemp.Personalrat(0) ="Nein" Then

docTemp.form ="Berechnungsblatt"
nuiw.EditDocument True,doctemp
Set docToPrint = nuiw.CurrentDocument
Call docToPrint.Print (1)
Call docToprint.close

End If

End If


'nächstes Dokument übergeben
Set docTemp = docTemp2
Wend

End Sub
--- Ende Code ---

klaussal:
Stehen die Docs in der Collection denn sortiert drin ?

iukhdh:
Gute Frage :-)

Nein, im Ernst, das ist natürlich ein Ansatz, den ich dann mal angehen muss.

ABER:

Trotzdem müssten doch bei den Dokumenten dann immer Anschreiben und Berechnungsblatt ein und des selben Mitarbeiters hintereinander kommen, oder?

Johnson:
Das habe ich bei der Programmierung der LetterEngine auch festgestellt.

Die Dokument in der Collection sind immer nach dem Erstelldatum sortiert. Auch wenn man über die Ansicht die Dokument auswählt.

Probier mal das hier (Performace ist allerdings nicht so toll):


--- Zitat ---Function SortDocumentCollection (coll As NotesDocumentCollection, ViewName As String) As NotesDocumentCollection
'This function takes a NotesdocumentCollection and sorts in the same order as the specified view.
'It actually creates a new collection by navigating through the view and adding documents
'as it encounter them in the NotesViewEntryCollection
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim view As NotesView
   Dim entry As NotesViewEntry
   Dim vc As NotesViewEntryCollection
   Dim SortedColl As NotesDocumentCollection
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   Set view = db.GetView(ViewName)
   Set vc = view.AllEntries
'initialise the new collection - trick is to create an empty collection because the collection needs to be initialized before we can add documents into it
   Set SortedColl = view.GetAllDocumentsByKey("zzxxzz")
'scan AllEntries
   Set entry = vc.GetFirstEntry
   While Not entry Is Nothing
'get a document from AllEntries and add it to the new collection
      Set doc = coll.GetDocument(entry.Document)
      Call SortedColl.AddDocument(doc)
      Set entry = vc.GetNextEntry(entry)
   Wend
'return the new collection
   Set SortDocumentCollection = SortedColl
End Function
--- Ende Zitat ---

ata:
... es liegt mit Sicherheit bei der Sortierung der Collection - die ist wie vermutet nach Erstellungdatum.

Je nachdem wieviele Dokumente selektiert werden, kann man über @Sort auch eine Sortierung erreichen. Dazu muß man sich aus den Dokumenten einen sortierbaren String generieren und in ein Array schreiben. Über ein temporäres Dokument schreibt man das Array in ein Feld und sortiert die Werte dann mit

docTemp.tempFeldname = Evaluate( "@Sort(tempFeldname)" , docTemp )...

Das Limit an Dokumenten liegt dann im Integer-Bereich...

Toni

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln