Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Stampa etichette abbonati

    Un saluto a tutti voi.
    Ho un problema singolare con un programma, da me compilato, in VB6. In particolare si tratta di un gestionale utile alla stampa di alcuni nominativi di abbonati, con relativo numero di tessera progerssivo (001 - 002 - ...),su etichette. La particolarità di quanto succede è questo : quando parte il comando di stampa di, diciamo, 100 etichette, con un ciclo for next da 1 a 100, la stampante me ne stampa solo 10 ed in ordine sparso, cioè senza seguire l'ordine numerico progressivo (010 - 005 - 007 - 003 - ...) ed inoltre ne salta alcune.
    Tutto funzionava utilizzando Windows 98. Da quando gira su XP è andato tutto storto.
    Ho provato di tutto.
    Se qualcuno sa darmi una mano lo ringrazio anticipatamente.
    In questo momento non ho il codice a portata di mano ma se dovesse servire allo scopo fatemi sapere.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Senza il codice cosa si puo' dire?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Innanzitutto grazie per l'interessamento !
    Il programma è così strutturato (un pò obsoleto ! ) :
    ogni abbonato ha un file .dat, contrassegnato con il numero di tessera, (es. Tes001.dat) con all'interno tutti i dati necessari alla stampa ( Nome, Cognome, Tariffa etc.)
    Il ciclo di stampa è il seguente:

    For h = 1 To 500
    NomeFile = "c:\Abbonati\Abbonati\Tes" + Format(h, "000") + ".dat"
    temp = Dir$(NomeFile)
    If Len(temp) <> 0 Then
    a = a + 1
    End If
    Next h
    For s = 1 To a
    On Error GoTo gestione1
    NomeFile = "c:\Abbonati\Abbonati\Tes" + Format(s, "000") + ".dat"
    Open NomeFile For Input As #1
    Input #1, Annullato, tr, cognome, nome, Tariffa, Differenza
    Close #1
    If Annullato = "Si" Then GoTo fine50
    lblValidità = Validità
    lblTessera = "TESSERA N. : " + Tes + Format(s, "000")
    lblTratta = tr
    lblNoCo = nome + " " + cognome
    lblTariffa = "E. " + Format(Tariffa, "00.00")
    Open "Lpt1:" For Output As #1
    Print #1, lblValidità
    Print #1, lblTessera
    Print #1, lblTratta
    Print #1, lblNoCo
    Print #1, lblTariffa
    Print #1,
    Print #1,
    Print #1,
    Print #1,
    Close #1
    Next s

    Le etichette sono formalmente perfette, la stampa è distanziata in maniera corretta ma resta il grosso problema dell'inizio.
    Attendo un aiuto.
    Grazie ancora.

  4. #4
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Prova a commentare la riga
    codice:
    On Error GoTo gestione1
    e vedi Se, Dove e Qual'è l'errore che restituisce.

    Comunque, l'implementazione dei due cicli è sbagliata:
    - nel primo tu ottieni il NUMERO di file .DAT
    - nel secondo presupponi che il numero progressivo esista, il che non è sempre vero.
    Intendo dire, se hai 100 file DAT, il secondo ciclo pressupone che siano numerati da 001 a 100. Se così fosse (dubito che lo sia) allora a che scopo fare il primo ciclo?

    Se fai un debug/trace del codice sono sicuro che sarà così.

    Non capisco perchè fai due cicli quando basta un solo ciclo Do While (finchè ci sono file) ?
    - cerchi con Dir$() il nome del file ordinato per numero (incrementando ad ogni loop un contatore)
    - se esiste: lo apri e stampi
    - se non esiste: cerchi il prossimo

    Inoltre, non dovresti mai aprire un file usando #1 , ma si deve sempre richiedere il numero al sistema con la funzione FreeFile:

    codice:
    Dim fNum As Integer
    fNum = FreeFile
    Open ............ as #fNum

    infine, magari avrai i tuoi motivi (che a me però non è dato sapere) e mi chiedo perchè:
    1. leggi i valori
    2. li assegni a dei controlli Label
    3. li stampi prelevandoli dai Label

    quando sarebbe più logico e più veloce saltare il passo 2 (che a quanto mi par di capire non serve a niente se non come deposito momentaneo). Cioè fare così:

    codice:
    Open "Lpt1:" For Output As #1
    Print #1, Validità
    Print #1, "TESSERA N. : " + Tes + Format(s, "000")
    Print #1, tr
    Print #1, nome + " " + cognome
    Print #1, "E. " + Format(Tariffa, "00.00")
    Print #1,
    Print #1,
    Print #1,
    Print #1,
    Close #1
    Ciao

  5. #5
    Caro Gibra,
    in effetti avrebbe bisogno di una bella ripulitura, sono parecchie le cose che dovrebbero essere messe a posto e non ti nascondo che, prima del tuo intervento, avevo già cominciato.
    Del resto si tratta di uno dei miei primi progetti sul quale non sono più tornato sin quando non se n'è presenatat la necessità !

    Purtroppo però il problema persiste.
    Ho come la senzsazione che dipenda dallo spool di stampa. Quando faccio un debug del ciclo con f8, le tessere escono in ordine numerico così come dovrebbe essere; e come se mandando una istruzione alla volta, il sistema non avesse problemi.
    Quando ripeto la stessa operazione, invando con il ciclo 400 tessere da stampare, ne escono 10 e disordinate.

    Resto ancora in attesa di altri suggerimenti.

    Grazie molte !

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Probabilmente non tutti i file che ti aspetti esistono effettivamente nel disco ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    in effetti avrebbe bisogno di una bella ripulitura, sono parecchie le cose che dovrebbero essere messe a posto e non ti nascondo che, prima del tuo intervento, avevo già cominciato.
    Di solito non mi piace fornire il codice già pronto, ma vista la banalità dello stesso facciamo uno strappo...

    Ti consiglierei di crearti una routine per la stampa dell'etichetta, esempio:
    codice:
    Public Sub StampaEtichetta (Byval sNomeFile As String)
        ' codice che usi per la stampa
        ' Open, Print e quant'altro
    End Sub
    Poi quando devi avviare la stampa:

    codice:
        Dim sFile As String
        Dim sPath As String
        Dim i As Integer    
        sPath = "c:\Abbonati\Abbonati\"
        For i = 1 To 500
            sFile = sPath & "Tes" & Format(i, "000") & ".txt"
            Rem Se il file esiste, stampo l'etichetta
            If Dir$(sFile) <> "" Then
                StampaEtichetta sFile
            End If
        Next h
    Come vedi, è veramente banale.

    Ciao

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.