Newsgroup: it.comp.appl.access
Titolo: [Da testare] Stampare un numero fisso di righe per pagina

Visto che avevo un po' di tempo e che la richiesta e' frequente, ci ho provato.
Credo di aver trovato una soluzione, ma mi piacerebbe farvela provare per
capire se ci sono problemi e per migliorarla.
Questa mia soluzione funziona se non ci sono raggruppamenti nel report, ma
naturalmente puo' essere adattata; per il momento vediamo questa.
Per provarla potete usare il DB Northwind.
Create un report basato sulla tabella Prodotti.
Nella sez. Intestazione report inserite un controllo testo:
Nome:    txtTRec
Origine: =Conteggio(*)
Visibile: No
Nel corpo inserite:
- due controlli testo legati ai campi NomeProdotto e PrezzoUnitario;
- un controllo line, subito sotto i controlli testo
- una interruzione di pagina (IntPagina), subito sotto la line
Copiate il seguente codice nel modulo del report ed visualizzatelo in
anteprima.
La costante intNR definisce il numero di righe che si vogliono stampare su ogni
pagina.
Spero di non aver dimenticato nulla.
Probabilmente il codice puo' essere migliorato, anzi spero che qualcuno ci
riesca :-)
----------------------------------------------
Dim intCR As Integer        'contatore di righe
Dim intCP As Integer        'contatore di pagine
Const intNR As Integer = 20 'numero di righe da stampare per pagina
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    'incrementa il contatore di righe
    intCR = intCR + 1
    If intCR = intNR Then
        'se il numero di riga coincide con il numero max di righe stampabili
        If intCR + intNR * (intCP - 1) > Me.txtTRec Then
            'se il numero di riga e' maggiore dell'ultimo record
            'rende invisibili i controlli testo nel corpo
            Me.NomeProdotto.Visible = False
            Me.PrezzoUnitario.Visible = False
        End If
        'imposta l'interruzione di pagina se non e' l'ultima pagina
        If intCP < Me.txtTRec / intNR Then Me.IntPagina.Visible = True
    ElseIf intCR + intNR * (intCP - 1) = Me.txtTRec Then
        'se il numero di riga coincide con l'ultimo record
        'evita lo spostamento sul record successivo
        Me.NextRecord = False
    ElseIf intCR + intNR * (intCP - 1) > Me.txtTRec Then
        'se il numero di riga e' maggiore dell'ultimo record
        'evita lo spostamento sul record successivo
        'e rende invisibili i controlli testo nel corpo
        Me.NextRecord = False
        Me.NomeProdotto.Visible = False
        Me.PrezzoUnitario.Visible = False
    End If
End Sub
Private Sub IntestazionePagina_Format(Cancel As Integer, FormatCount As
Integer)
    'azzera il contatore di righe
    intCR = 0
    'incrementa il contatore di pagine per gruppo
    intCP = intCP + 1
    'elimina l'interruzione di pagina
    Me.IntPagina.Visible = False
    'rende visibili i controlli testo nel corpo
    Me.NomeProdotto.Visible = True
    Me.PrezzoUnitario.Visible = True
End Sub
----------------------------------------------
-- 
Federico
--------------------------------------
Sito Comune di it.comp.appl.access
http://members.xoom.it/it_db_access
mailto:
it_db_...@usa.net
--------------------------------------
Tutte le richieste che mi arrivano
in privato, vengono cestinate.
--------------------------------------
Rimuovi paperino. per e-mail
--------------------------------------

E chi desidera di più??
E' perfetto e io non mi sogno di toccarlo...
mi dispiace io non modifico codice o chissacchè perchè secondo le mie
esigenze E' PERFETTO!!
Grazie mille anche di esistere!!!!!!
Arianna  --->>> ancora un grosso ringraziamento!!!!

 wrote in message
news:39BA22BC...@paperino.libero.it...



e' troppo :-)


 Andrea
Prova a controllare, in debug, il valore delle variabili; probabilmente
l'errore e' li.


 Visto che avevo un po' di tempo e che la richiesta e' frequente, ci ho
