Autor Thema: verschiedene Drucker mehrfach auswählen  (Gelesen 8529 mal)

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
verschiedene Drucker mehrfach auswählen
« am: 07.07.10 - 11:46:28 »
Hallo,

Wir haben hier eine Anwendung seit nun inzwischen 10 Jahren laufen, die ich immer wieder ein Stückchen weiter entwickle, einstmals für Version 5 geschrieben wurde und nun inzwischen auch weiter erfolgreich auf Version 8.5. Nun haben wir einen zentralen Farbdrucker angeschafft, der allerdings aus Kostengründen nicht immer alles in Farbe drucken soll.

Das übliche Drucken in der Anwendung war für die Mitarbeiter so gestaltet, dass sie in ihrer Maske (zum Briefeschreiben) einen Knopf hatten, mit dem dann als Aktion die folgenden Befehle aufgerufen wurden:

@Command([FileSave]);
@If(@DialogBox("Druckauswahl"; [AutoHorzFit] : [AutoVertFit])=1;@Do(
@Command([FilePrint];"1";"" ;"" ;"" ;"" ; "" ; "" ;"" ; ""  ;"" );
@If(BKopie!="";
@Do(@Command([EditGotoField];"Bezbrf");
         @Command([EditSelectAll]);
         @Command([EditClear]);
         @Command([EditInsertText];"Beglaubigte Kopie");
         @Command([FilePrint];BKopie;"" ;"" ;"" ;"" ; "" ; "" ;"" ; ""  ;"" ));
"");
@If(EKopie!="";
@Do(@Command([EditGotoField];"Bezbrf");
         @Command([EditSelectAll]);
         @Command([EditClear]);
         @Command([EditInsertText];"Kopie");
         @Command([FilePrint];EKopie;"" ;"" ;"" ;"" ; "" ; "" ;"" ; ""  ;"" );
         @PostedCommand([EditGotoField];"Bezbrf");
         @PostedCommand([EditSelectAll]);
         @PostedCommand([EditClear]);
@PostedCommand([EditInsertText];" ");         
@PostedCommand([EditGotoField];"Brieftext"));
@Do(@PostedCommand([EditGotoField];"Bezbrf");
@PostedCommand([EditSelectAll]);@PostedCommand([EditClear]);
@PostedCommand([EditInsertText];" ");         
@PostedCommand([EditGotoField];"Brieftext"))));"")

In der Dialogbox wurden die beiden Variablen EKopie und BKopie durch den Nutzer ausgewählt, er bekam dann ohne weiteres Zutun ein Original und die entsprechende Anzahl der verschiedenen Kopiearten ausgedruckt. Für die Zukunft habe ich mir überlegt, dass es der einfachste Weg ist, wenn ich bei den gerade mal 5 Anwendern, die die Anwendung nutzen, jeweils den Drucker zweimal installiere, einmal als Farbdrucker voreingestellt und einmal als Schwarzweißdrucker. Dann könnte ich die Anwendung hier so gestalten, dass einfach immer nur der jeweilige Drucker ausgewählt wird, an den dann der Druck gesandt wird. Also das Original an den Drucker Farbe und die beiden Kopien an den Drucker schwarz-weiß.

Nun habe ich hier im Forum gesucht und noch nichts ideales im Hinblick auf meine oben dargestellte Aktion gefunden. Außerdem habe ich entsprechend der Hilfefunktion mal einen Agenten in Script programmiert, den ich dann statt der Print-Befehle aufrufen wollte. Notes zeigt dann die Meldung an, das Dokument wäre noch nicht gespeichert. Kann mir da jemand weiterhelfen?

Vielen Dank und Grüße

Alexander W

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #1 am: 09.07.10 - 15:34:21 »
Hallo,

ich wollte nur mal nachfragen, ob wir vielleicht doch jemand helfen kann?

Es wäre wirklich praktisch, wenn die Auswahl des Druckers möglich wäre. Meine weiteren Versuche, dazu einen beziehungsweise mehrere Agenten zu nutzen, sind fehlgeschlagen.

Vielen Dank für eure Mühe.

