Newsgroup: it.comp.appl.access
Titolo: Report secondo filtro

Ho un problema relativo alla stampa di un record con le visualizzazioni
effettuate sulla maschera e sottomaschera.
Dalla maschera scelgo una ditta, con una casella combinata con il seguente
codice:
Sub combo_ric_nome_AfterUpdate()
    ' Trova il record corrispondente al controllo
    Me.RecordsetClone.FindFirst "[Matr] = " & Me![combo_ric_nome]
    Me.Bookmark = Me.RecordsetClone.Bookmark
End Sub
e nella sottomaschera filtro con il seguente codice 
Private Sub ANNO_AfterUpdate()
    Me.Filter = " [campagna] = '" & Me!ANNO & "'"
    Me.FilterOn = True
End Sub
A questo punto inserisco un pulsante di comando nella maschera per la
stampa
Private Sub Comando126_Click()
 DoCmd.OpenReport "R_PROD", , acNormal, Me.Filter
End Sub
e nel report il seguente passaggio
Private Sub Report_Open(Cancel As Integer)
    Me.RecordSource = Forms!M_ACQ!M_PROD.Form.RecordSource
    Me.Filter = Forms!M_ACQ!M_PROD.Form.Filter
    Me.FilterOn = True
End Sub
Quando do il comando di stampa si stampa tutto l'anno che ho scelto nel
sottoreport pero senza la selezione iniziale della maschera.
Cioe della ditta scelta tutti i nominativi relativi all'anno scelto nella
sottomaschera.
Dov'è che sbaglio?
Grazie chi mi potrà dare un'inidicazione
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 Grazie chi mi potrà dare un'inidicazione
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Innazitutto grazie x la risposta
Ho scelto questa via perche mi sembrava e forse anche perché è l'unica che
conosco e fino adesso mi è sempre stato utile usarla in questo modo.
Fino ad ora non mi era mai servito di stampare e pertanto non avevo avuto
il problema, anche perchè precedentemente usavo una maschera con due
selezioni prima la ditta e poi l'anno e andava bene e in stampa ok.
Poi sono passato con la sottomaschera x avere piu pagine di selezione
della ditta, tipo anagrafica e ulteriori sottomaschere avendo piu archivi
che lavorano con la tabella principale della ditta e eccomi qui x terra
per  la stampa del report
Grazie


 Grazie
Allora iniziamo col descrivere le tabelle:
- nomi campi/tipologia
- relazione tra loro e con quali campi
Poi passiamo ai report...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Allora i nomi campi della maschera principale sono
MATR_ACQ = alla matricola della ditta nel primo passaggio erroneamente
matr solo
Denominazione = denominazione della ditta 
Altri campi della maschera prinncipale sono indirizzo, comune, prov, cap
ecc
Nella sottomaschera i campi sono:
campagna = Anno che seleziono nella sottomaschera, una volta decisa la
ditta nella maschera principale, che mi seleziona tutti i nominativi che
hanno avuto rapporti in quel dato anno selezionato
Matr_az = alla matricola dei nominativi delle persone che hanno avuto
rapporti con la ditta, oltre alla denominazione che non ha nessun campo
filtrato
Matr_acquirente = alla matricola della ditta ma di un'altra tabella che
genera la sottomaschera
MATR_ACQ  e Matr_acquirente sono agganciate nei campi Master e secondario
x il funzinamento della maschere
Spero di avermi fatto capire in modo chiaro.
Grazie dell'attenzione 


 Grazie dell'attenzione
Non proprio; lascia stare le maschere e prova a descrivere la struttura 
delle tabelle in questo modo:
(es.)
[tabella Ditte]
- matricolaDitta, numerico/testo/o cosa?
- denominazione, testo
- indirizzo, testo
 etc. etc.
[tabella Rapporti]
- anno, numerico
- maricolaDitta, numerico/testo/o cosa?
- etc. etc.
(Relazioni)
[tabella Ditte].matricolaDitta 1 a molti con [tabella 
Rapporti].matricolaDitta
...
Ciao.
-- 
Sergio MAZZA 

 Ciao
Tabelle DITTE
Matr_acq         Numerico + chiave primaria
Denominazione    Testo
Indirizzo        Testo
Cap              Testo
Comune           Testo
Tabella Generale x sottomaschera
Matr_acquirente   Numerico
Denominazione acquirente Testo
Matr_az   Numerico
Campagna Testo
Grazie e ciao 


 Grazie e ciao
