Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: herb3472 am Juni 10, 2013, 09:37:49

Titel: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: herb3472 am Juni 10, 2013, 09:37:49
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
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: bahasu am Juni 10, 2013, 11:45:38
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
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: herb3472 am Juni 10, 2013, 20:08:33
Vorerst einmal herzlichen Dank! Werde voraussichtlich erst morgen Nachmittag Zeit haben, mir das anzuschauen.

Danke, Herb
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: herb3472 am Juni 11, 2013, 16:33:21
@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
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: DF6GL am Juni 11, 2013, 16:42:52
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.
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: herb3472 am Juni 11, 2013, 21:07:59
@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
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: DF6GL am Juni 11, 2013, 21:21:05
Hallo,

nun gut, dann frag entweder das OS oder den Druckernamen ab und öffne den entspr. Bericht.
Titel: Re: Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker
Beitrag von: herb3472 am Juni 11, 2013, 21:58:01
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