Pagina 1 di 1

[RISOLTO] Azzerare numerazione fatture

Inviato: lunedì 21 febbraio 2011, 11:04
da bydindi
Buongiorno a tutti
Un saluto a tutta la community.
Sto' cercando di elaborare un piccolo progetto per la gestione di un database (sono alle primissime armi) cerco di "studiare" gli esempi che trovo in questo forum e tra le varie difficoltà ho incontrato questa:

Come da titolo, facendo delle prove sulla compilazione di una fattura nel campo IDFattura (al quale ho assegnato "si" nell' opzione valore automatico) ho notato che non si può tornare indietro, se ad esempio modifico il numero fattura 1 e gli assegno il valore 85 (un numero a caso) anche se cancello l' intera riga al successivo record il valore assegnato sarà 86, ed è giusto che sia così, la registrazione di un record deve essere univoca e questo evita che si combinino pasticci nel database (e anche nella fatturazione nel mio caso!), ma la domanda sorge spontanea (ad un niubbo come mè ovviamente :lol: ) come fare quando al 1 Gennaio le fatture ripartono da "0" (zero) ?

Sono consapevole del fatto che magari è un argomento già trattato (giuro che ho provato cercare) e quindi vi autorizzo a insultarmi :lol: :lol:
subito dopo l' insulto però aggiungete un link dove posso attingere qualche informazione :ouch:

Grazie

P.S.
Dimenticavo, nel database ho creato le varie tabelle con le relazioni e i vari formulari associati alle tabelle, ho paura che cancellando e/o modificando la tabella il database non funzioni più (nel frattempo sono arrivato alla fattura di prova numero 999999 e non riesco a tornare indietro!!!)

Re: Azzerare numerazione fatture

Inviato: lunedì 21 febbraio 2011, 11:59
da marcofoc
un passo alla volta:
per azzerare un contatore progressivo:
http://user.services.openoffice.org/it/ ... lumn#p4123

per quanto riguarda la ripartenza all'anno successivo... la vedo duretta..
c'è bisogno di una progettazione diversa del database..

Re: Azzerare numerazione fatture

Inviato: lunedì 21 febbraio 2011, 12:24
da bydindi
marcofoc ha scritto:un passo alla volta:
per azzerare un contatore progressivo:
http://user.services.openoffice.org/it/ ... lumn#p4123

per quanto riguarda la ripartenza all'anno successivo... la vedo duretta..
c'è bisogno di una progettazione diversa del database..
Innanzitutto grazie per la tempestiva risposta ;) proverò ad azzerare il contatore di prova anche se..... (ti riquoto)....
marcofoc ha scritto:... la vedo duretta..
per fortuna è, appunto, un database di prova
Ciao

Re: Azzerare numerazione fatture