Allora; associa al report principale la tabella DITTE e al sottoreport la 
tabella Generale. Imposti, come campi secondari/master del sottoreport, 
Generale.Matr_acquirente e DITTE.Matr_acq.
Ora, con:
 DoCmd.OpenReport "nomeReport", , acPreview, Me.Filter
 prova a vedere se il report viene filtrato...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
In  confronto al filtro che usavo all'inizio che mi stampava tutti i
nominativi che avevano avuto rapporti in quel dato anno/campagna adesso mi
stampa tutti i nominativi agganciati alla ditta ma senza il filtro
dell'anno/campagna 
Pertanto un salto all'obbietivo che dovrebbe consegnarmi il report.
Ho fatto qualche prova ma o mi si azzarra la selezione restitueno nessun
nominativo o sono errori.
Grazie 


 Grazie
Proviamo in un altro modo.
Crea una query e inserisci entrambi le tabelle DITTE/Generale; collega i 
campi Generale.Matr_acquirente e DITTE.Matr_acq indicando come Join:
"includi tutti i record di DITTE e solo i record di Generale in cui i campi 
collegati sono uguali".
Indica i campi che ti servono per la visualizzazione del report; chiudi la 
query e salvala.
Crea il report senza sottoreport; con il menů: "Visualizza - Ordinamento e 
raggruppamento" indica il campo Matr_acquirente e in basso crea 
l'Intestazione del gruppo. Poi nella seconda riga inserisci il campo anno.
Nell'intestazione del gruppo Matr_acquirente ci inserisci campi provenienti 
da DITTE, nella sezione Corpo ci inserisci i campi provenienti da Generale.
Ora per passare il filtro al report l'istruzione diventa:
DoCmd.OpenReport "R_PROD", , acNormal, Me.Filter & " And " & 
Me!nomeSottomaschera.Form.Filter
Se ho capito bene che la casella combinata ANNO l'hai inserita nella 
sottomaschera...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Si la casella combinata x la selezione dell'Anno č nella sottomaschera
Comunque a fronte dell'istruzione che mi ha indicato e riporto sotto
Private Sub Comando126_Click()
 DoCmd.OpenReport "R_PROD", , acNormal, Me.Filter & "And" &
Me!M_PROD.Form.Filter
End Sub
mi da il seguente errore 
Errore di run-time '3075'
Errore di sintassi (operatore mancante) nell'espressione della query
'(And[campagna] = '1997)'.
Ho provato varie soluzioni ma niente
Grazie ciao


 Grazie ciao
Manca lo spazio che separa la And dal nome del campo:
DoCmd.OpenReport "R_PROD", , acNormal, Me.Filter & " And " & 
Me!M_PROD.Form.Filter
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Avevo gia' provato anche inserendo il segno dell'accento all'interno
dell'And ma la risposta resta sempre quella 
Grazie Ciao


 Grazie Ciao
Il messaggio di errore indica proprio un errore(!) di sintassi. 
L'istruzione:
... '(And[campagna] = '1997)'.
E' errata.
Perché ci sono delle parentesi tonde?
Come mai l'apostrofo è solo davanti al valore 1997 (es. '1997) invece di 
racchiuderlo (es. '1997')?
Se vai in debug e nella finestra immediata (CRTL-G) scrivi:
? Me.Filter (e batti invio)
dovresti leggere una riga del genere:
[nomeCampo] = 'valore'
poi se scrivi:
? Me!nomesottomaschera.Form.Filter (e batti invio)
dovresti leggere la stessa riga (con valori differenti):
[nomeCampo] = 'valore'
Prova quindi ad unirle:
? Me.Filter & " And " & Me!nomesottomaschera.Form.Filter (e batti invio)
dovresti ottenere:
[nomeCampo] = 'valore' And [nomeCampo] = 'valore'
Questa è l'istruzione che devi inviare all'apertura del report, come 
paramentro CondizioneWhere...
Ciao.
-- 
Sergio MAZZA 

 Ciao.
Be innanzitutto grazie x la pazienza dei ottimi consigli e grazie
Ho seguito i consigli x il debug e ho eliminato l'AND e l'istruzione è
quella sottoriporta e mi funziona
 DoCmd.OpenReport "R_PROD", , acNormal, Me.Filter & Me!M_PROD.Form.Filter
Ancora grazie 


 Ciao
Strano che funzioni...
Ciao.
-- 
Sergio MAZZA