Newsgroup: it.comp.appl.access
Titolo: rilevare stampante fronte retro da codice

Un mio programma lavora su una rete  costituita da due pc (lo so una retina..). Usando l'oggetto printer stampa i report impostando il fronte retro  da codice. 
Il problema è sorto quando hanno cambiato la stampante ad un pc.  Quest'ultima è una stampante che supporta il fronte retro Manuale per cui si innesca un meccanismo perverso ( tira fuori il foglio, giralo, ricaricalo a faccia in giù, azzecca il verso giusto, ecc) che il più delle volte culmina con l'abbandono della stampa stessa e l'uso dell'altro pc...
 
domanda : è possibile verificare da codice se la stampante supporta il fronte retro? Penso di annullare caso contrario il comando e di far stampare le pagine  in maniera solo fronte..
 
Grazie dell'aiuto
BC

Cesare Briglia brought next idea :

========================================================
Private Sub PrintList_Click()
Dim i, Msg As String, k As Integer, D(1 To 3) As String
 
D(1) = "acPRDPSimplex"
D(2) = "acPRDPHorizontal"
D(3) = "acPRDPVertical"
 
If Printers.Count > 0 Then
    For Each i In Printers
        With i
            Msg = k & " - Device name:" & vbTab & .DeviceName & vbCrLf 
_
            & "Driver name:" & vbTab & .DriverName & vbCrLf _
            & "Port:       " & vbTab & vbTab & .Port & vbCrLf & vbCrLf 
_
            & "Duplex:     " & vbTab & D(i.Duplex)
        End With
        k = k + 1
        MsgBox Msg
    Next
Else
    MsgBox "No Printers installed"
End If
 
MsgBox "Default Printer = " & Application.Printer.DeviceName & vbCrLf _
       & "Duplex = " & D(Application.Printer.Duplex)
 
End Sub
========================================================
 
Bruno


  funziona solo in parte, perchè mi dice che la stampante che  ho (fronte retro) non fa il fronte retro (perchè è attualmente settata a solo fronte ...)
Duplex:         acPRDPSimplex
4 - Device name:    EPSON WF-3620 Series
Driver name:    winspool
Port:               USB001
 
Duplex:         acPRDPSimplex
5 - Device name:    Epson EPL-6200
Driver name:    winspool
Port:               USB002
 
queste sono le due stampanti che ho... la prima NON stampa il f/R la seconda sì.
 
nella mia intenzione dovrei sapere se la stampante fosse capace di stampare il fronte retro, perchè poi da programma posso convincerla...
 
grazie  
BC

Ci sono 2 opzioni, una semplice ma non so se funziona ed una abbastanza complicata.
 
SEMPLICE
Hai fatto una prova semplice a forzare il Duplex... e rileggerlo...?
Questo test è da fare principalmente sulla stampante che NON SUPPORTA il duplex... per farti capire se questo può essere un modo per discriminare...
 
In NET c'è la proprietà Canduplex ma non in VBA.
 
Ho proposto questa cosa ma non ho provato e non so se realmente la scrittura passa al Driver prima della fase di stampa, che poi è quella in cui il driver stesso riceve i settings...
 
Tuttavia essendo una prova che richiede 1 minuto vale la pena farla.
 
COMPLESSA
Si possono usare anche le Api per fare questo test, in questo caso il tentativo non supportato di impostare il Duplex costituirebbe errore, intercettabile quindi diagnostico.
 
http://www.lessanvaezi.com/changing-printer-settings-using-the-windows-api/
 
 
https://www.office-forums.com/threads/vba-duplex-access-denied-can-only-read-settings-vb6-can-set-duplex.2167203/
 
 
http://toddmcdermid.blogspot.com/2009/02/microsoft-access-2003-and-printer.html?m=1
 
 
Il secondo ed il tetzo in particolare offrono uno spunto già fatto interrogando DeviceCapabilities... ma tutto da provare.
 
Sono tuttavia parti di codice complesso da adattare al 64Bit... che tuttavia consiglio solo a chi li sa maneggiare bene.
 
