Newsgroup: it.comp.appl.access
Titolo: report

In un report devo, a codice, eseguire un salto a pagina nuova "forzato"
quando raggiungo un certo numero di righe. Come faccio a determinare il
numero di righe stampate e da stampare e come esegui il salto pagina.
Grazie, ciao.
Sent via Deja.com 
http://www.deja.com/
Before you buy.

Salve NG.
Non sono un programmatore, ma per diletto da un po' di tempo ho inizato ha
creare un piccolo DB. per la gestione delle ore e commesse che, attualmente
utilizzo in ufficio ma che sarei felice di migliorare.
Ho una casella combinata che mi elenca l'insieme delle commesse create per
cliente. La casella serve per la stampa di un report: "Commesse per
Cliente".
L'origine del report è una query dal nome omonimo.
Vorrei fare questo:
Utilizzare una casella di riepilogo a selezione multipla per poter
selezionare più commesse e quindi stampare più di 1 report per volta.
Togliere la query e scrivere direttamente un SQL, all'interno del report o
dove...
Sto leggendo qualche libro ma non riesco nell'impresa.
gradirei qualsiasi forma di aiuto (non mi umiliate Vi prego...)
Alessandro.


oops un ononimo.
Di soluzioni ce ne sono molte 
come base per tutte ti do questa funzione che vuole come parametro una
casella combinata e ti restituisce i valori selezionati, in forma di 
stringa adatta per essere utilizzata con la clausola IN
Function crealista(myct As Control) As String
    Dim mystr As String, myvar As Variant
    mystr = "("
    For Each myvar In myct.ItemsSelected
        mystr = mystr & "'" & myct.ItemData(myvar) & "' ,"
    Next myvar
    crealista = Left(mystr, Len(mystr) - 2) & ")"
End Function
Tale funzione va messa in un modulo generale.
Va chiamata quindi col nome della tua casella combinata, se per esempio la 
chiami dalla maschera stessa che contiene la casella combinata:
dim lista as string
lista=crealista(me!nomeCasellaCombinata)
Ora il metodo piu' elegante e' di costruirsi l'espressione sql al volo
e assegnare tale espressione nell'origine record del report,
la piu' semplice consiste nel filtrare il report.
Per filtrare il report non mettere nessun criterio nel campo commessa
e per aprirlo usa:
DoCmd.OpenReport "TUOREPORT", , , "[COMMESSA] IN " & lista
Naturalmente devi predisporre il report di modo che ad ogni commessa inizi 
da una nuova pagina, in pratica devi predisorre dei raggruppamenti sul 
campo commessa.
Per crearti l'istruzione sql al volo idem:
strsql="SELECT..... WHERE COMMESSA IN  " & lista
e assegnare tale espressione all'origine record del report.
L'espressione sql te la puoi creare al volo nella maschera che apre il 
report, in questo caso la variabile strsql deve essere public a livello di 
modulo di classe della maschera, e sull'evento apertura del report
inserici la funzione:
Private Sub Report_Open(Cancel As Integer)
Me.RecordSource = Forms!tuaMashera.strsql
End Sub
(a dire il vero invece di usare variabili public sarebbe meglio creare una  
proprieta nella maschera)
Altrimenti tutto puo' essere effettuato al livello di report, cioč 
sull'evento apertura del report:
Private Sub Report_Open(Cancel As Integer)
    	dim strsql as string
    	dim lista as string
    	lista=crealista(forms!tuaform!tuacasellaCombinata)
    	strsql="SELECT..... WHERE COMMESSA IN  " & lista
    	Me.RecordSource = strsql
End Sub
Puoi aggiungere il codice  che controlla che la maschera che apre il report 
sia aperta etc.
Sandro

 Altrimenti tutto puo' essere effettuato al livello di report, cioè



Ciao,
Hai fatto un po' di confusione, se usi il filtro (primo metodo), 
sull'evento apertura report non devi metterci niente.
nel docmd mancano inoltre due spazi, dopo [IDCOMMESSA] e dopo IN
riepilogando:
metodo del filtro:
modulo della maschera:
Private Sub ComandoTuo_Click()
 dim lista as string
 If me!Combinata05.ItemsSelected.Count >= 1 Then
  lista = crealista(me!Combinata05)
  DoCmd.OpenReport "Commesse per cliente", , , "[IDCOMMESSA] IN " & lista
 else
  MSGBOX "SELEZIONARE ALMENO UNA VOCE"
 END IF
end sub
nel modulo del report non deve esserci niente, ed il report deve essere 
legato alla query dove nel campo idcommessa non deve esserci alcun 
criterio.
metodo dell'istruzione sql:
modulo della maschera:
Private Sub ComandoTuo_Click()
 If me!Combinata05.ItemsSelected.Count >= 1 Then
  DoCmd.OpenReport "Commesse per cliente"
 else
  MSGBOX "SELEZIONARE ALMENO UNA VOCE"
 END IF
end sub
modulo del report:
Private Sub Report_Open(Cancel As Integer)
 Dim strSQL As String
 Dim lista As String
 lista = crealista(Forms!StampaCommesse!Combinata05)
 strSQL = "SELECT..... WHERE..... And IDCOMMESSA IN " & lista
 Me.RecordSource = strSQL
end sub
In entrambi i metodi la funzione crealista la puoi mettere in un modulo 
generale.
Attenzione se il campo idcommessa deve essere quello della colonna legata 
dell'elenco, inoltre se questo e' numerico la funzione che ti ho dato non 
va bene, puoi usare questa invece:
Function crealista(myct As Control) As String
    Dim mystr As String, myvar As Variant
    mystr = "("
    For Each myvar In myct.ItemsSelected
        mystr = mystr & myct.ItemData(myvar) & " ,"
    Next myvar
    crealista = Left(mystr, Len(mystr) - 2) & ")"
End Function
nel caso in cui idcommessa e' numerico ma si trova nella colonna 
nrcolonna (le colonne partono da zero) usa questa, mettendo al posto di 
nrcolonna il numero di colonna in cui si trova idcommessa:
Function crealista(myct As Control) As String
    Dim mystr As String, myvar As Variant
    mystr = "("
    For Each myvar In myct.ItemsSelected
        mystr = mystr & myct.Column(nrcolonna, myvar) & ", "
    Next myvar
    crealista2 = Left(mystr, Len(mystr) - 2) & ")"
End Function
Attenzione agli spazi.
Ciao e fammi sapere
Sandro

Per Sando,
Non ci posso credere funziona!
Forse non sarà una cosa eccezionale ma per me lo è.
Le spiegazioni che mi hai dato sono esemplari e non so come ringraziarti per
la tua disponibilità e chiarezza.
Ho usato la seconda Function con la colonna associata, ed inoltre nel modulo
del report, oltre ad aver tolto la routine filtro Docmd.OpenReport....., ho
dovuto correggere listruzione SQL che , presentava erroi di sintassi
(parentesi di troppo,virgole e spazi non corretti), nonchè il riferimento
all'origine dell'IDCOMMESSA ovvero COMMESSE.IDCOMMESSA IN " & lista...
Adesso sistemo il report dimodochè ogni commessa inizi da una pagina nuova.
Spero che se avrò bisogno portai rispondermi ancora "se non scasso
troppo..."
Penso seriamente di approfondire lo studio di Access, anche se la vedo dura.
Spero in futuro di contribuire anch'io al NG x il momento mi devo
accontentare di consultarlo.
Garzie ancora:
Alessandro.