Stampa report da maschera continua di un solo record

di il
17 risposte

Stampa report da maschera continua di un solo record

Salve ho realizzato un datat base gestionale per il mio Ufficio, sto avendo difficolta nel stampare un report di una maschera continua, però di un solo record:

Mi spiego meglio: ho 2 tabelle “personale” e “malattie”, in relazione tra loro ( personale uno a molti con malattie), quindi quando apro la maschera malattie mi esce in altro in nome corretto del dipendente in questione , e poi tutte assenze fatte tramite una sottomaschera multipla;

Affianco ad ogni periodo vorrei che mi stampi un report del solo periodo selezionato e non di tutti.

Ho Fatto una query mettendo come criteri : [forms]![H_malattie]![ID_Malattie].  ne campo ID Malattie della tabella malattie ---- ( H_malattie è la maschera in questione che mi visualizza tutti i periodi)

Pero quando dalla maschera apro il periodo mi esce : Immettere valore per?

Se metto il numero ID (a manoO corrispondente  visualizzo correttamente il report

Come posso risolvere?

Grazie

17 Risposte

  • Re: Stampa report da maschera continua di un solo record

    Ciao,

    Se la query rappresenta l'origine dati del report, non metterei nessun criterio in essa e imposterei il filtro nel report in fase di richiamo.

    Quindi impostare il filtro Id = Id selezionato nella form ed eseguire il report
    Esempio : Where Condition  …  Id Personale Query = Id Personale Form   AND   Id Malattie Query = Id Malattie Form

    Molto semplice e veloce

    ;-)

  • Re: Stampa report da maschera continua di un solo record

    21/10/2023 - By65Franco ha scritto:


    Where Condition  …  Id Personale Query = Id Personale Form   AND   Id Malattie Query = Id Malattie Form

    Grazie del tuo prezioso suggerimento, fatto!

    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=[Maschere]![H_Inserisci_malattie]![ID_personale] And [Q_stampa_malattie]![ID_Malattie]=[Maschere]![H_Inserisci_malattie]![ID_Malattie]

    Funziona però il report visualizza solo il primo record della sottomaschera.

    Ad esempio se clicco sul bottone per generare il report del terzo record, il report mi visualizza sempre il primo., 

    Grazie mille ancora

  • Re: Stampa report da maschera continua di un solo record

    Nella maschera continua non vedo il campo IDMalattia (mi raccomando, meglio al singolare i nomi campo).

  • Re: Stampa report da maschera continua di un solo record

    Si, c'è il campo , ma lo avevo messo non visibile… L'ho impostato su “visibile”, ma cmq non va

    22/10/2023 - OsvaldoLaviosa ha scritto:


    Nella maschera continua non vedo il campo IDMalattia (mi raccomando, meglio al singolare i nomi campo).

  • Re: Stampa report da maschera continua di un solo record

    C'è qualcosa che non mi quadra nella visualizzazione struttura. La maschera è una sola oppure hai maschera/sottomaschera? Perchè vedo 2 Intestazione maschera?

  • Re: Stampa report da maschera continua di un solo record

    22/10/2023 - OsvaldoLaviosa ha scritto:


    C'è qualcosa che non mi quadra nella visualizzazione struttura. La maschera è una sola oppure hai maschera/sottomaschera? Perchè vedo 2 Intestazione maschera?

    Allora, si non sono stato chiarissimo: ho una maschera principale con relativa  sottomaschera (in visualizzazione “maschere continue”) che contiene i vari record in questione.

    Thanks 

  • Re: Stampa report da maschera continua di un solo record

    Allora prova a mettere nel criterio della query
    [Maschere]![NomeMaschera]![NomeSottomaschera]![IDMalattia]

  • Re: Stampa report da maschera continua di un solo record

    21/10/2023 - gigia2710 ha scritto:


    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=[Maschere]![H_Inserisci_malattie]![ID_personale] And [Q_stampa_malattie]![ID_Malattie]=[Maschere]![H_Inserisci_malattie]![ID_Malattie]

    Funziona però il report visualizza solo il primo record della sottomaschera.

    Ad esempio se clicco sul bottone per generare il report del terzo record, il report mi visualizza sempre il primo.

    Ciao,

    Se il pulsante che premi si trova sulla sotto maschera, sarà sufficiente prendere direttamente il valore del campo ID senza dover indicare maschere e sottomaschere ….

    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=[Maschere]![H_Inserisci_malattie]![ID_personale] And [Q_stampa_malattie]![ID_Malattie]=Me.ID_Malattie

    Non capisco tutti questi riferimenti alle maschere e sotto maschere … il codice evento del pulsante dal quale avvii il report non si trova nella sottomaschera ? 

    Anche per Id_Personale se è presente nella sotto maschera vale lo stesso discorso… basta indicare Me.Id_Personale

    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=Me.ID_personale And [Q_stampa_malattie]![ID_Malattie]=Me.ID_Malattie

    Edit:

    Ma il recordset del report qual'è ? puoi mostrarlo ? 

  • Re: Stampa report da maschera continua di un solo record

    22/10/2023 - By65Franco ha scritto:


    21/10/2023 - gigia2710 ha scritto:


    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=[Maschere]![H_Inserisci_malattie]![ID_personale] And [Q_stampa_malattie]![ID_Malattie]=[Maschere]![H_Inserisci_malattie]![ID_Malattie]

    Funziona però il report visualizza solo il primo record della sottomaschera.

    Ad esempio se clicco sul bottone per generare il report del terzo record, il report mi visualizza sempre il primo.

    Ciao,

    Se il pulsante che premi si trova sulla sotto maschera, sarà sufficiente prendere direttamente il valore del campo ID senza dover indicare maschere e sottomaschere ….

    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=[Maschere]![H_Inserisci_malattie]![ID_personale] And [Q_stampa_malattie]![ID_Malattie]=Me.ID_Malattie

    Non capisco tutti questi riferimenti alle maschere e sotto maschere … il codice evento del pulsante dal quale avvii il report non si trova nella sottomaschera ? 

    Anche per Id_Personale se è presente nella sotto maschera vale lo stesso discorso… basta indicare Me.Id_Personale

    condition WHERE= [Q_stampa_malattie]![personale]![Id_personale]=Me.ID_personale And [Q_stampa_malattie]![ID_Malattie]=Me.ID_Malattie

    Edit:

    Ma il recordset del report qual'è ? puoi mostrarlo ? 

    Le sto provando tutte! ma niente da fare…

    Il pulsante per avviare il report si trova nella sottomaschera …

    Ho inserito i due  codici che  mi hai proposto , ma entrambi non vanno

    ho questi messaggi:

    queste sono le proprietà del Report: 

    Ringrazio fin da subito per la cortese attenzione e tempo dedicatomi….

  • Re: Stampa report da maschera continua di un solo record

    Se posti un file di esempio forse potrebbe essere più semplice capire e aiutarti.

  • Re: Stampa report da maschera continua di un solo record

    Contrariamente a quanto mi pare di aver letto, io per fare Stampe SINGOLE di Record selezionato, eviterei Query con riferimenti a Controlli in Maschera, ed il motivo è semplice, complica la vita e ti obbliga ad operare con solo quella maschera.

    La funzione OPENREPORT supporta il parametro WHERE CONDITION… passa li il tuo Criterio semplifichi tutto e rendi il Report, come normalmente dovrebbero essere gli Oggetti, indipendente da altri oggetti.

  • Re: Stampa report da maschera continua di un solo record

    22/10/2023 - gigia2710 ha scritto:


    Le sto provando tutte! ma niente da fare…

    Il pulsante per avviare il report si trova nella sottomaschera …

    Ho inserito i due  codici che  mi hai proposto , ma entrambi non vanno

    Ciao, purtroppo sei molto lontano dal concetto e dalla soluzione che ripeto, è molto semplice… quindi devi approfondire l'argomento e non fare le prove sperando di prenderci ;-))

    prima di tutto :  Come accennava @Alex, lavora con gli oggetti puliti e quindi non memorizzare nella query o nelle proprietà del report condizioni e regole che rendono meno flessibile gli oggetti stessi.

    secondo : Per quasi tutti gli oggetti è possibile eseguirli passando dei parametri. In questo caso devi approfondire gli argomenti di come passare i parametri quando mandi in esecuzione una Query, una Form, un Report, etc etc…

    Riepilogando il tuo caso, abbiamo:

    • un Form
    • un Report
    • una Query

    1. nella Form, per ogni record, hai i campi ID_Personale e ID_Malattie
    2. nel Report hai come origine dati una Query e questa contiene delle colonne. ID_Personale e ID_Malattie
    3. lasciare gli oggetti puliti si intende:
      1. non mettere nessun criterio nella Query riferito alle due colonne di cui sopra
      2. non mettere nessun criterio nelle proprietà del Report
    4. quando ti posizioni su un record della form e premi il pulsante "Stampa" hai a disposizione, per il record corrente, ID_Personale e ID_Malattie
    5. quando premi il Pulsante Stampa sul record della Form esegui il comando per eseguire il Report

    Bene, a questo punto hai tutto quello che ti occorre per eseguire il report per un determinato record selezionato nella Form.

    Il report dovresti eseguirlo con il comando OpenReport: Metodo DoCmd.OpenReport (Access) | Informazioni su Microsoft

    La sintassi e i parametri, come da documentazione che ti ho allegato sopra, sono :

    Bene … a questo punto  mi pare di aver capito che:

    • il report si chiama R_Stampa_Malattie
    • l'origine dati del report è la query Q_Stampa_Malattie 
      • nell'origine hai due colonne da filtrare che si chiamano:
        • ID_Personale
        • ID_Malattie
    • la Form dalla quale avviare l'esecuzione del Report, hai due textbox nel record corrente e si chiamano:
      • ID_Personale
      • ID_Malattie

    Come abbiamo visto dalla documentazione allegata sopra, eseguirai il report con la riga di comando inserita nel Pulsante “Stampa” :

    DoCmd.OpenReport "TuoNomeReport", acViewPreview, , “TuaCondizioneWhere”

    Adesso devi costruire la condizione Where e per farlo dovrai creare una stringa che concatena le colonne della “origine dati” del report con i valori del record corrente della Form… per esempio:

    DoCmd.OpenReport "R_Stampa_Malattie", acViewPreview, , "ID_Personale=" & Me.ID_Personale & “  AND ID_Malattie=” & Me.ID_Malattie

    che, come da documentazione di cui sopra : 
    Sintassi
    espressione. OpenReport (ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)

    in rosso sono i parametri da utilizzare nel tuo caso, per i quali si definisce il nome del Report, il tipo di Vista e la condizione Where Condition che rappresenta i criterie per i quali viene filtrata l'origine dati del Report.

    In questo caso vai a filtrare, nell'origine dati del report, tutti i records in cui la colonna della Query ID_Personale sia uguale al campo della form Me.ID_Personale e (AND) tutti i records in cui la colonna della Query ID_Malattie sia ugale al campo della Form Me.ID_Malattie.


    Come puoi vedere non è necessario “provarle  tutte” ma semplicemente sarà necessario approfondire l'argomento nella documentazione del supporto tecnico Microsoft e applicare le sintassi e i metodi messi adisposizione.

    Fai test e verifica i nomi delle colonne della Query e dei campi della Form e se la condizione Where soddisfa le tue esigenze. ;-)
    Questa rappresentata è solo una strada percorribile, ma ci sono anche altri sistemi per raggiungere lo stesso scopo. 

    P.S.
    ti consiglio, se posso permettermi, di fare sempre riferimento al suppporto Microsoft, trovi tutto quello che ti occorre, con spiegazione ed esempi. Questa documentazione che trovi online, è il tuo manuale da tenere sempre sotto mano. E' indispensabile.

  • Re: Stampa report da maschera continua di un solo record

    23/10/2023 - By65Franco ha scritto:


    22/10/2023 - gigia2710 ha scritto:


    Le sto provando tutte! ma niente da fare…

    Il pulsante per avviare il report si trova nella sottomaschera …

    Ho inserito i due  codici che  mi hai proposto , ma entrambi non vanno

    Ciao, purtroppo sei molto lontano dal concetto e dalla soluzione che ripeto, è molto semplice… quindi devi approfondire l'argomento e non fare le prove sperando di prenderci ;-))

    prima di tutto :  Come accennava @Alex, lavora con gli oggetti puliti e quindi non memorizzare nella query o nelle proprietà del report condizioni e regole che rendono meno flessibile gli oggetti stessi.

    secondo : Per quasi tutti gli oggetti è possibile eseguirli passando dei parametri. In questo caso devi approfondire gli argomenti di come passare i parametri quando mandi in esecuzione una Query, una Form, un Report, etc etc…

    Riepilogando il tuo caso, abbiamo:

    • un Form
    • un Report
    • una Query

    1. nella Form, per ogni record, hai i campi ID_Personale e ID_Malattie
    2. nel Report hai come origine dati una Query e questa contiene delle colonne. ID_Personale e ID_Malattie
    3. lasciare gli oggetti puliti si intende:
      1. non mettere nessun criterio nella Query riferito alle due colonne di cui sopra
      2. non mettere nessun criterio nelle proprietà del Report
    4. quando ti posizioni su un record della form e premi il pulsante "Stampa" hai a disposizione, per il record corrente, ID_Personale e ID_Malattie
    5. quando premi il Pulsante Stampa sul record della Form esegui il comando per eseguire il Report

    Bene, a questo punto hai tutto quello che ti occorre per eseguire il report per un determinato record selezionato nella Form.

    Il report dovresti eseguirlo con il comando OpenReport: Metodo DoCmd.OpenReport (Access) | Informazioni su Microsoft

    La sintassi e i parametri, come da documentazione che ti ho allegato sopra, sono :

    Bene … a questo punto  mi pare di aver capito che:

    • il report si chiama R_Stampa_Malattie
    • l'origine dati del report è la query Q_Stampa_Malattie 
      • nell'origine hai due colonne da filtrare che si chiamano:
        • ID_Personale
        • ID_Malattie
    • la Form dalla quale avviare l'esecuzione del Report, hai due textbox nel record corrente e si chiamano:
      • ID_Personale
      • ID_Malattie

    Come abbiamo visto dalla documentazione allegata sopra, eseguirai il report con la riga di comando inserita nel Pulsante “Stampa” :

    DoCmd.OpenReport "TuoNomeReport", acViewPreview, , “TuaCondizioneWhere”

    Adesso devi costruire la condizione Where e per farlo dovrai creare una stringa che concatena le colonne della “origine dati” del report con i valori del record corrente della Form… per esempio:

    DoCmd.OpenReport "R_Stampa_Malattie", acViewPreview, , "ID_Personale=" & Me.ID_Personale & “  AND ID_Malattie=” & Me.ID_Malattie

    che, come da documentazione di cui sopra : 
    Sintassi
    espressione. OpenReport (ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)

    in rosso sono i parametri da utilizzare nel tuo caso, per i quali si definisce il nome del Report, il tipo di Vista e la condizione Where Condition che rappresenta i criterie per i quali viene filtrata l'origine dati del Report.

    In questo caso vai a filtrare, nell'origine dati del report, tutti i records in cui la colonna della Query ID_Personale sia uguale al campo della form Me.ID_Personale e (AND) tutti i records in cui la colonna della Query ID_Malattie sia ugale al campo della Form Me.ID_Malattie.


    Come puoi vedere non è necessario “provarle  tutte” ma semplicemente sarà necessario approfondire l'argomento nella documentazione del supporto tecnico Microsoft e applicare le sintassi e i metodi messi adisposizione.

    Fai test e verifica i nomi delle colonne della Query e dei campi della Form e se la condizione Where soddisfa le tue esigenze. ;-)
    Questa rappresentata è solo una strada percorribile, ma ci sono anche altri sistemi per raggiungere lo stesso scopo. 

    P.S.
    ti consiglio, se posso permettermi, di fare sempre riferimento al suppporto Microsoft, trovi tutto quello che ti occorre, con spiegazione ed esempi. Questa documentazione che trovi online, è il tuo manuale da tenere sempre sotto mano. E' indispensabile.

    Veramente Grazie! per l'analitica descrizione…

    Ho inserito quanto segue: 

    ma ho questo errore..

    POsso postare il file ?

  • Re: Stampa report da maschera continua di un solo record

    @Alex e By65Franco ti hanno dato suggerimenti riguardo l'editor in VBA (Visual Basic for Application). Quello che hai usato tu è una macro (sorella minore del VBA con una serie di limiti…ma che in questo caso può andare bene lo stesso) che ha una interfaccia utente diversa.
    Se vuoi usare la macro, dentro Condizione WHERE devi scrivere solo il filtro…tra l'altro le macro non riconoscono il Me, pertanto devi scrivere (secondo me, se hai ancora la disposizione di maschera/sottomaschera)
    “ID_Personale = ” & [Maschere]![NomeMaschera]![NomeSottomaschera]![ID_Malattie]

    Per capire corrispondenze e similitudini tra macro e VBA, leggi qui (lo avevo salvato per fatti miei…non riesco più a ritrovarlo on-line)

    2 elementi

    P.S.: Più guardo la tua visualizzazione struttura maschera/sottomaschera e più dubbi trasalgono. Come l'hai costruita: in visualizzazione struttura maschera oppure sfruttando la procedura guidata?
    Generalmente anche la maschera principale ha il Corpo con i suoi campi. Mentre nella tua visualizzazione non lo vedo. Di conseguenza temo che anche NomeMaschera e NomeSottomaschera potrebbero non corrispondere esattamente ai loro “logici” nomi corrispondenti e che Access abbia nominato diversamente il container della sottomaschera…boh…andrebbero analizzate passo passo anche tutte queste cose.

    gigia2710 ha scritto: 

    Posso postare il file ?

    Non è nello spirito del forum.

Devi accedere o registrarti per scrivere nel forum
17 risposte