Nel caso perché non leggi il nome della stampante che sai per certo non supportarlo ed eventualmente generi un messaggio...?
Ovviamente non è una gran soluzione... ma...
 
@Alex

 il fronte retro, perchè poi da programma posso convincerla...
Convincerla... Auguri!
 
Bruno

 Hai fatto una prova semplice a forzare il Duplex... e rileggerlo...?
 
(essendo che non sono un programmatore proprio tra i più esperti e regolarmente tartasso di domande quella povera vittima di Marco Pizzamiglio, spesso non comprendo appieno quello che mi si dice in linguaggio informatico... ). Vuoi dire imposto il valore duplex dell'oggetto printer e vedo se mi restituisce errore? No purtroppo non lo fa...
continuo nella mia ricerca... Delle API buio fitto... ho trovato tanta roba ma non so come utilizzarla...
grazie


 
 
 
Prendi in considerazione la proposta in fondo... ovvero di memorizzare da qualche parte le caratteristiche delle SOLE stampanti NON PREDISPOSTE...
 
@Alex


... dopo aver cogitato e pensato a lungo, dopo aver considerato di divenire APIcultore, ho risolto in maniera abbastanza semplice. Ho creato una tabella con un solo campo (F_R) del tipo sì/no. Questo campo l'ho messo in una checkbox nella form dove setto i vari parametri del programma (intestazione dei report, nome del reparto, ecc). Quando stampo, decido in base al parametro sì/no se stamapre fronte /retro o no. Solo una domanda : la tabellina se la porta appresso il FE che sta in QUEL computer. Vi sembra una soluzione adeguata o ne proponete un altra?
 
grazie dell'attenzione
BC


La risposta in realtà dipende da alcune cose:
1) Questa opzione è un Personal Setting...? Se la risposta è NO, va nel server
2) Hai gestione Utenti...? Se SI, allora la tabellina va nel SERVER altrimenti uno non si porta dietro i propri SETTINGS.
 
Nel Client si lasciano solo i TEMP_SETTINGS altrimenti la gestione dei PERSONAL_SETTINGS diventa vincolata al PC di utilizzo... e di solito in un sistema di Rete, un Utente deve poter accedere come Tale da qualsiasi postazione...
 
Ora non conosco la tua struttura e configurazione ma considera queste cose eventualmente.
 
@Alex


il parametro appartiene SOLO a quel FE, cioè è vincolato a quella macchina e a quella stampante che fa o non fa il F/retro. Lo lascio nel FE o lo sposto al di fuori sempre nella stessa macchina?
Saluti
 
BC

Secondo me devi rendere il FE indipendente altrimenti dovrai sviluppare e mantenere un FE speciale per quel PC... 
Ovviamente è una tua scelta io non la farei, scriverei 1 riga di codice, se serve, in più ma eviterei di dover mantenere 2 sviluppi.
 
Per assurdo, come ti dicevo fin dall'inizio,ti basterebbe controllare il nome della stampante se quello è il problema, salvandola in una tabella del FE "TblCriticalPrinters", va da se che quel FE in qualsiasi altra postazione non avendo una stampante nell'elenco delle stampanti "TblCriticalPrinters"... skipperebbe.
 
Vedi tu puoi fare come ritieni sia più semplice, io pa guardo sempre come minor lavoro manutentivo e maggior flessibilità.
 
@Alex


Molto interessante l'articolo al terzo link
Non riesco a scaricare gli esempi del codice proposto
Qualcuno di voi ci riesce?
 


... come al solito non mi sono spiegato bene. 
Non duplico nessun FE. Solamente setto una variabile solo su ogni FE. Se la chkbox è true viene eseguito il codice per il fronte retro, se è false  viene eseguito il codice per  la pagina singola (le caratteristiche della stampante le so prima e le setto una sola volta). Il mio dilemma era se creare un piccolo BE aggiuntivo su di ogni macchina o lasciare la tbl in questione dentro l'FE  visto che specifica caratteristiche di quel FE. O se esistono altri sistemi per memorizzare variabili al di fuori del file  di access..  
 
Grazie 
 
BC