Alexander W.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #2 am: 09.07.10 - 16:54:24 »
Ein Denkansatz wäre, temporär den Standarddrucker zu verändern. Habe das einmal für ein Word-Dokument, das aus Notes erstellt und dann über einen PDF-Drucker ausgedruckt werden soll, realisiert. Dazu habe ich allerdings Word-Funktionalität mittels OLE per LotusScript verwendet. Vorgehensweise:

1. Standarddrucker merken
2. PDF-Drucker als Standarddrucker setzen
3. Dokument ausdrucken
4. Standarddrucker auf gemerkten Drucker zurücksetzen

Könnte für Dein Problem vielleicht auch brauchbar sein.

Mitch

  • Gast
Re: verschiedene Drucker mehrfach auswählen
« Antwort #3 am: 09.07.10 - 16:59:23 »
Standarddrucker wechseln war auch mein erster Gedanke.

Scheint aber u.U. problematisch zu sein:

http://atnotes.de/index.php/topic,20581.0.html

und

http://atnotes.de/index.php?topic=13855.0

Da findest du neben den Hinweisen auf eventuelle Risiken auch ein paar Ansätze wie man es trotzdem versuchen kann...

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #4 am: 09.07.10 - 17:55:13 »
Hallo Mitch,

Du hast völlig Recht, das funktioniert mit Notes nicht. Hab das gerade mal zusammenkopiert und ausprobiert (Setzen des Standarddruckers über Word, Ausdrucken, und Standarddrucker wieder zurücksetzen). Es funktioniert alles, wie es soll, der Druckertreiber wird geändert und danach auch wieder zurückgesetzt. Nur Notes rallt nicht, dass der Standarddrucker gewechselt wurde (getestet mit Office 2003 und Notes 7.03 auf Windows XP -> ja, wir arbeiten in einem Museum :)). Poste den Code trotzdem, vielleicht geht das ja mit 8.5 oder es gibt noch einen Trick, oder, oder ...

Function SetzeStandardDrucker (drucker As String) As String
   'Setzt drucker als Standarddrucker
   'Gibt den derzeit gesetzten Standarddrucker zurück
   
   Dim winword As Variant
   Set winword = CreateObject ("Word.Application")
   winword.Application.Visible = False
   
   'Standarddrucker merken
   Dim standarddrucker As String
   standarddrucker = winword.Application.ActivePrinter
   'Standarddrucker setzen
   winword.Application.ActivePrinter = drucker
   Call winword.Application.Quit
   
   SetzeStandardDrucker = standarddrucker
End Function

Sub Click(Source As Button)
   Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Set uidoc = workspace.CurrentDocument
   Dim doc As NotesDocument
   Set doc = uidoc.Document
   
   Dim standarddrucker As String
   standarddrucker = SetzeStandardDrucker (doc.Drucker (0))
   Call uidoc.Print
   Call SetzeStandardDrucker (standarddrucker)
End Sub

Offline WildVirus

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 658
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #5 am: 10.07.10 - 21:18:27 »
Hallo Peter,

das ist ein bekanntes Notesfeature, dass der Wechsel des Standarddruckers bei laufendem Notesclient von diesem nicht beachtet wird.

An dem Problem haben m.W. schon etliche Entwickler ihre Tastaturen verschlissen und es nicht ans laufen bekommen.

Es gab mal -meine unter Notes 3 (ja - gabs wirklich mal)- einen API-Aufruf.

CU,
Axel

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #6 am: 11.07.10 - 18:10:30 »
Man könnte den Ausdruck komplett über Word ausführen, denn dort klappt der Wechsel des Standarddruckers.

Vorgehensweise bei geöffnetem Dokument im Edit-Mode:

1. Dokument über das Frontend speichern (wg. Validierungsformeln)
2. Dokument in Lesemodus setzen
3. Alles markieren und in die Zwischenablage kopieren
4. Worddokument erstellen und Zwischenablage einfügen
5. Standarddrucker setzen, Worddokument ausdrucken, Standarddrucker zurücksetzen
6. Worddokument speichern, schließen, löschen
7. Dokument wieder in Edit-Mode setzen

