Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Berichtsauswahl in Abhängigkeit von angeschlossenem Drucker

Begonnen von herb3472, Juni 10, 2013, 09:37:49

⏪ vorheriges - nächstes ⏩

herb3472

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

bahasu

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
Servus

herb3472

Vorerst einmal herzlichen Dank! Werde voraussichtlich erst morgen Nachmittag Zeit haben, mir das anzuschauen.

Danke, Herb

herb3472

@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

DF6GL

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.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

herb3472

#5
@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

DF6GL

Hallo,

nun gut, dann frag entweder das OS oder den Druckernamen ab und öffne den entspr. Bericht.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

herb3472

#7
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