Page 1 of 2

Ripetizione stampa con Harbour

PostPosted: Mon Jan 30, 2006 5:50 pm
by Piscicelli Zingoni
Salve, mi e' capitato che un cliente utilizzando un programma con fw (16) funziona bene (stampando una fattura)
Lo stesso programma compilato con harbour funziona tutto bene ad eccezione che nella stampa delle fatture (anteprima) ripresenta sempre la precedente fattura stampata....come se non cancellasse i wmf all'uscita della stampa!
Possibile ?
Mai capitato a qualcuno ?
Dato che il cliente e' molto distante non posso verificarlo di persona ma ci devo credere. Io pero' non riesco a simulare tale problema sul mio PC.

Avevo gia' postato questo problema ma non sono riuscito a risolverlo.

Si accetta qualunque consiglio.
Piscicelli/Zingoni

PostPosted: Tue Jan 31, 2006 6:38 pm
by Marco Turco
Questo problema si verifica generalmente a causa di possibili bug di programmazione (magari in talune circostanze non "chiudi" la pagina oppure apri più volte una nuova pagina o ancora non chiudi la stampa) oppure a causa di problemi di stampa (finisce la carta o si verifica un errore irreversibile di stampa). In questi casi il file wmf può rimanere aperto e quando crei una nuova stampa, poiché il nome del file wmf viene generato con una numerazione progressiva, se il file già esiste ed è aperto, non potrà essere sovrascritto dalla nuova stampa ed è per questo motivo che ti appare sempre la pagina stampata in precedenza.

Io ho risolto definitivamente questo problema modificando la classe nella quale viene generato il nome wmf (non ricordo se printer.prg o tmetafil.prg).

1) Faccio generare i file wmf in una cartella TMP che ho creato nella mia applicazione. Questo perché Antonio crea i file wmf nella cartella dei file temporanei di Windows che però in caso di accesso al sistema diverso da Administrator può creare alcuni problemi nella creazione dei file.

2) Quando creo una stampa cancello prima tutti i wmf della cartella TMP e comunque quando genero il nome, verifico prima che non sia già presente un file con lo stesso nome altrimenti passo alla numerazione successiva.

Saluti

Marco

PostPosted: Wed Feb 01, 2006 12:45 pm
by Piscicelli Zingoni
Grande idea, ci provero' anche io.
Grazie Mille

PostPosted: Fri Feb 10, 2006 10:12 am
by Piscicelli Zingoni
Salve,
ho creato una funzione che cancella i uscita i WMF nella temp dir.
Ho notato che qualche volta non riesco a cancellare il file poiche' "utilizzato da un altro processo".
Ecco il motivo della ripetizione della stampa.

Qualche idea?
Grazie

PostPosted: Fri Feb 10, 2006 10:16 am
by Enrico Maria Giordano
Significa che il file che cerchi di cancellare è ancora in uso. Identificalo e controlla, chiudendo o terminando i vari programmi in esecuzione, chi è che lo sta utilizzando.

EMG

PostPosted: Fri Feb 10, 2006 10:18 am
by Piscicelli Zingoni
Sono in monoutente e sto visualizzando la pagina 3 dell'anteprima e quella che non risco a cancellare e' la pagina 1 !!

PostPosted: Fri Feb 10, 2006 10:26 am
by Enrico Maria Giordano
Piscicelli Zingoni wrote:Sono in monoutente e sto visualizzando la pagina 3 dell'anteprima e quella che non risco a cancellare e' la pagina 1 !!


Non puoi cancellare i files dell'anteprima che stai attualmente visualizzando.

EMG

