Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

rilevare stampante fronte retro da codice

88 views
Skip to first unread message

Cesare Briglia

unread,
Feb 3, 2020, 6:13:03 AM2/3/20
to
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

Bruno Campanini

unread,
Feb 3, 2020, 11:42:20 AM2/3/20
to
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

Cesare Briglia

unread,
Feb 3, 2020, 4:37:53 PM2/3/20
to
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

@Alex

unread,
Feb 3, 2020, 5:56:52 PM2/3/20
to
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

Bruno Campanini

unread,
Feb 4, 2020, 5:38:25 AM2/4/20
to
Cesare Briglia laid this down on his screen :
Ma guarda... che stranezza!
Come potrebbe fare una procedura per vedere se una stampante è
progettata per Duplex o no?
Deo grazia se riesce a definire come il sistema la vede settata!

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...
Convincerla... Auguri!

Bruno

Cesare Briglia

unread,
Feb 4, 2020, 9:28:31 AM2/4/20
to
Il giorno lunedì 3 febbraio 2020 23:56:52 UTC+1, @Alex ha scritto:
> 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...?

(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

@Alex

unread,
Feb 4, 2020, 10:17:25 AM2/4/20
to
....
> (essendo che non sono un programmatore proprio tra i più esperti e
> regolarmente tartasso di domande quella povera vittima di Marco Pizzamiglio,

Salutami Marco, sono 15 anni forse che non si sente... un peccato ma rimane sempre uno degli Esperti anziani..., speriamo sia ingrassato un po...

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

No, da VBA non restituirebbe errore...
Imposti la proprietà Duplex, poi la rileggi e confronti i 2 Valori
se lo ha mantenuto..., ma è possibile non funzioni ugualmente.


> 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

Cesare Briglia

unread,
Feb 11, 2020, 6:43:03 AM2/11/20
to
... 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

@Alex

unread,
Feb 11, 2020, 7:03:31 AM2/11/20
to
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

Cesare Briglia

unread,
Feb 11, 2020, 7:14:33 AM2/11/20
to
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

@Alex

unread,
Feb 11, 2020, 1:34:38 PM2/11/20
to
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

RobertoA

unread,
Feb 12, 2020, 1:33:27 PM2/12/20
to
Molto interessante l'articolo al terzo link
Non riesco a scaricare gli esempi del codice proposto
Qualcuno di voi ci riesce?

Cesare Briglia

unread,
Feb 12, 2020, 2:13:40 PM2/12/20
to
... 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
0 new messages