Access gestione modiche elenco clienti

Anonimo
2016-10-05T12:11:05+00:00

Buon pomeriggio a tutti.

In una mia precedente domanda mi avevate aiutato ad impostare la storicizzazione dei dati anagrafici dell'elenco clienti che è adesso così impostata:

  • tabella clienti con i dati correnti e la data di ultima modifica (se esistente);
  • tabella clienti dati storici con i medesimi campi della tabella clienti e un record per ogni variazione apportata ad uno o più campi relativi al cliente, con periodo di validità del tipo "dal" "al". Quindi se un cliente non ha mai avuto modifiche non risulta presente in questa tabella.

In fase di consultazione della maschera clienti visualizzo i dati attuali; se voglio vedere i dati storici attivo il bottone relativo e apro la maschera clienti dati storici. Tutto questo funziona e va bene.

Ogni anno ho la necessità di ottenere un elenco dei clienti con la lista dei libri contabili da stampare; questo elenco dipende dalla combinazione di alcune caratteristiche di ciascun cliente che sono presenti nella tabella clienti. 

E qui sorge il problema: se adesso (ottobre 2016) vado ad estrarre l'elenco dei libri contabili da stampare per l'esercizio 2015, la Query estrae i dati dalla tabella elenco clienti senza tener conto delle eventuali variazioni intervenute nel 2016.

Se ad esempio il cliente Pippo, privato nel 2015 (quindi niente libri da stampare) apre un'attività nel 2016, vorrei che quando vado ad estrarre la lista dei libri 2015 da stampare non comparisse Pippo, ma comparisse solo dal 2016.

Mi sembra di avere chiaro l'obiettivo ma è qualche giorno che giro intorno al problema senza trovare una soluzione razionale. Ho provato a creare una Query e a mettere in relazione la tabella clienti con quella clienti dati storici ma non riesco ad ottenere ciò che desidero; d'altronde creare una nuova tabella apposita mi sembra troppo macchinoso.

Attendo fiducioso nel vostro consueto e prezioso aiuto

Buona giornata

Andrea

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2016-10-06T18:01:26+00:00

ciao Andrea,

nel mio esempio ho considerato solamente passaggio del tipo cliente da privato a professionista.

Inoltre ho storicizzato un altro cliente per prova, ma il tipo cliente rientra comunque tra quelli per i quali i libri contabili devono essere gestiti :

quindi con il seguente statement estraggo tutti i cliente che hanno libri contabili da gestire :

SELECT [Elenco clienti].[ID_tipo cliente], [Elenco clienti].[ID_tipo contabilità], [Elenco clienti].ID_contabilità, [Elenco clienti].CDA, Null AS anno, [Elenco clienti].[ID_Elenco clienti]

FROM

         [Elenco clienti]

INNER JOIN

         [Libri contabili per cliente] ON [Elenco clienti].[ID_tipo cliente] = [Libri contabili per cliente].[ID_tipo cliente];

118 righe,

con il seguente invece tutti gli storici che hanno libri contabili da gestire nell'anno precedente a quello attuale escludendo il tipo cliente 7 ( i privati):

SELECT [Elenco clienti dati storici].[ID_tipo cliente], [Elenco clienti].[ID_tipo contabilità], [Elenco clienti].ID_contabilità, [Elenco clienti].CDA, Year([Elenco clienti dati storici].[Modifica dal]) AS anno, [Elenco clienti].[ID_Elenco clienti]

FROM

      [Elenco clienti]

INNER JOIN

      [Elenco clienti dati storici] ON [Elenco clienti].[ID_Elenco clienti] = [Elenco clienti dati storici].[ID_Elenco clienti]

WHERE

        [Elenco clienti dati storici].[ID_tipo cliente]<>7 AND Year([Elenco clienti dati storici].[Modifica dal])=Year(Date())-1;

1 riga.

unisco le due query con una union all ed ottengo la lista completa :

SELECT [Elenco clienti].[ID_tipo cliente], [Elenco clienti].[ID_tipo contabilità], [Elenco clienti].ID_contabilità, [Elenco clienti].CDA, Null AS anno, [Elenco clienti].[ID_Elenco clienti]

FROM

        [Elenco clienti]

INNER JOIN

       [Libri contabili per cliente] ON [Elenco clienti].[ID_tipo cliente] = [Libri contabili per cliente].[ID_tipo cliente];

UNION ALL

SELECT [Elenco clienti dati storici].[ID_tipo cliente], [Elenco clienti].[ID_tipo contabilità], [Elenco clienti].ID_contabilità, [Elenco clienti].CDA, Year([Elenco clienti dati storici].[Modifica dal]) AS anno, [Elenco clienti].[ID_Elenco clienti]

FROM

      [Elenco clienti]

INNER JOIN

       [Elenco clienti dati storici] ON [Elenco clienti].[ID_Elenco clienti] = [Elenco clienti dati storici].[ID_Elenco clienti]

WHERE

      [Elenco clienti dati storici].[ID_tipo cliente]<>7 AND Year([Elenco clienti dati storici].[Modifica dal])=Year(Date())-1;

119 righe

...non sono certo di aver capito al 100%....ma intanto vedi se questo può aiutarti...altrimenti....posta!

ciao, Sandro.

La risposta è stata utile?

0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2016-10-06T12:40:27+00:00

    https://1drv.ms/u/s!AoS1f\_man2ULhqcyOsmkYretm5MO7g

    Ecco il link per una simulazione ridotta del database.

    Diciamo che alcune tipologie di clienti (id_tipo cliente) hanno l'obbligo di stampare i registri contabili; a seconda del tipo di contabilità adottato (ID_tipo contabilità) variano i tipi di libri da stampare; infine se la contabilità è tenuta presso lo studio o direttamente dal cliente  (ID_contabilità) mutano ancore i tipi di libro. Tutto questo è racchiuso in "Libri contabili query", che combinando le variabili, elenca i libri obbligatori per ciascun cliente e questo in generale, non legato al tempo cioè.

    Il problema che non riesco a risolvere sta in "stampe Query": se io metto infatti in relazione "libri contabili Query" con la tabella clienti (che racchiude i dati attuali), la lista di libri contabili da stampare fa riferimento alla situazione corrente e non all'anno selezionato nell'apposita maschera.

    Nella demo il cliente Rossi era professionista nel 2015 e quindi dovrebbe comparire nella lista delle stampe per 2015; è un privato nel 2016 e quindi, se seleziono il 2016 come anno per le stampe, non dovrebbe comparire. Non riesco cioè a estrarre la lista delle stampe annuali da fare in relazione alla situazione personale del cliente nell'anno selezionato.

    Spero di essere stato chiaro.

    Ciao

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2016-10-05T16:48:20+00:00

    ciao Andrea,

    [...]

    Se estraggo dal database i clienti per i quali è necessario stampare i libri contabili per l'annualità 2015

    [...]

    per il clienti attuali, quali sono le caratteristiche tali per cui ad oggi anno 2016 gli stessi devono rientrare tra quelli che per certo avranno libri contabili anche nell'esercizio precedente e di conseguenza rientranti tra quelli per i quali sono necessari i libri contabili da stampare?

    questi e solo questi non devono essere considerati :

    [...]

    tipo cliente (privato), tipo contabilità (NO), e contabilità cliente o studio (NO). 

    [...]

    e i seguenti e soli i seguenti invece si :

    [...]

    tipo cliente (professionista), tipo contabilità (semplificata), e contabilità cliente o studio (studio)

    [...]

    e quindi in sostanza estrarre tutti i liberi professionisti attuali a patto che nella tabella storico nell'anno attuale -1 o non ci sono oppure hanno uno status diverso come ad esempio lavoratore dipendente?

    o c'è altro?

    Potresti allegare le tabelle su cui effettuare un test? altrimenti tocca ricostruire uno scenario che non collima con quanto ci spieghi.

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2016-10-05T14:07:14+00:00

    Ciao Sandro e grazie. Sicuramente mi sono spiegato male, come spesso capita quando hai chiare le cose ma renderle chiare agli altri non è semplice.

    Faccio un esempio: Pippo diventa mio cliente nel 2015; è un lavoratore dipendente e quindi non ha contabilità, né, di conseguenza, libri contabili da stampare. Nella tabella clienti viene creato Pippo con tutti i dati anagrafici e le altre caratteristiche, tra cui: tipo cliente (privato), tipo contabilità (NO), e contabilità cliente o studio (NO). Nel 2016 si licenzia e apre un'attività autonoma con partita Iva per cui vado ad inserire nella tabella clienti i nuovi dati di Pippo, modificando quelli esistenti: tipo cliente (professionista), tipo contabilità (semplificata), e contabilità cliente o studio (studio). Queste 3 discriminanti determinano quali libri contabili sono da stampare. Quando inserisco le modifiche del cliente Pippo nella maschera clienti, il database memorizza la vecchia situazione (quella del 2015) nella tabella elenco clienti storici e registra anche la data di decorrenza delle modifiche.

    In questo modo quando apro la maschera elenco clienti ho sempre la situazione attuale (Pippo professionista per intenderci); se voglio vedere i dati storici clicco su un apposito pulsante e apro la maschera elenco clienti storici che mi evidenzia la situazione precedente (Pippo dipendente). Fin qui tutto funziona e mi va bene così. Ho preferito questa soluzione della doppia tabella (attuali e storici) anziché accodare le modifiche nella tabella clienti in quanto avrei dovuto rivedere tutte le interrogazioni.

    Se estraggo dal database i clienti per i quali è necessario stampare i libri contabili per l'annualità 2015 nell'elenco trovo anche Pippo che invece nel 2015 era esonerato, in quanto i dati vengono estrapolati dalla tabella clienti (quella con i dati attuali); sarebbe necessario che, una volta inserita nell'apposita maschera l'anno contabile di stampa dei registri (esempio 2015), in qualche modo il database andasse a pescare quei clienti che nel 2015 dovevano stampare i libri, quindi o dall'elenco clienti con dati attuali (se non vi sono state modifiche) o dall'elenco clienti storico (se vi sono state modifiche che hanno coinvolto almeno una delle 3 discriminanti sopra descritte). Non sono però riuscito a trovare soluzioni degne di tale nome.

    Grazie e buon pomeriggio

    Andrea

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2016-10-05T13:10:01+00:00

    ciao Andrea,

    forse ti manca un dato...

    se ho capito bene lo scenario, ma ho qualche dubbio, oltre che alla data in modifica del cliente dovresti gestire un campo per l'inizio attività in modo che generando una query per pippo creato nel 2015 e dormiente nel 2015 ma attivo solo da 2016, ti renda i risultati voluti e cioè presente solo nel 2016 e non nel 2015.

    Il tutto mi sembra troppo semplice quindi per certo mi sfugge qualcosa... :-).

    A meno che non siano le attività, n per cliente, da dovere essere gestite indipendentemente quindi dalla data di inserimento del cliente...

    In tutto questo non mi è chiaro l'utilizzo per questo scopo della tabella dei clienti storici....

    Ciao, Sandro.

    La risposta è stata utile?

    0 commenti Nessun commento