Hallo,
für ein Kassensystem benötige ich je nach angeschlossenem Drucker 2 verschieden gestaltete Berichte: ein Bericht rpt_xyz_thermo ist für einen Thermodrucker mit 8cm breite Endlosrollen gestaltet, der andere Bericht (gleichen Inhalts) rpt_xyz_A4 für einen Desktop-Drucker mit DIN A4 Seitenformat.
Bisher habe ich die Auswahl der unterschiedlichen Berichtsdesigns so gelöst, dass ich unterschiedliche Commandbuttons zum Starten des Druckprozesses verwende: "Drucken Thermo" und "Drucken A4". Da aber immer nur eines der beiden Druckermodelle angeschlossen ist, wäre es eleganter, wenn Access selbst erkennen würde, welcher Drucker angeschlossen ist, und dem entsprechend automatisch eine Auswahl des passenden Berichtsdesigns treffen würde.
Hat da vielleicht jemand einen Tipp für mich?
MfG Herb
Hi,
anbei ein paar Zeilen, um den Namen des Druckers zu ermitteln:
Beim Button ist hinterlegt:
Call Drucker_ermitteln("Name Deines Berichts")
Im Modul steht:
Option Compare Database
Option Explicit
Public Type str_DEVMODE
RGB As String * 94
End Type
Public Type type_DEVMODE
strDeviceName As String * 16
intSpecVersion As Integer
intDriverVersion As Integer
intSize As Integer
intDriverExtra As Integer
lngFields As Long
intOrientation As Integer
intPaperSize As Integer
intPaperLength As Integer
intPaperWidth As Integer
intScale As Integer
intCopies As Integer
intDefaultSource As Integer
intPrintQuality As Integer
intColor As Integer
intDuplex As Integer
intResolution As Integer
intTTOption As Integer
intCollate As Integer
strFormName As String * 16
lngPad As Long
lngBits As Long
lngPW As Long
lngPH As Long
lngDFI As Long
lngDFr As Long
End Type
Public Sub Drucker_ermitteln(strName As String)
Dim DevString As str_DEVMODE
Dim DM As type_DEVMODE
Dim strDevModeExtra As String
Dim rpt As Report
Dim PapierSchacht_aendern As Boolean
Dim prtDefault As Printer
Dim prtReportPrinter As Printer
Dim prtPrinter As Printer
Dim iPrtIndex As Integer
Dim DruckerName As String
' -------------------------------------------------------------------------------------------------------
iPrtIndex = 0
Set prtDefault = Application.Printer
Set prtPrinter = Application.Printers(iPrtIndex)
Application.Printer = prtPrinter
' Opens report in Design view.
DoCmd.OpenReport strName, acDesign, , , acHidden
Set prtReportPrinter = Reports(strName).Printer
Set rpt = Reports(strName)
With Reports(strName).Printer
DruckerName = .DeviceName
End With
MsgBox DruckerName
DoCmd.Close acReport, strName
Set rpt = Nothing
End Sub
Harald
Vorerst einmal herzlichen Dank! Werde voraussichtlich erst morgen Nachmittag Zeit haben, mir das anzuschauen.
Danke, Herb
@bahasu:
also ich habe Deinen Code jetzt ausprobiert, er funktioniert anstandslos, ist aber leider nicht ganz das, was ich benötige. Wie ich selbst feststellen musste, habe ich mich leider etwas missverständlich ausgedrückt.
Die Access-Applikation läuft normalerweise auf einer Touchscreen-Kasse mit 8cm breitem Thermodrucker (Stand Alone, ohne Netzwerk-Verbindung). Zur Auswertung benütze ich aber auch einen Desktop-PC im Büro mit Din A4-Office-Drucker(n). Je nachdem, auf welchem System die Access-Applikation läuft, soll mit dem Button "Drucken" der Bericht mit dem jeweils passenden Layout ausgewählt werden (die Berichte gibt es in doppelter Ausführung: einmal für den 8cm Thermodrucker, einmal für einen Din A4.Drucker), in etwa so:
If PrintDevice=Thermodrucker then
strReportName="rpt_XYZ_Thermo"
else
strReportName="rpt_XYZ_A4"
End if
DoCmd.OpenReport strReportName, acViewNormal
Es ist auch egal, ob der Drucker oder das PC-System selbst als Auswahlkriterium herangezogen wird (es gibt nur eine einzige Touchscreen-Kasse, und an die ist nur ein einziger Thermodrucker angeschlossen). Derzeit erfolgt die Berichtsauswahl mit zwei unterschiedlichen Buttons, für jede Berichtsversion einen. Das ist jedoch fehleranfällig.
MfG Herb
Hallo,
welche Betriebssysteme laufen denn auf den beiden "Systemen"?
Möglicherweise kann durch diesen Check der richtige Bericht ausgewählt werden.
Andere Möglichkeit wäre, in der Printers-Auflistung nach dem Namen des jeweiligen Druckers zu suchen und dadurch den entspr. Bericht zu öffnen.
@DF6GL:
Die Touchscreen-Kasse läuft unter Windows POSReady Embedded 2009 SP3, der Desktop unter Windows 7 Ultimate 32-bit SP1 mit LAN-Netzwerk-Drucker.
MfG Herb
Hallo,
nun gut, dann frag entweder das OS oder den Druckernamen ab und öffne den entspr. Bericht.
Ich habe das Brett vor meinem Kopf zersägt und frage einfach mit
Environ ("COMPUTERNAME")
den Computernamen ab. Das tut's auch.
besten Dank für die Hilfestellung, :)
mfg Herb