Inviato: lunedì 21 febbraio 2011, 12:26
da marcofoc
è una cosa che devo fare e risolvere anche io, cmq, a naso, io farei così:
tabella "fatture"
prog_fatura (numero progressivo fattura pluriennale, seriale, chiave primaria)
n_fattura (progressivo fattura dell'anno, seriale, da azzerare ad ogni inizio)
anno_fattura (indica l'anno della fattura, esempio /11)
rendo univoca la coppia di colonne (n_fattura e prog_fattura), così eviti i doppioni proprio come se fosse la chiave primaria.

Ora, ci sono personaggi molto più esperti di me qui nel forum.. se mi vogliono correggere, avanti prego!!

Marco

Re: Azzerare numerazione fatture

Inviato: lunedì 21 febbraio 2011, 22:59
da xergio
E' più comodo se usi come chiave primaria la coppia nr_fattura e anno_fattura, a questo punto puoi anche non mettere la colonna seriale.
Per automatizzare la numerazione puoi usare un trigger (o anche una macro), così facendo quando cancelli una fattura e la riemetti verrà usato il numero giusto.
Le righe della fattura le hai messe su un'altra tabella, no?
Per un esempio funzionante puoi guardarti l'extension Toools.

Re: Azzerare numerazione fatture

Inviato: martedì 22 febbraio 2011, 12:33
da bydindi
marcofoc ha scritto:rendo univoca la coppia di colonne (n_fattura e prog_fattura), così eviti i doppioni proprio come se fosse la chiave primaria.
xergio ha scritto:E' più comodo se usi come chiave primaria la coppia nr_fattura e anno_fattura.....
Non riesco a rendere univoca una coppia di colonne.... :oops: :oops: :oops:
Se assegno a due campi l'incremento automatico mi appare al loro fianco il simbolo della chiave primaria ma al momento del salvataggio mi salta fuori "errore durante il salvataggio della struttura della tabella:" "tentativo di definire una seconda chiave primaria"
xergio ha scritto:Per automatizzare la numerazione puoi usare un trigger (o anche una macro), così facendo quando cancelli una fattura e la riemetti verrà usato il numero giusto//Per un esempio funzionante puoi guardarti l'extension Toools.
-Un trigger!?!? :?: forse mi hai scambiato per un Guru di OOo.... un certo xergio :D :D :D
-Toools l' ho provato e in effetti la numerazione riparte da "1" se cambio l' anno di fatturazione :bravo: :bravo: è un programma eccezzzionalerrimo!!! peccato che io non riesca a fare neanche 1/1000000 di ciò che tu hai applicato al tuo tool

Ciao

Re: Azzerare numerazione fatture

Inviato: martedì 22 febbraio 2011, 13:26
da marcofoc
bydindi ha scritto: -Un trigger!?!? :?: forse mi hai scambiato per un Guru di OOo.... un certo xergio :D :D :D
un trigger è una procedura che entra in funzione ogni volta che fai qualcosa al database.
Fare qualcosa = insert, delete, update

Re: Azzerare numerazione fatture

Inviato: martedì 22 febbraio 2011, 15:15
da bydindi
Si Marco ho visto anche sul blog di xergio che ha trattato l'argomento "trigger".... ma come hai detto tu, un passo alla volta, per ora vorrei capire come assegnare una chiave primaria ad una coppia di campi con incremento automatico.

:super:

Re: [RISOLTO] Azzerare numerazione fatture

Inviato: lunedì 28 febbraio 2011, 8:55
da bydindi
Ho messo risolto per quanto riguarda il quesito principale (Azzerare numerazione fattura) :) :)
Non sono ancora riuscito a capire come si fà a rendere univoca una coppia di colonne..... :( :(

Ciao

Re: [RISOLTO] Azzerare numerazione fatture

Inviato: mercoledì 25 settembre 2013, 16:17
da pinosauro
ciao a tutti,

scusate, ho provato varie volte ma no riesco.

Come faccio a rendere univoca una coppia di colonne?

Grazie :?:

Re: [RISOLTO] Azzerare numerazione fatture

Inviato: giovedì 26 settembre 2013, 21:56
da xergio
Ciao,
in modifica struttura della tabella, clicchi su "Struttura indice" (in Strumenti) e crei un nuovo indice univoco con i due campi che ti interessano (la chiave primaria non si tocca, resta sempre quella di prima).

Per ripartire con la numerazione, ho usato una macro che ricerca l'ultimo numero dell'anno e, se non lo trova, parte da 1, te la allego - anche se l'sql deve essere adattato al caso e vengono usate magari altre funzioni, comunque trovi tutto nella storica oxt Toools (http://www.icstools.it/doc/).

Codice: Seleziona tutto

'***else get type of document, get last nr. of document, insert nr. of document*******
Sub LastNrDoc(oEv)
oModel = oEv.Source.getModel
oFormDoc = oModel.getParent

If ( oFormDoc.getByName("typeDoc").CurrentValue ) = "" Then
	'missing typedoc
	exit sub
Elseif IsEmpty( oFormDoc.getByName("date").Date ) Then
	'missing date
	exit sub	
Endif
oFormDoc.getByName("typeDoc").commit()
oFormDoc.getByName("date").commit()
oFormDoc.getByName("date").Enabled = False
oFormDoc.getByName("typeDoc").Enabled = False
sDocType = oFormDoc.getColumns.getByName("doc_type").getString
oConn = oFormDoc.ActiveConnection
oStmt = oConn.createStatement

sSql = "SELECT ""type"", ""id_doc_ctg"" FROM ""icstoolsdb.doc_type"" AS ""icstoolsdb.doc_type"" WHERE ""type"" = '"+sDocType+"'"
oRs = oStmt.executeQuery(sSql)
If oRs.next then
	iCatDoc = oRs.getInt(oRs.findColumn("id_doc_ctg"))
Endif

uDate = oFormDoc.getColumns.getByName("data").getDate
iAnno = uDate.Year()
sSql = "SELECT MAX( ""icstoolsdb.doc"".""doc_nr"" ) AS ""doc_nr"" FROM ""icstoolsdb.doc"" AS ""icstoolsdb.doc"", ""icstoolsdb.doc_type"" AS ""icstoolsdb.doc_type"", ""icstoolsdb.doc_ctg"" AS ""icstoolsdb.doc_ctg"" WHERE ""icstoolsdb.doc"".""doc_type"" = ""icstoolsdb.doc_type"".""type"" AND ""icstoolsdb.doc_type"".""id_doc_ctg"" = ""icstoolsdb.doc_ctg"".""id"" AND ""icstoolsdb.doc_ctg"".""id"" = '"+iCatDoc+"' AND YEAR( ""data"" ) = '"+iAnno+"'"
oRs = oStmt.executeQuery(sSql)
If oRs.next then
	iNextNrDoc = ( oRs.getInt(oRs.findColumn("doc_nr")) ) + 1
Else
	iNextNrDoc = 1
Endif

oDocNr = oFormDoc.getColumns.getByName("doc_nr")
oDocNr.updateInt(iNextNrDoc)
openOrCloseDoc(oEv)
End Sub