Newsgroup: it.comp.lang.visual-basic
Titolo: Forse 1/2 OT: gestione fatturazione annuale

Un saluto a tutti.
Il problema che vi pongo non e' totalmente dipendente da VB (quindi
probabilmente e' OT...). Sicuramente la risoluzione migliorera' il codice
della mia applicazione.
Vi spiego quello che voglio fare con un esempio.
Supponiamo di avere un'applicazione gestionale che permette di gestire la
fatturazione. A tal proposito abbiamo a dispos. tre tabelle di un db Access:
tabellaA (utenti)
TabellaB (servizi "x" attivato all'utente)
TabellaC (fattura per il servizio richiesto)
I servizi dovrebbero essere fatturati annualmente (a meno di eventuali
disdette). Per esempio se l'utente "Tizio" ha attivato un servizio il
10/04/1995
(IDservizio "X"), tale servizio verra' fatturato nel seguente modo:
anno 1996:
Idfattura: z
Idservizio: x
Mesi:  9mesi (si contano i mesi solari....indipendentemente dal giorno...in
stile bollo auto per intenderci)
importo:......
data fattura: now()
anno 1997:
Idfattura: k
Idservizio: x
Mesi:  12
importo:......
data fattura: now()
anno 2000: 12 mesi
Idfattura: w
Idservizio: x
Mesi:  12
importo:......
data fattura: now()
Fin qui niente di anormale. Avviene il calcolo dei mesi e l'accodamento
delle fatture nella relativa tabella.  Sostanzialmente il servizio richiesto
nell'anno "J" viene fatturato la prima volta nell'anno "J+1" (la fattura
riguarda la prestazione dell'anno "J").
Problema:
Supponiamo che il terminalista sbagli e che cerchi di avviare la procedura
di fatturazione due volte (per esempio il 10/01/2002 ed il 30/03/2002).
Oppure che per un qualche motivo sia necessario avviare due volte tale
procedura.
Come posso ottimizzare il tutto in modo da evitare duplicati di fatture gia'
emesse.
Avevo pensato:
 per ogni nuova fattura controllare se nello stesso anno e' gia stata emessa
una fattura relativa allo stesso servizio ed allo stesso utente, ma mi
sembra un metodo esaustivo......
Contrassegnare la tabellaB con un nuovo campo (di tipo booleano per esempio)
sarebbe inutile in quanto il servizio deve essere fatturato ogni anno ed il
controllo su tale campo non sortirebbe l'effetto voluto (a meno di
reinizializzare tale valore ogni anno.....ma questa soluz. non mi soddisfa
affatto)
Avete qualche suggerimento in merito?
Ciao e grazie a tutti
...e scusate la lunghezza del post....ma ho preferito spiegarmi....  ;-)
e.


Potresti semplicemente testare se l'ultima fattura emessa per l'utente è
ancora in corso di validità, vista la struttura della tabella....
O salvarti nella tabella servizi la data di fine validità del servizio,
aggiornata naturalmente ad ogni emissione fattura.
ciao
ugo

 ugo
Ciao,
scusa ma non capisco il metodo che proponi.
Dunque l'ultima fattura emessa potrebbe essere attiva anche dopo la sua
"scadenza " nel caso di  utente "evasore", quindi effettivamente non potrei
basarmi sulla data di scadenza. Per quanto concerne la fine validita' del
servizio......essenzialmente la durata finisce quando l'utente effettua
disdetta altrimenti puo' durare  " all'infinito ", nel senso che il servizio
non viene interrotto (naturalmente viene anche fatturato anno per anno).
Forse pero' ho capito male il suggerimento che vuoi darmi
ciao
e.
Ps:
Giusto per la cronaca:
tabellaB (tabella relativa al servizio "X" richiesto dall'utente "tizio") ha
i seguenti campi:
codicefiscale (dell'utente che ha richiesto il servizio)
idservizio (id relativo al servizio "x" assegnato all'utente "tizio")
dataAtt (data att. servizio)
dataSosp (eventuale data di sosp. del servizio)
vari campi inerenti la tipologia e le caratteristiche del servizio "x"
la TabellaC (fattura dell'utente) ha invece i seguenti campi:
Numfatt (numero progressivo della fattura)
Idserv (sarebbe l'idservizio della tabellaB)
codfis (codice fiscale della tabellaB)
dataEmis (data emissione fattura.....impostata su Now() )
vari campi relativi all'importo ed all'aliquota iva

 controllo su tale campo non sortirebbe l'effetto voluto
ed č piu' che giusto...
ma deve essere per forza un booleano ?
se il nuovo campo fosse, ad esempio, anno_ultima_fatturazione ?
ciao
Enrico

 Enrico
Ciao,
pero' dovrei aggiornarlo sempre.....metti che ho 3000 utenti, ciascuno dei
quali ha richiesto per il servizio "x" due contratti, dovrei accodare ogni
anno  6000  ed aggiornare il campo di altrettanti record nella
tabellaB.....forse non e' la soluzione migliore?!!!!
fammi sapere in merito
ciao
e.

"elio" <not...@you.gk> wrote in message
news:9k1ddc$lt7$1...@nreadB.inwind.it...

e se invece metti l'anno di riferimento sulla tabella fatture ?
diventerebbe cosi' :
Numfatt (numero progressivo della fattura)
Idserv (sarebbe l'idservizio della tabellaB)
codfis (codice fiscale della tabellaB)
dataEmis (data emissione fattura.....impostata su Now() )
ANNO_RIFERIMENTO
vari campi relativi all'importo ed all'aliquota iva
e, in piu' dovresti mettere un indice univoco su idServ+CodFis+Anno_Rif
in questo modo è il database che ti impedisce di scrivere record duplicati
Ciao
Enrico

 non viene interrotto (naturalmente viene anche fatturato anno per anno).
Intendevo salvarti un campo ulteriore che è la scadenza dell'ultima fattura
emessa per quel particolare servizio, così da poterlo consultare
direttamente senza dover elaborare l'archivio fatture.
ciao
ugo

 Enrico
Enrico ti ringrazio per la celerita' delle tue risposte.
penso  che siamo sulla buona strada...l'idea dell'anno di riferimento mi
piace (prendo due piccioni con una fava......perche' ho un'informazione in
piu'...riguardo il periodo a cui si riferisce la fattura....ed inoltre la
utilizzo il campo per il mio scopo).
In ogni caso pero' ogni volta che vado ad accodare una fattura (dato il
periodo di riferimento: "AAAA" ) devo effettuare una scansione dell'intera
tabella (tramite findfirst) per verificare che all'utente non sia stato gia
fatturato il servizio in questo per il periodo "AAAA".  Se questo e' quello
che intendevi mi sembra una buona soluzione (certo all'inizio mi prefiggevo
di evitare la scansione della tabella.....ma mi sembra impossibile a questo
punto).
Fammi sapere.
Ciao e grazie davvero
e.

 Ciao e grazie davvero
Uno è lieto di servirla! :-))
Ciao
Enrico

 Enrico
Enrico grazie per il tuo interessamento, ora studio la soluzione che
proponi. Purtroppo pero' non posso aggiungere chiavi, a monte
dell'applicazione c'e' tutto uno studio basato sul modello
entita'-relazioni, con tanto di progettazione concettuale, le chiavi che sto
utilizzando solo il risultato di quello studio. Devo cercare di utilizzare
il campo_riferimento ed eventualmente scandire la tabella (come dicevo nel
post precedente), cmq ora mi rivedo il tutto e poi ti faccio sapere (magari
in email....senza intasare il ng......l'indirizzo segnato e' falso o
corrisponde alla tua reale mailbox?)
ciao e grazie ancora
e.