Das ganze kann für den Benutzer unsichtbar ablaufen.

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #7 am: 12.07.10 - 13:34:58 »
Vielen dank erstmal für die Hinweise, allerdings komm ich damit noch nicht so recht weiter.

In der Hilfe für Lotus Script gibt es ein Beispiel wie folgt:

  4.   This script prints one copy of the current document on the printer Printer247.

Sub Click(Source As Button)
  Dim workspace As New NotesUIWorkspace
  Dim uidoc As NotesUIDocument
  Set uidoc = workspace.CurrentDocument
  Call uidoc.Print( 1, 0, 0, False, "Printer247" )
End Sub

Dieses hatte ich mir in einen Agenten kopiert und den Druckernamen geändert, das wollte ich aus meiner Aktion heraus aufrufen. Allerdings geht weder das noch ein direktes Aufrufen des Agenten. Das Ergebnis ist gleich null, also gar kein Ausdruck. Bei bestimmten Einstellungen zeigt Notes an "das Notes-Dokument wurde noch nicht gespeichert" und geht nicht weiter. Ist vielleicht was am Agenten falsch ?


Grüße

Alexander W.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #8 am: 12.07.10 - 13:54:51 »
Die Option mit dem Drucker ist neu, in der Hilfe zu Notes 7 steht die noch nicht. Wäre ja genau das, was Du suchst.

Ich würde jetzt erstmal nur Call uidoc.Print (1) verwenden, bis ein Ausdruck erfolgt. Und erst wenn das klappt, mit den anderen Optionen experimentieren. Den Fehler vermute ich nämlich woanders. Wie (bzw. von wo) rufst Du denn den Agenten oder das Script auf?

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #9 am: 12.07.10 - 14:01:02 »
Also eigentlich soll das Drucken aus einer Aktion, die ich bisher in Formelsprache (s.o.) laufen hatte, aufgerufen werden. ich dachte, ich kann es einfach als Agent einbinden, weil ich die Aktion nicht in Script umschreiben wollte. Davon habe ich ehrlich gesagt nämlich keine Ahnung und bisher auch keine für mich verständliche Einführung gefunden.

Da ich den Agenten dann hatte, habe ich ihn testweise auch mal über das Menü Aktionen aufrufen wollen, das klappte aber nicht.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #10 am: 12.07.10 - 14:17:50 »
Dann hast Du bei Deinem Agenten nicht als Ziel "Keines" eingetragen (so heißt es zumindest unter Notes 7), sondern den Standard "Alle ausgewählten Dokumente" stehen gelassen.

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #11 am: 12.07.10 - 14:22:41 »
testweise klappt inzwischen einfaches Drucken aus einer Aktion.

Bei der Benennung des Druckers muss man im Netzwerk drauf achten die richtigen Druckernamen zu verwenden, also genau so wie im Druckdialog angezeigt.

Jetzt fehlt mir nur noch die Einbindung in meine Formelfolge oben, also entweder als funktionierender Agent oder halt alles in Script. Kann mir da jemand auf die Sprünge helfen ?

PS: mit der Funktion kann man auch PDFs erstellen, das ist sehr hübsch !

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
[GELÖST] verschiedene Drucker mehrfach auswählen
« Antwort #12 am: 12.07.10 - 14:59:04 »
Hallo,

jetzt funktioniert es, man sollte halt nicht einfach kopieren ! Ich habe im Agent noch das Ereignis von Click an Initialize geändert, so dass der Agent ohne Klick abläuft. Jetzt kann ich ihn aufrufen und drucken und PDFs erstellen, wie ich es gern möchte. Also es geht wohl erst ab 8.5, ob der Druckerwechsel früher möglich war, weiß ich nicht.

Grüße

Alexander W.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #13 am: 12.07.10 - 15:05:29 »
Der Parameter wurde tatsächlich erst mit 8.5.0 eingeführt.

Bernhard

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #14 am: 13.07.10 - 10:00:04 »
Hallo,

Im Praxistest ist noch ein Problem aufgetaucht:

Ich muss ja noch meine beiden Variablen EKopie und BKopie an den Druckagenten übergeben. Ich habe hier jetzt mal gesucht, allerdings nichts gefunden, was mir wirklich weiterhilft. Da fehlt es noch ein Stückchen am Verständnis, wie ich in dem Lotus Skript Befehl mit solchen Variablen umgehen kann. Ich habe ja zur gleichen Zeit sozusagen eine Aktion und den Agenten laufen, also 2 verschiedene Dinge, die miteinander Daten austauschen müssen. Kann mir da jemand weiterhelfen?

Vielen Dank

Alexander W.

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #15 am: 13.07.10 - 14:36:48 »
Du hast doch ein Script, dass den Agenten aufruft. Wenn Du in dem Script eine Sub erstellst, die das ausführt, was heute der Agent macht, kannst Du dort EKopie und BKopie als Parameter übergeben. Den Agenten brauchst Du dann nicht mehr.

Wenn Du allerdings noch den Formelaufruf verwendest, kannst Du EKopie und BKopie temporär in das Dokument schreiben und vom Agenten auslesen. Da Du das Dokument sowieso änderst (Kopie oder beglaubigte Kopie), sollte das kein Problem darstellen. Am Ende solltest Du die Felder aber wieder entfernen.

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #16 am: 14.07.10 - 11:39:06 »
Also der Agent wird aus einer Formel auffgerufen, die variablen BKopie und EKopie aber immer im Dokument gespeichert. Deine Idee ist deshalb sehr gut und ich wollte das jetzt umsetzetn. Alllerdings kommt immer nur eine Kopie aus dem Drucker. Ich habe hier als Beispiel EKopie auf 2 im Dokument gesetzt und dann folgendes Skript im Agenten:

              Dim workspace As New NotesUIWorkspace
   Dim uidoc As NotesUIDocument
   Dim Anzahl As String
   Dim Anzahl1 As Integer
   Set uidoc = workspace.CurrentDocument
   Anzahl = uidoc.FieldGetText ( "EKopie" )
   Anzahl1 = Val ( Anzahl )
   Call uidoc.Print( Anzahl1 , 0, 0, False, "FreePDF" )

Irgendwas scheint falsch zu sein. Aber im Gegensatz zum Formelbefehl brauche ich im Skript angeblich nach der Hilfe eine Integervariable für die Anzahl der Kopien beim Drucken. Vielleicht kann mir jemand auf die Sprünge helfen.

Vielen Dank

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: verschiedene Drucker mehrfach auswählen
« Antwort #17 am: 14.07.10 - 11:54:44 »
Val übersetzt in ein Double, probier doch mal Cint (Anzahl).

Zur Fehlersuche würde ich sonst einmal hart 2 eintragen und prüfen, ob 2 mal gedruckt wird.

Offline Alexander W

  • Frischling
  • *
  • Beiträge: 21
Re: verschiedene Drucker mehrfach auswählen
« Antwort #18 am: 14.07.10 - 13:38:52 »
Vielen Dank für die Hinweise, inzwischen funktioniert auch dies.

Interessant ist, dass beim Drucken auf einen echten Drucker die Kopienanzahl erkannt wird, beim Drucken in eine PDF-Datei (siehe mein Code oben) der Parameter aber ignoriert wird. Aber da braucht man ja auch meist nur eine einzige Kopie.

Nochmal vielen Dank

Alexander W.

Offline S2000

  • Junior Mitglied
  • **
  • Beiträge: 89
Re: verschiedene Drucker mehrfach auswählen
« Antwort #19 am: 16.07.10 - 14:41:29 »
Hallo,

also das setzten des Standard-druckers geht bei mir über WSH (somit auf windowsclients beschränkt).

Set WshNetwork = CreateObject("WScript.Network")
WshNetwork.SetDefaultPrinter Cstr("Druckerbezeichner"))

Die liste der möglichen Drucker kann ebenso mit der Methode ausgelesen werden.

Gruß
Armin
Wer Notes hat braucht kein Sudoku

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz