MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

di il
14 risposte

MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

Buon giorno a tutti. Sto cercando di imparare a usare Access per poter creare quanto segue:
- ad ogni evento (conferenza su piattaforma digitale) a cui partecipano diversi clienti vorrei creare una macro che mi permetta di creare in automatico delle fatture in pdf con i dati del cliente che ha partecipato all'evento.
Vi riassumo quanto fatto fino ad adesso:
- ho realizzato le tabelle:
- CLIENTI con i dati dei clienti
- EVENTI con i dati degli eventi da realizzare
- CONTATORE FATTURE con il numero della fattura fin'ora realizzata
- EVENTO - CLIENTE dove associo per ogni cliente, l'evento ha cui ha partecipato
- CONTATORE REPORT per contare il numero di report filtrati da una query
- ho realizzato la maschera FATTURA e il relativo REPORT basati sulla Query (QUERY1) dove ho filtrato i clienti che hanno partecipato ad un determinato evento.

Attraverso la maschera GENERATORE DI FATTURE, al cui interno scelgo l'evento per cui generare tutte le fatture, faccio partire la macro (MACRO1) dove incremento di volta in volta il contatore delle fatture e genero attraverso il comando ESPORTA CON FORMATTAZIONE il pdf della fattura con nome uguale al "numero/anno" della fattura stessa.

Ho due problemi principali:
1 - nell'esportare il report (FATTURA) non stampa solo il record corrente ma tanti quanti sono i clienti che hanno partecipato all'evento.
Ho provato a cercare di filtrare il record corrente inserendo delle espressioni nel campo WHERE ma niente da fare.
2 - Dovrei cercare di realizzare un ciclo FOR per ripetere l'operazione di esportazione del PDF per tutti i singoli record (clienti che hanno partecipato all'evento) in modo da avere una singola ed univoca fattura per ogni cliente che ha partecipato all'evento. Non sono riuscito a capire come realizzare un cicli nella macro.

Scusandomi per essermi dilungato anche troppo, ringraziando per il sostegno che mi darete, vi auguro una buona serata.

14 Risposte

  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    marco82polo ha scritto:


    - ho realizzato le tabelle:
    - CLIENTI con i dati dei clienti
    - EVENTI con i dati degli eventi da realizzare
    - CONTATORE FATTURE con il numero della fattura fin'ora realizzata
    - EVENTO - CLIENTE dove associo per ogni cliente, l'evento ha cui ha partecipato
    - CONTATORE REPORT per contare il numero di report filtrati da una query
    - ho realizzato la maschera FATTURA e il relativo REPORT basati sulla Query (QUERY1) dove ho filtrato i clienti che hanno partecipato ad un determinato evento.
    Potresti esplicitare le relazioni intercorrenti tra tutte queste tabelle?
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Buon giorno.
    Le relazioni tra le tabelle sono le seguenti due:
    - una tra ID_CLIENTE della tabella CLIENTI e ID_CLIENTE della tabella EVENTO - CLIENTE
    - una tra ID_EVENTO della tabella EVENTI e ID_EVENTO della tabella EVENTO - CLIENTE
    Grazie e buona giornata.

    P.S. Se può servire posso allegare il DB.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Non ho capito a cosa servono CONTATORE FATTURE e CONTATORE REPORT. Non hanno relazioni con le altre tabelle?
    Poi, sarò io durissimo di comprendonio, ma puoi raccontare passo passo il comportamento dell'utente? Puoi raccontare tutto con un esempio pratico (valori anche inventati)?
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Buona sera.
    L'idea è questa. L'utente utilizza la maschera:
    - CLIENTI (che è associata alla tabella CLIENTI) per inserire i seguenti dati dei vari clienti:
    NOME, COGNOME, INDIRIZZO, CAP, COMUNE, PROVINCIA, TELEFONO, MAIL, CODICE FISCALE, ID CLIENTE (che esce in automatico essendo il campo chiave con numerazione automatica)
    Poi utilizza la maschera:
    - EVENTI (che è associata alla tabella EVENTI) per inserire i seguenti dati degli eventi realizzati:
    TITOLO EVENTO, DATA EVENTO, ORARIO, IMMAGINE, ID EVENTO (che esce in automatico essendo il campo chiave con numerazione automatica)

    Una volta inseriti questi dati associo ad ogni cliente l'evento a cui ha assistito attraverso la maschera EVENTO - CLIENTE (che è associata alla relativa tabella) con i seguenti dati:
    ID EVENTO, ID CLIENTE, NUMERO DI PARTECIPANTI, COMPONENTI DELLO STESSO NUCLEO FAMILIARE (tipo di dati SI/NO), FATTURATO (tipo di dati SI/NO), NUMERO FATTURA.
    In pratica con questa maschera dichiaro se il cliente MARCO ha partecipato all'evento LA PITTRICE DELLA REGINA, con quanti partecipanti e se i partecipanti fanno parte dello stesso nucleo familiare (questo perchè il prezzo per la partecipazione all'evento cambia in relazione a se i partecipanti fanno parte dello stesso nucleo familiare o meno). Il campo FATTURATO mi serve per capire se ho già fatturato al cliente questo evento e il campo NUMERO FATTURA mi serve per inserire al suo interno il relativo numero della fattura realizzata.
    La maschera CONTATORE FATTURE contiene solamente il campo ID e CONTATORE FATTURE con un unico record al cui interno inserisco il numero attuale a cui sono arrivato con la fatturazione e rappresenta anche il numero dal quale devo proseguire con le ulteriori fatture.

    L'obbiettivo è quello di creare velocemente le fatture per tutti i clienti che hanno partecipato a un dato evento dopo che questo è stato realizzato (tenendo conto che a volte ad un evento di una serata partecipano 50 cliente dovrei creare a mano 50 fatture).

    Così che l'utilizzatore del programma dopo aver inserito i dati precedentemente descritti va sulla maschera GENERATORE DI FATTURE dove c'è un solo campo la cui origine risale al TITOLO EVENTO della tabella EVENTI. Una volta selezionato l'evento succedono due cose:
    - l'unica query esistente (QUERY1) che contiene tutti i dati necessari per generare la fattura (NOME, COGNOME, INDIRIZZO, CAP, COMUNE, PROVINCIA, CODICE FISCALE, ID EVENTO, TITOLO EVENTO, IMMAGINE, NUMERO DI PARTECIPANTI, COMPONENTI DELLO STESSO NUCLEO FAMILIARE, FATTURATO, CONTATORE FATTURE) filtra i risultati in base all'ID EVENTO selezionato nella maschera GENERATURE DI FATTURE attraverso il criterio inserito sotto il campo ID EVENTO --> [Maschere]![GENERATORE DI FATTURE]![CasellaCombinata5];
    - fa partire la macro.

    La MACRO esegui questi comandi:
    - Apre la maschera CONTATORE FATTURE ed incrementa di 1 il valore contenuto nel campo.
    - Apre la maschera CONTATORE REPORT (che fa riferimento alla relativa tabella) dove ho inserito questa formula sotto il campo CONTATORE REPORT --> =DCount("[Query1]![ID CLIENTE]";"Query1") --> in pratica mi restituisce il numero di record filtrati dalla QUERY1
    - l'altro campo della maschera/tabella CONTATORE REPORT è il campo REPORT CORRENTE che parte sempre da 1 e dovrebbe servirmi per il ciclo FOR da far eseguire alla macro (ma che non sono capace di realizzare).
    - parte una serie di comandi sotto la condizione IF [Maschere]![CONTATORE REPORT]![REPORT CORRENTE]<[Maschere]![CONTATORE REPORT]![CONTATORE REPORT]:
    - apre il report FATTURA che contiene il layout con tutti i dati necessari per la fattura
    - esporta con formattazione il report in pdf con nome del pdf creato pari a: ="C:\Users\cora\Desktop\FATTURE\" & [Maschere]![CONTATORE FATTURE]![CONTATORE FATTURE] & "-" & Year(Now()) & ".PDF" --> in pratica crea un pdf con nome del file pari al numero della fattura/anno in corso.
    - apre la maschera CONTATORE REPORT e aumenta di 1 il valore del campo con il comando [Maschere]![CONTATORE REPORT]![REPORT CORRENTE]+1
    - salvo il record
    - apro la query1
    - vado al record successivo.

    Fino ad adesso ottengo questo:
    stampo un file pdf composto da tante pagine quanti sono i partecipanti all'evento; su ogni pagina compare una singola fattura (dove gli intestatari sono corretti perchè di volta in volta cambia l'ID CLIENTE) con però il problema che tutte le fatture realizzate hanno lo stesso numero.
    Non riesco a stampare una singola fattura per ogni record filtrato dalla query1.
    Il ciclo for che dovrebbe far ripetere la macro per tutti i record filtrati dalla query1 non riesco a realizzarlo.

    Lo so che ho scritto troppe cose ma non sapevo come spiegarmi meglio.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    marco82polo ha scritto:


    L'utente utilizza la maschera:
    - CLIENTI (che è associata alla tabella CLIENTI) per inserire i seguenti dati dei vari clienti:
    NOME, COGNOME, INDIRIZZO, CAP, COMUNE, PROVINCIA, TELEFONO, MAIL, CODICE FISCALE, ID CLIENTE (che esce in automatico essendo il campo chiave con numerazione automatica)
    Poi utilizza la maschera:
    - EVENTI (che è associata alla tabella EVENTI) per inserire i seguenti dati degli eventi realizzati:
    TITOLO EVENTO, DATA EVENTO, ORARIO, IMMAGINE, ID EVENTO (che esce in automatico essendo il campo chiave con numerazione automatica)

    Una volta inseriti questi dati associo ad ogni cliente l'evento a cui ha assistito attraverso la maschera EVENTO - CLIENTE (che è associata alla relativa tabella) con i seguenti dati:
    ID EVENTO, ID CLIENTE, NUMERO DI PARTECIPANTI, COMPONENTI DELLO STESSO NUCLEO FAMILIARE (tipo di dati SI/NO), FATTURATO (tipo di dati SI/NO), NUMERO FATTURA.
    Non ti conviene lavorare con una maschera/sottomaschera EVENTI/EVENTI-CLIENTI? È decisamente farraginosa una gestione dati come l'hai raccontata tu.

    marco82polo ha scritto:


    Il campo FATTURATO mi serve per capire se ho già fatturato al cliente questo evento e il campo NUMERO FATTURA mi serve per inserire al suo interno il relativo numero della fattura realizzata.
    La maschera CONTATORE FATTURE contiene solamente il campo ID e CONTATORE FATTURE con un unico record al cui interno inserisco il numero attuale a cui sono arrivato con la fatturazione e rappresenta anche il numero dal quale devo proseguire con le ulteriori fatture.
    Questa cosa la trovo alquanto strana.
    Quando fatturi cosa deve apparire sulla Fattura?

    marco82polo ha scritto:


    Lo so che ho scritto troppe cose ma non sapevo come spiegarmi meglio.
    Meglio abbondare che deficere.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Allego un'immagine della fattura tipo che realizza la macro:
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Dal mio punto di vista, tu potresti avere la seguente struttura tabelle:
    Clienti uno-a-molti Fatture
    Eventi uno-a-molti Fatture

    Fatture prende il posto (come denominazione) di Eventi-Clienti e ingloba in sè anche il campo NumeroFattura (relativo all'Anno in corso). Riguardo la Data, si può sempre fare riferimento alla DataEvento.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Ok grazie.
    Ma come posso risolvere il problema di far stampare al report il singolo record così da avere un singolo pdf per ogni fattura con relativo numero univoco della fattura?

    Cordiali saluti.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Il mio ultimo suggerimento sulla struttura tabelle fa cambiare molte cose:
    1. Gestione maschere: la maschera Fatture mostrerebbe il proprio IDFattura utile per filtrare il report che deve prelevare il valore del IDFattura mostrato dalla maschera
    2. Il report cambierebbe radicalmente la propria struttura, dovendo poggiare su un report/sottoreport relativo alle tabelle Clienti/Fatture oppure (meglio) una query che le coinvolge entrambe ed è filtrata dal parametro [Maschere]![NomeMaschera]![IDFattura]
    3. Alternativa al punto 2. (ma non so se sei pratico di codice VBA) gestire il comando DoCmd.OpenReport con l'argomento relativo alla Condizione WHERE.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Grazie per i consigli.
    Sto cercando di digerirli.
    Non sono pratico di VBA.
    Ma nel caso come si potrebbe applicare il consiglio n. 3?
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Se non conosci il VBA, ti sconsiglio la soluzione 3. Anzi, io al posto tuo, farei proprio la query (parametrica) e poi il report sulla query.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Ok allora provo ad attuare la soluzione 2.
    Comunque così facendo dovrò (ipotizzando che ad un evento partecipano 50 persone) manualmente esportare in pdf 50 fatture indicando di volta in volta l’ID della fattura che voglio generare. Corretto?
    Non esiste un metodo che attraverso una Macro mi permetta di fare questo procedimento da solo in automatico?
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    marco82polo ha scritto:


    Comunque così facendo dovrò (ipotizzando che ad un evento partecipano 50 persone) manualmente esportare in pdf 50 fatture indicando di volta in volta l’ID della fattura che voglio generare. Corretto?
    Sì. Hai detto tu che vuoi produrre un report Cliente alla volta.

    marco82polo ha scritto:


    Non esiste un metodo che attraverso una Macro mi permetta di fare questo procedimento da solo in automatico?
    Considera che il report poggia sulla query parametrica che legge un solo IDCliente. Il report produce una sola Fattura. Per automatizzare la procedura su singolo report...ti basta una semplice azione macro ApriReport da associare al clic di un pulsante StampaFattura sulla maschera.
  • Re: MACRO STAMPA PDF DI SINGOLO RECORD IN UN REPORT

    Scusate se non rileggo tutto il malloppone servito per spiegare come stampare in pdf un report costituito dal record specifico...
    Per stringere suggerisco di leggere con MOLTA attenzione questo:
    https://www.devhut.net/2019/05/13/ms-access-print-individual-pdfs-of-a-report/
Devi accedere o registrarti per scrivere nel forum
14 risposte