PostPosted: Fri Feb 10, 2006 10:44 am
by Silvio
Non puoi dire direttamente a Linares di correggere questo problema ?
Certo che l'anteprima di stampa non funziona correttamente e privo di molte cose rispetto alle altre anteprime di stampa degli altri linguaggi
Per esempio a scuola abbiamo un programma del MIUR ( ministero) lui usa Powerbuilder e li c'è un'anteprima molto accattivante....
> Conversione in formati grafici e testo ( txt,pdf,doc)
> righello
>visualizzazione come in winword ( 10,25,50,75,100,200,400 per quanto riguarda lo zoom e poi in 2/4/6/8/10 x X pagine per la visualizzazione in un unica finestra di tutte le pagine del documento
> possibilità di inserire un image ..noi usiamo questo per inserire le firme scannerizzate in fondo al documento
> le stampe sono parametrizzabile dall'utente infatti è possibile creare un nuovo modello di stampa il programma elenca tutti i campi possbili e te li fa inserire nel documento ....

Certo quando arriveremo a questi livelli potremmo dire che il rpreview di stampa funziona correttamente .

PostPosted: Fri Feb 10, 2006 10:47 am
by Enrico Maria Giordano
Silvio wrote:Non puoi dire direttamente a Linares di correggere questo problema ?


Che io sappia non è un problema che dipende dalle Fivewin (personalmente non l'ho mai visto). Un esempio che lo dimostri aiuterebbe a capirne la natura.

EMG

PostPosted: Fri Feb 10, 2006 12:55 pm
by Silvio
si ok
ancora con sti esempi
io ti voglio far capire una cosa : la situazione mi è capitata tempo fa
una procedura non funzionava con i footers di wbrowse di hernan
ho fatto un programmino di test semplice questo funzionava
mi sono impazzito una settimana per trovare l'errore poi ho scoperto che avevano cambiato il nome delle variabili

tu mi dirai ma come faccio io a provare il bug con un semplice test
bene ma non sempre il bug viene fuori

quello della stampa viene fuori per chi ha applicazioni che continuamente fa l'anteprima e la stampa a me è capitata tante volte e per farlo funzionare ho dovuto cancellare manualmente la cartella temp e ridossare la colpa "a parole" al povero SO e il programma dopo ha funzionato
ma sapevo benissimo che era un bug di fw.

Prima di abbellire le classi con tante estetiche che non servono poi a niente come le ultime modifiche che ha fatto linares per il rpreview dei bottoni secondo me servivano tante cose utili come la correzzione di questo bug .

Una correzzione utile per esempio è stata la conversione da wmf a emf
gli faccio un applauso per questo...

non so se rendo l'idea

PostPosted: Fri Feb 10, 2006 1:02 pm
by Enrico Maria Giordano
Silvio wrote:quello della stampa viene fuori per chi ha applicazioni che continuamente fa l'anteprima e la stampa a me è capitata tante volte e per farlo funzionare ho dovuto cancellare manualmente la cartella temp e ridossare la colpa "a parole" al povero SO e il programma dopo ha funzionato ma sapevo benissimo che era un bug di fw.


A me non è mai capitato, non so che dirti.

EMG

PostPosted: Fri Feb 10, 2006 2:12 pm
by Piscicelli Zingoni
La mia procedura di cancellazione dei files temporanei e' stata inserita nell'action dell'uscita del rpreview.prg

Prima di uscire cancello i wmf temporanei e con fw16 funziona sempre (anche utilizzando la funzione fattrib() per rilasciare il file qualore non fosse cancellabile.)
Anche con harbur funziona quasi sempre ad eccezione di qualche volta che non capisco da cosa dipenda.
Provando a mano a cancellare tale file (con l'exe ancora running) mi dice che il file e' aperto da un altro processo. Sicuramente, almeno penso, dall'exe di harbour (se i files da cancellare sono 30, 29 li cancella e 1 no)

Non mi rimane in questo caso di dare un messaggio (di mascheramento) e dire all'utente: PROBLEMA DI WINDOWS CON I FIELS TEMPORANEI, SI PREGA DI USCIRE E RIENTRARE NEL PROGRAMMA.
Solo cosi' poi funziona e questo, penso, e' la dimostrazione che c'e' qualche piccolo bug da qualche parte.

Purtroppo il problema non e' ripetibile o almeno dopo 3000 lanci e anteprime non so spiegarmi quando e come succede.

Mistero del s/w!

Ciao

PostPosted: Fri Feb 10, 2006 3:32 pm
by Enrico Maria Giordano
Prova a cancellare tutti i files EMF prima invece che dopo.

EMG

PostPosted: Fri Feb 10, 2006 10:31 pm
by Marco Turco
x Piscitelli:

per risolvere il problema di una eventuale pagina rimasta aperta che ti impedisce di visualizzare correttamente la successiva anteprima, sostituisci il metodo startpage con questo allegato.

Si tratta in pratica di verificare se esiste già un file con un certo nome prima di utilizzarlo per il metafile. Se esiste ne utilizzo un altro.

Ciao

Marco

METHOD _StartPage() CLASS TPrinter

local lSetFixed,i,cWmfFileName

if ::hDC == 0
return nil
endif

lSetFixed := Set( _SET_FIXED, .F. )

if !::lMeta .and. ! ::lStarted
::lStarted := .T.
StartDoc( ::hDC, ::cDocument )
endif

::nPage++


if ::lMeta
for i:=1 to 9999
cWmfFileName:=::cDir + "\tmp" + PadL( i, 4, "0" ) + ".wmf"
if .not. file(cWmfFileName)
exit
endif
next

AAdd( ::aMeta, cWmfFileName)
::hDCOut := CreateMetaFile( ATail( ::aMeta ) )
else
StartPage( ::hDC )
endif

Set( _SET_FIXED, lSetFixed )

return nil

PostPosted: Sat Feb 11, 2006 11:51 am
by Piscicelli Zingoni
Se li cancello prima potrebbe succedere che il cliente ha lanciato 2 stampe diverse da 2 programmi fwin32 diversi e quindi gli cancellerei le anteprime.
Forse e' meglio modificare il metodo suggerito.

Grazie comunque