provato.
.....



Quello che mi sconcerta un po' e che vengono stampate 3 copie!
Non e' facile capire dove sta il problema.
Hai eliminato il sottoreport?
se si, qual'e' l'origine dati del report?
gestisci qualche altro evento, oltre a due della routine?


Ho eliminato la sottomaschera e gestito tutto nel report base.
Origine dati report 'Testata', 'Corpo', 'Calce' (tabelle)
con ID in comuni e relazionati: "includi tutti i record di 'testata' e solo
quelli di 'corpo/calce' in cui campi collegati sono uguali... BLA BLA
non gestisco alcun'altra funzione/procedura a parte quella che mi visualizza
i controlli
Non č che mi stampi 3 record come quanti sono quelli del corpo, cioč numero
di righe effettivamente esistenti?? nel corpo??
non č che si vada a 'toccare' altre creazioni di pagina invece/oltre che di
riga??
Un grosso By Arianna e grazie del tuo tempo


la cosa strana e' che in preview funziona (a me anche in stampa :-))
lo mandi in stampa da preview o da codice con:
docmd.openreport ...
se lo fai da codice, prova a mandarlo in stampa da preview


 Tecna - Arianna wrote:
...


 Perchè ??????????????????
Ok, la cosa e' diversa adesso.
Posta tutto il codice che c'e' nel modulo del report.
-- 
Federico


 Tecna - Arianna wrote:
..


 Perchè ??????????????????
Mi sono dimenticato di chiedereti se usi un qualche raggruppamento, nel report,
e se quindi e' visibile un'intestazione di gruppo.
-- 
Federico


No!
By

 By
Ci riprovo!
Nel report crea un raggruppamento sul campo ID.
Visualizza l'intestazione del gruppo, imposta la proprieta' (della sezione)
Interruzione pagina a 'Prima di sezione';
spostaci il controllo txtTRec (quello che conta i record)
Sostituisci tutto il codice, tranne la tua routine
'ControlliAssociatiVisibili'.
Ho eliminato i commenti, sono uguali ai precedenti.
Ho provato a stampare e ti assicuro che funziona.
Se hai problemi, sono disposto ad inviarti un file d'esempio.
Bye
----------------------------------------
Dim intCR As Integer
Dim intCP As Integer
Const intNR As Integer = 20
Private Sub Corpo_Format(Cancel As Integer, FormatCount As Integer)
    intCR = intCR + 1
    If intCR = intNR Then
        If intCR + intNR * intCP > Me.txtTRec Then ControlliAssociatiVisibili
False
        If intCP + 1 < Me.txtTRec / intNR Then Me.IntPagina.Visible = True
    ElseIf intCR + intNR * intCP = Me.txtTRec Then
        Me.NextRecord = False
    ElseIf intCR + intNR * intCP > Me.txtTRec Then
        Me.NextRecord = False
        ControlliAssociatiVisibili False
    End If
End Sub
Private Sub IntestazioneGruppo0_Format(Cancel As Integer, FormatCount As
Integer)
    intCP = 0
End Sub
Private Sub IntestazionePagina_Format(Cancel As Integer, FormatCount As
Integer)
    intCR = 0
    intCP = intCP + 1
    Me.IntPagina.Visible = False
    ControlliAssociatiVisibili True
End Sub
----------------------------------------


 wrote in message
news:39BA22BC...@paperino.libero.it...


 invece le righe sono 9. Dove sto sbagliando?
Ho riscontrato anch'io dei problemi in fase di stampa.
Di consiglio di leggere il mio ultimo msg , in risposta ad Arianna.


 ha scritto nel messaggio
news:39BD0CAF...@paperino.libero.it...
...


 By Arianna
non so piu' cosa dirti :-)
ti ho inviato un piccolo mdb
fammi sapere
-- 


Tutto OK e risolti tutti i problemi ma ci saranno migliori ringraziamenti.
By Arianna

 By Arianna
resto in attesa :-)
