Newsgroup: it.comp.lang.visual-basic
Titolo: Ma Crystal Report cosa vuole per fare il fronte/retro?

Ciao ragazzi,
scusate l'insistenza, ma oramai è quesi 1 settimana che giro intorno a
questo problema...
Uso Crystal Report 8 e VB6 (SP6).
Ho l'esigenza di far stampare un report (A3) in fronte/retro, ma senza
che l'utente debba ogni volta modificare l'impostazione della
stampante nel pannello di controllo.
Ho impostato la proprietà "duplex" del report di crystal, ma non lo
considera.
Ho impostato la medesima proprietà per l'oggetto printer, e niente.
Ho addirittura trovato in giro l'API SetPrinter, che permette
orientamento, fronte/retro, etc. Quest ultima in ufficio da me
funziona ma dal cliente no!!
Qualcuno ha un'idea di dove potrei ancora andare a sbattere la
testa???
Grazie in anticipo!
_Luca_


Dici che da te funziona e dal cliente no.
Non potrebbe essere un problema di driver di stampante?
Le API sono una interfaccia software comune tra windows e l'hardware. 
Dove per software si intende un qualsiasi programma, ed per hardware le 
periferiche connesse al computer. Queste ultime per funzionare 
richiedono un apposito driver che traduca le istruzioni che il sistema 
operativo invia (tramite le API) alla periferica fisica.
Quindi il driver traduce i comandi nei formati accettati dalle 
periferiche installate. Una stampante PCL richiede istruzioni diverse da 
una Postscript. Per un programma sono la stessa cosa, e le API in gioco 
sono le stesse... Il driver traduce i comandi inviati dalle API nei 
comandi che fanno funzionare l'hardware.
Per semplicità nelle API i comandi ci sono tutti, e non viene fatto 
nessun controllo sulla coerenza di ciò che si invia. Quindi si può, 
senza generare errori, attivare il fronte retro anche su una stampante 
che non lo supporta.
Credo che se da te funziona e dal cliente no significa che il driver del 
cliente non supporta il fronte retro.
Che stampante usi?
Che stampante ha il cliente?
Hai provato ad aggiornare il driver dal cliente?
Ciao cia'
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 - Mostra testo tra virgolette -
Ciao,
le stampanti "incriminate" sono della nashuatec, precisamente una NRG
1805 D (fronte/retro b/n), che usa x forza un driver PCL (non ne
esistono altri) e una NRG DSC332 (fronte/retro colore), con un driver
RPCS.
La 1805 D non stampa in fronte retro in nessuna maniera, neppure se
installo il driver sul mio PC.
La DSC332, invece, non ha problemi, stampa in fronte/retro anche senza
dover fare strani giri con le API. Per questa è sufficiente impostare
la proprietà "duplex" dell'oggetto report (di CR) e tutto funziona
senza problemi...
Ricapitolando, comunque, la 1805 D (dove D sta per duplex) supporta
sicuramente il fronte/retro, dagli applicativi MS lo fa correttamente
(es word).
Sempre sul mio PC ho provato con driver di altre stampanti in fronte/
retro (sempre nashuatec) e (dalla coda di stampa) vedo che i documenti
vengono correttamente impostati in fronte/retro...
Il mio dubbio fondamentale è (anche al di là del fronte/retro): qual è
il metodo più "ortodosso" per gestire le stampe in crystal report
dando la possibilità all'utente di impostare le preferenze di stampa
(senza ovviamente passare dal pannello di controllo)?
Con:
CommonDialog1.Flags = cdlPDPrintSetup
CommonDialog1.PrinterDefault = True
CommonDialog1.ShowPrinter
finchè l'utente cambia solo le impostazioni di orientamento e formato
carta è tutto ok, ma se imposta il fronte/retro o altro (es qualità di
stampa) queste impostazioni non vengono mantenute. Mamma mia che
casino... sono io che mi perdo qualcosa oppure sono cose proprio così
complicate??
Grazie mille se mi darai ulteriori suggerimenti che possano
illuminarmi...


Una volta compresa la logica è semplice.
La D nel nome della stampante non indica nulla perché il full duplex 
potrebbe essere una opzione non montata: la sigla indica la 
'possibilità' di montare l'engine full duplex.
Non uso Crystal, quindi nello specifico  di CR non so cosa dire. Se non 
erro è un componente OLE accessibile direttamente dal codice via OCX. 
Quindi segue le impostazioni fatte nel programma che lo richiama.
Su come si accede ai parametri di una stampante qui:
http://tinyurl.com/2zl2nh
Su come si attiva una stampante in Windows vedi qui:
http://tinyurl.com/39cujq
Non so quanto ne sai; se sto dicendoti cose scontate dimmelo che cambio 
il tono.
Cia'
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 >> -> GbC|www.gbcweb.comwww.chiappori.com-Nascondi testo tra

