Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: gere am 26.09.06 - 21:08:21
-
Hallo zusammen,
Ich zermarter mir gerade den Kopf zu folgendem Thema:
Es sollen mehrere Dokumente in einer Ansicht markiert und in einer Druckmaske angezeigt werden (Tätigkeitsbericht). Und zwar nach folgendem Schema:
In der Ansicht: Name1 Abteilung1 Tätigkeit1 Datum1 Kostenstelle1
Name1 Abteilung1 Tätigkeit2 Datum2 Kostenstelle1
Name1 Abteilung1 Tätigkeit3 Datum3 Kostenstelle1
In der Maske:
Name
Abteilung
Kostenstelle
____________________________
Datum1 Tätigkeit1
Datum2 Tätigkeit2
Datum3 Tätigkeit3
Mein Konzept sieht jetzt folgendermaßen aus:
Aktion "Druckmaske erzeugen" in der Ansicht mit "SubCreatePrintForm(uidoc As NotesUIDocument) usw...", Befüllung der Felder der Druckmaske mit den Werten aus der Hauptmaske. Diese Maske dann einfach mit "@Command([FilePrint]) ausdrucken.
Meine Probleme dabei:
Die Aktion "Druckmaske erzeugen" kann nicht von einer Ansicht aufgerufen werden, da die im Skript enthaltenen Felder in der Ansicht nicht gefunden werden können. Die Aktion lässt sich nur von der Dokument-Maske aus aufrufen, hier werden die Felder gefunden. Somit funktioniert dann aber die Option nicht mehr, mehrere Dokumente durch Markieren gleichzeitig in die Druckmaske aufzunehmen.
Seid mir nicht böse, aber hier stehe ich gerade voll auf dem Schlauch. Kann mir jemand vielleicht nen Tip geben bzw. den Weg aufzeigen, wie man das lösen könnte?
Vielen Dank!
Gere
-
Es wäre jetzt interessant, mehr über Deine bisherigen Bemühungen zu erfahren, denn sowas lässt sich selbstverständlich und ohne weiteres realisieren (wobei mir die Logik, die hinter dem Header
Name
Abteilung
Kostenstelle
noch unklar ist, da man in einer Ansicht ja zunächst mal beliebige Dokumente auswählen kann. Aber auch sowas lässt sich machen (wenn mehrere Namen / Abteilungen / Kostenstellen) gefunden werden.
Was aber auf jeden Fall nicht funktioniert: Du kannst soetwas nicht mit @functions / @commands erreichen, hierfür ist LotusScript erforderlich.
Und jetzt: Mehr Input, mehr Output.
Bernhard
-
Hallo Bernhard,
Das war mir klar ;D
Folgendermaßes will ich mit einer Aktion die Druckmaske befüllen:
____________________________________________________________
Sub CreatePrintForm(uidoc As NotesUIDocument)
Dim ws As New NotesUIWorkspace
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim printdoc As NotesDocument
Dim nam As NotesName
Dim profiledoc As NotesDocument
Dim counter As Integer
Dim puidoc As NotesUIDocument
On Error Goto ErrorSection
Set s = New NotesSession
Set db = s.CurrentDatabase
Set profiledoc = db.GetProfileDocument("Profil", "Profil")
Set doc = uidoc.Document
Set printdoc = db.CreateDocument
printdoc.Form = "DocPrint"
printdoc.CreatedBy = doc.CreatedBY(0)
printdoc.ServiceLocation = doc.ServiceLocation(0)
usw usw usw...
If Not (doc.CreatedBy(0) = "") Then
Set nam = s.CreateName(doc.CreatedBy(0))
printdoc.CreatedBy = nam.Common
End If
If Not (doc.ServiceLocation(0) = "") Then
printdoc.ServiceLocation = doc.ServiceLocation(0)
End If
usw usw usw...
printdoc.Remarks = profiledoc.Remarks(0)
printdoc.ReportNumber = Cstr(profiledoc.ReportNumber(0))
counter = profiledoc.ReportNumber(0)
counter = counter + 1
Call profiledoc.ReplaceItemValue("ReportNumber", counter)
Call profiledoc.Save(True, False)
Call ws.EditDocument(True, printdoc)
Set puidoc = ws.CurrentDocument
Call SetMeasurementValues(doc, puidoc, db)
'Füllen des Feldes DocID mit der Document UNID
Call doc.ReplaceItemValue("DocID", udoc.UniversalID)
Call ws.EditDocument(True, doc)
Exit Sub
ErrorSection:
'Return Error Number and Error Message
boxType% = 0 + 64
flag = Messagebox("Ein interner Fehler ist aufgetreten: "& Str(Err) & " (" & Error$ & "), Zeile " & Str(Erl()) & ". Bitte geben Sie beide Angaben an IT weiter.", boxType%, "Interner Fehler")
Exit Sub
End Sub
_______________________________________________________________________
Ich habe nun eine versteckte Ansicht gemacht, die die Werte aus der DocPrint-Maske anzeigt.
Da ich ja nicht nun weiß, wieviele Dokumente zum Druck markiert werden, habe ich jetzt mal 9 Zeilen in der Druckmaske geschaffen. Die Schwierigkeit ist jetzt, diese dynamisch zu füllen. Mein Ansatz hier ist:
Sub SetMeasurementValues(doc As NotesDocument, uidoc As NotesUIDocument, db As NotesDatabase)
Dim v As NotesView
Dim sdoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim i As Integer
Dim c As Integer
Dim dt As NotesDateTime
On Error Goto ErrorSection
Set v = db.GetView("(PrintByID)")
Set dc = v.GetAllDocumentsByKey(Cstr(doc.UniversalID), True)
i = 0
c = 1
If (dc.Count > 0) Then
Set sdoc = dc.GetFirstDocument
'Call uidoc.FieldSetText("Type", sdoc.Type(0))
While Not sdoc Is Nothing
DateFieldName = "Date_" & Cstr(i)
TimeSFieldName = "TimeS_" & Cstr(i)
TimeEFieldName = "TimeE_" & Cstr(i)
DescriptionFieldName = "Description_" & Cstr(i)
usw usw usw...
c = c + 1
i = i + 1
Set sdoc = dc.GetNextDocument(sdoc)
Wend
Call uidoc.Save
Call uidoc.Refresh
End If
Exit Sub
ErrorSection:
'Return Error Number and Error Message
boxType% = 0 + 64
flag = Messagebox("Ein interner Fehler ist aufgetreten: "& Str(Err) & " (" & Error$ & "), Zeile " & Str(Erl()) & ". Bitte geben Sie beide Angaben an IT weiter.", boxType%, "Interner Fehler")
Exit Sub
End Sub
_______________________________________________________________________
So, und irgendwie hab ich da wohl in meiner Taktik nen Denkfehler drin. Kann mir jemand auf die Sprünge helfen?
Danke + Gruss Gere
-
Hallo!
Ich würde dieses Problem ganz einfach lösen:
Du erstellt eine Druckmaske mit der Option "Formeln übernehmen Werte des gewählten Dokumentes".
Die Felder Namen; Abteilung und Kostenstelle sind in sich selbst berechnet (werden vom in der Ansicht markierten Dokument übernommen).
Die Felder Datum und Tätigkeit berechnen sich mit einem Lookup nach dem Namen ( besser der Pers-Nr oder ähnliches ).
Dann reicht Dir eine Aktionsschaltfläche in der Ansicht mit einem @command([compose];"Druckmaske") und ein File Print. Am besten noch mit SaveOptions arbeiten, damit Du Deine DB nicht zumüllst.
Ach so: Für einen Tätigskeitbericht wirst Du sicher noch einen Zeitraum ( KW, Monat ) oder sonstiges brauchen. Also den Lookup dementsprechend anpassen ;)
Gruß
Frank
P.S
Ich würde ein Profildokument nicht als counter nehmen - ich habe da schon einige merkwürdige Ergebnisse erzielt.
-
Hallo Frank,
Du hast eigentlich recht. Ich hab das jetzt mal im Test so nachgebaut, nur die Option in der Druckmaske "Formeln übernehmen aus gewähltem Dokument" zieht leider nicht. Es werden dann immer alle Dokumente in der Druckmaske angezeigt.
Woran liegt das?
Gruss Gere
-
HI!
Hm - schwer zu sagen - aber Du mußt jetzt natürlich nur noch ein Dokument markieren, da sich die Tätigkeitszeiten ja per Lookup berechnen.
Du hast doch bestimmt soetwas wie ein Mitarbeiterstammblatt, oder!? Daraus würde ich die Erstellung der Tätigkeitsberichte anstoßen - evtl. würde ich die dann doch speichern und dort in einer eingebetten Ansicht anzeigen - das wäre doch schick!
Gruß
Frank
-
Guten Morgäähn.
Gibts eigentlich irgendwie ne Möglichkeit, markierte Dokumente in eine andere Ansicht zu kopieren bzw. in einer Ansicht nur die markierten Dokumente anzuzeigen? Das wäre der Clou.
Hab mir nämlich nen Workaround um mein Problem gebastelt, der das erforderlich machen würde. Dann wäre alles in Butter.
Gruss Gerhard
-
Schau in der Hilfe mal nach PutToFolder.
Das könnte Dir weiterhelfen.
-
@Command([ViewShowOnlySelected]) leistet genau das, was du willst.
Und wen du in der Ansicht noch eine Maskenformel einbaust, kannst du die Dokumente von dort auch mit einer speziellen (Druck)Maske drucken.
Gruß
Norbert
-
Hallo Norbert,
Danke für den Tip, aber das funktioniert auch nicht. Das was in einer Ansicht dann angezeigt wird ist ja nur eine Dokumentauswahl, aber in der Druckmaske werden alle Dokumente der Ansicht übernommen (auch die, die nicht angezeigt werden).
Gruss Gere