henere
Goto Top

Drucken aus Access unter Windows 10

Hallo zusammen,

ich habe gerade etwas Diskussionen mit dem Entwickler einer Access2013 DB.

Die Drucker werden als TCP-IP Drucker installiert. Es handelt sich um Brother, wie auch Kyocera Drucker.

Es geht darum diverse Formulare unterschiedlich zu drucken.
Als Beispiel soll Formular 1 auf Drucker 1 aus unterschiedlichen Fächern gedruckt werden. Teilweise Duplex. Formular 2 dann nur aus Fach 2 ... usw.
Unter Windows7 wurde das bis jetzt so gelöst, dass auf dem PC jeder Drucker mehrfach installiert wurde, mit unterschiedlichen Namen, wie z.B. "Drucker 1, Fach 1"; "Drucker 1, Duplex": "Drucker 1, Fach 2"; "Drucker 2, Duplex" usw. In der Konfiguration dieser Drucker wurden dann die entsprechenden Eigenschaften eingestellt. Das ergab dann über 8 verschieden installierte Drucker auf den PCs.

Nun soll das Ganze demnächst auf Windows 10 laufen.

Wir hatten bei Tests unter Windows 8.1 aber schon die Erfahrung gemacht, dass das mehrfache installieren von ein und dem gleichen Drucker mit der gleichen IP irgendwann damit endet, dass die Drucker gar nicht mehr drucken, Druckaufträge irgendwo im Nirvana verschwinden und andere Nettigkeiten. Ich befürchte unter Win10 wird dies nicht anders ablaufen.
Von daher war mein Vorschlag bzw. Idee , dass jeder physikalische Drucker nur jeweils einmal auf dem System installiert wird und aus der Access-DB die Drucker per VBA dementsprechend angesteuert werden.

Jetzt sagt aber der Entwickler nach einigen Tests, dass dies seiner Meinung nach nicht per VBA machbar wäre.

Von daher meine Frage an euch: Wie geht ihr mit sowas um ? Geht das mit VBA, oder muss zwingend mit den vielen installierten Druckern gearbeitet werden ? Oder gibt es vielleicht einen ganz anderen Weg um so etwas zu bewerkstelligen ? Es ist eine 2012er Domäne vorhanden, man könnte auch einen Server zum Printserver machen, und die "vielen" Drucker dann dort installieren und freigeben. Diese Möglichkeit hat aber unter W8.1 auch nicht sauber funktioniert, daher sind alle Clients (5 Stück) noch auf Win7 geblieben.

Danke und Grüße, Henere (der von VBA und Druckersteuerung nun mal ganz und gar keine Ahnung hat)

Content-Key: 307367

Url: https://administrator.de/contentid/307367

Printed on: April 25, 2024 at 14:04 o'clock

Mitglied: 129413
129413 Jun 16, 2016 updated at 13:04:42 (UTC)
Goto Top
Das geht problemlos, zumindest bei Reports mit der PaperBin Property (Für jeden Drucker muss der entsprechende Traywert ausfindig gemacht und abgelegt werden) , bei Formularen müsste ich erst mal nachsehen.

Gruß skybird
Member: Henere
Henere Jun 16, 2016 at 15:07:53 (UTC)
Goto Top
Hallo Skybird,

da ich "nur" für die Clients und das Netzwerk zuständig bin, aber die Anwendung selbst kaum kenne, weiß ich nicht ob es Reports oder Formulare sind. Den Tip mit dem PaperBin Property gebe ich gerne weiter. Hast Du noch einen Tipp für mich, wie das mit dem Duplex gesteuert werden kann ?

An alle anderen: Bin für weitere Meinungen offen.

Grüße, Henere
Member: j123321
j123321 Jun 16, 2016 at 17:10:03 (UTC)
Goto Top
Hi,

hier mal der aktuelle Versuch des Entwicklers:


'...  

Set rpt = Reports(pReportName)

    rpt.Printer = Application.Printers(pPrinterName)
    
    With rpt.Printer
    
        If pPaperBin > -1 Then .PaperBin = pPaperBin
    
        DoCmd.OpenReport pReportName, acViewNormal
        DoCmd.Close acReport, pReportName, acSaveNo
    
    End With

Set rpt = Nothing

'...  



'pPaperBin:  



'https://msdn.microsoft.com/en-us/library/office/ff822005.aspx  

'7;acPRBNAuto  
'14;acPRBNCassette  
'5;acPRBNEnvelope  
'6;acPRBNEnvManual  
'15;acPRBNFormSource  
'11;acPRBNLargeCapacity  
'10;acPRBNLargeFmt  
'2;acPRBNLower  
'4;acPRBNManual  
'3;acPRBNMiddle  
'9;acPRBNSmallFmt  
'8;acPRBNTractor  
'1;acPRBNUpper  



Kommt aber leider immer aus Fach 1 face-sad

Viele Grüße,