No, non cambiare tono! Faccio report da anni ormai ma di stampanti (lo
confesso) ne so decisamente molto poco...!
Su come impostare la stampante predefinita nel sistema ci sono, nessun
problema (impostarla nel senso di "scegliere qual è ).
Ho capito che crystal report non mi considera le impostazioni
dell'oggetto "printer" in VB, ma che si legge le impostazioni
(formato, orientamento, fronte/retro) direttamente dalla stampante di
sistema.
La cosa che davvero mi servirebbe in pratica sarebbe lo stesso esempio
in VB che mi hai mandato, ma che permetta di modificare le propietà
della stampante, rendendo tali modifiche permanenti (ovvero visibili
anche dal pannello di controllo).
In tale modo potrei:
 - Modificare le proprietà della stampante di sistema (impostando il
maledetto fronte/retro)
 - Lanciare la mia stampa
 - Rimettere le proprietà com'erano in precedenza
Come ti dicevo in precedenza, ho trovato un esempio di come utilizzare
le API (utilizzando una struttura DEVMODE e richiamando OpenPrinter,
GetPrinter, CopyMemory, SetPrinter e ClosePrinter), che però funziona
solo su determinate stampanti (ovvero driver che mi sono montato sul
PC). Per esempio sulla "NRG D570 PCL" riesco ad impostare
correttamente l'orientamento e il fronte/retro (le modifiche che
faccio da codice si riflettono nel pannello di controllo), mentre per
le "NRG 1805 d PCL 6" e "NRG DSc332 RPCS" mi "prende" solo
l'orientamento ma del fronte/retro non ne vuole sapere (l'opzione nel
pannello di controllo rimane sempre su No o comunque dov'era prima).
Hai per caso un esempio di come settare in modo permanente le
impostazioni? Anche usando le API, ovvio, non è detto che l'esempio
che ho trovato io in giro fosse corretto al 100%...!
Ancora grazie mille!
_Luca_


Non mi sono mai posto il problema.
Quindi dici che CR puo' usare SOLO la stampante predefinita di sistema 
con le sue impostazioni? Stento a crederlo.
In tutti i casi.... Si dovrebbe provare, ma modificando le impostazioni 
di una stampante e lanciando la SendNotifyMessage la stampante indicata 
diventa la predefinita di Windows. Non vengono salvati anche i parametri 
impostati?
-> GbC|
www.gbcweb.com
www.chiappori.com
 

 con le sue impostazioni? Stento a crederlo.
Volendo posso forzare CR in modo che utilizzi un'altra stampante
(metodo SetPrinter), ma l'impostazione del fronte/retro la prende da
come è impostata la stampante nel pannello di controllo. Posso
impostare la proprietà "printerduplex" del report come mi pare, ma
tanto non me la considera. Le altre proprietà quali "orientation" e
"papersize" (anch'esse inizialmente ereditate dalla stampante) invece
se le modifico me le considera correttamente.
Dal tuo sito ho scaricato il progetto
samples_Print_StampaReport_PrnPrv.zip, che genera due pagine report.
Ebbene non riesco a capire!
Anche col tuo prg, una volta selezionate le proprietà della stampante
(cliccando sull'apposito tasto nell'anteprima), impostando fronte
retro = sì, quindi lanciando la stampa di tutte e 2 le pagine comunque
la stampa viene fatta senza fronte retro (lo vedo dalle proprietà del
documento nello spooler di windows).
Ho provato ad inserire
    Ret = SendNotifyMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0)
dopo la selezione della impostazione stampante, dopo il richiamo delle
mie API, ma nel pannello di controllo non cambia nulla!
Scusa per la confusione ma ce l'ho proprio in testa...
Grazie!

> [snip]
Prova a vedere se questo ti serve a qualcosa.
Qui funziona, nel senso che se cambio prop ad una stampante (apply) mi 
trovo la stampante come preimpostata e quei valori impostati.
http://www.gbcdepot.com/free/vb_esempi/samples_printer_printerSET.zip
-> GbC|
www.gbcweb.com
www.chiappori.com
 


Sei gentilissimo, ma anche con questo progetto non riesco ad impostare
nulla!
A parte che, qualunque sia la stampante che io scelgo dalla combo, mi
legge sempre quella predefinita (ma questo è il meno). Anche se cambio
qualcosa (ad es. l'orientamento), faccio "apply" e vado in "pannello
di controllo" --> "stampanti e fax" me la ritrovo identica a prima.
Tornando al problema principale, tu hai una vaghissima idea di che
cosa possa avere il driver di questa maledetta stampante? Praticamente
accetta il fronte/retro solo se lo si imposta MANUALMENTE dal pannello
di controllo oppure se si stampa da Word o altri applicativi
Microsoft...
La stampante è la 1805d, se hai 5 minuti da perdere puoi scaricarti il
driver dal sito 
www.nashuatec.it
 e provare a stampare un documento in
fronte/retro col tuo programma
"samples_Print_StampaReport_PrnPrv.zip". (io per capire se mi ha preso
il fronte retro guardo le proprietà del documento nello spooler, prima
che mi dica che è impossibile stampare).