Jens
Mitglied: 129413
129413 Jun 16, 2016 updated at 18:35:40 (UTC)
Goto Top
Die Windows-Eigenen Tray-Defintionen unterstützt leider nicht jeder Drucker(Treiber) bzw. diese wurden nicht korrekt nach MS Vorgaben im Treiber umgesetzt.

Welche Kassetten sich per Code in Windows möglicherweise setzen lassen können, kann man sich z.B. per Powershell für einen Drucker auflisten lassen:
Add-Type -AssemblyName System.Printing
# Druckername
$printerName = "HP Laserjet 1320"  
# Konstanten
$adminServer = [System.Printing.PrintSystemDesiredAccess]::AdministrateServer
$adminPrinter = [System.Printing.PrintSystemDesiredAccess]::AdministratePrinter
# Printserver-Zugriff erhalten
$server = new-object System.Printing.LocalPrintServer $adminServer
# Print-Queue des gewünschten Druckers filtern
$queues = $server.GetPrintQueues() | ?{$_.Name -eq $printerName }

foreach($q in $queues){
    # Administrativen ZUgriff auf den PrintQueue erhalten
    $objPrinter = new-object System.Printing.PrintQueue -argumentList $server,$q.Name,$adminPrinter
    $objPrinter.GetPrintCapabilities().InputBinCapability
}
Wird dort nur ein Tray gelistet sieht es schlecht aus.

Über die Win32API ließe sich eventuell noch was drehen. Muss ich bei Zeiten mal nachsehen.

Gruß skybird
Member: Henere
Henere Jun 16, 2016, updated at Jun 17, 2016 at 00:23:11 (UTC)
Goto Top
Servus Skybird,

egal welchen (Brother)-Drucker ich bei $printername einsetze, ich erhalte immer das hier:

PS C:\Users\Administrator> C:\Program Files\Scripts\Drucker.ps1
AutoSelect

Gehe ich richtig in der Annahme, dass ich dort den Wert (Namen) einsetzen muss, den der Drucker in der Systemsteuerung => Hardware und Sound => Geräte und Drucker hat ?

Es ist auch egal, wenn ich in den Druckeigenschaften fest eine andere Papierkasette auswähle, es bleibt bei Autoselect stehen.
Liegt das jetzt an Brother, dass die bescheidene Treiber bauen ? Die sollen doch angeblich HP PCL verstehen, wenn ich das richtig rausgelesen habe.

Update: Bei einem Kyocera bekomme ich zumindest diese Auswahl:

AutoSelect
Cassette
Manual

Danke und Grüße, Henere
Member: Henere
Henere Jun 20, 2016 at 15:35:43 (UTC)
Goto Top
Servus zusammen,

das ist die Antwort von Brother.

Wenn Sie in Ihrem Programm PCL und/oder PJL Anweisungen mitgeben können, dann sollte die Schachtsteuerung kein Problem sein.
Folgende Sequenzen benötigen Sie dazu:
 
Einzugsschacht:
1 = <ESC>&l1h1001H
2 = <ESC>&l5h1001H
3 = <ESC>&l8h1001H
4 = <ESC>&l9h1001H
5 = <ESC>&l10h1001H
 
Ausgabefach:
1 = @PJL SET OUTBIN=OPTIONALOUTPUTBIN1
2 = @PJL SET OUTBIN=OPTIONALOUTPUTBIN2
3 = @PJL SET OUTBIN=OPTIONALOUTPUTBIN3
4 = @PJL SET OUTBIN=OPTIONALOUTPUTBIN4
 
Näheres können wir zu VBA oder der Programmierung leider nicht sagen.

Kann dem Jens jemand sagen, wie er das in VBA packen kann ?

Danke und Grüße, Henere
Mitglied: 129813
129813 Jun 20, 2016 at 16:18:11 (UTC)
Goto Top
Member: Henere
Henere Jun 20, 2016 at 23:26:52 (UTC)
Goto Top
Thx highload,

do you know if this will work with more actual (recent) versions of WIndows and VBA ?

Kind regards, Henere
Mitglied: 129813
129813 Jun 21, 2016 at 06:24:04 (UTC)
Goto Top
This should still work. Simply test it yourself.
Member: Henere
Henere Jun 21, 2016 at 10:01:02 (UTC)
Goto Top
Thx a lot. Jens will test it, and we will reply then.

Kind regards, Henere
Member: j123321
j123321 Jun 21, 2016 at 14:34:52 (UTC)
Goto Top
Hi,

sorry, aber kein Plan, wie ich das zum Laufen bekommen soll. Kann noch jemand helfen?

Viele Grüße

Jens
Member: Henere
Henere Jun 29, 2016 at 12:01:10 (UTC)
Goto Top
Servus zusammen,

ist hier niemand dabei der dem Jens sagen kann, wie er die Steuercodes per VBA an den Drucker senden kann ?

Grüße, Henere