[RISOLTO] Azzerare numerazione fatture
[RISOLTO] Azzerare numerazione fatture
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 ) 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
subito dopo l' insulto però aggiungete un link dove posso attingere qualche informazione
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!!!)
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 ) 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
subito dopo l' insulto però aggiungete un link dove posso attingere qualche informazione
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!!!)
Ultima modifica di bydindi il lunedì 28 febbraio 2011, 8:49, modificato 1 volta in totale.
OOo 4.1.1 su Windows Vista
- marcofoc
- Messaggi: 235
- Iscritto il: martedì 12 ottobre 2010, 16:48
- Località: Arzignano (VI)
- Contatta:
Re: Azzerare numerazione fatture
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..
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..
Non esistono buoni maestri senza buoni allievi...
Re: Azzerare numerazione fatture
Innanzitutto grazie per la tempestiva risposta proverò ad azzerare il contatore di prova anche se..... (ti riquoto)....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..
per fortuna è, appunto, un database di provamarcofoc ha scritto:... la vedo duretta..
Ciao
OOo 4.1.1 su Windows Vista
- marcofoc
- Messaggi: 235
- Iscritto il: martedì 12 ottobre 2010, 16:48
- Località: Arzignano (VI)
- Contatta:
Re: Azzerare numerazione fatture
è 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
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
Non esistono buoni maestri senza buoni allievi...
- xergio
- Messaggi: 315
- Iscritto il: lunedì 15 marzo 2010, 21:54
- Località: Arzignano (Vicenza)
- Contatta:
Re: Azzerare numerazione fatture
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.
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.
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
Re: Azzerare numerazione fatture
Non riesco a rendere univoca una coppia di colonne....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.....
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"
-Un trigger!?!? forse mi hai scambiato per un Guru di OOo.... un certo xergioxergio 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.
-Toools l' ho provato e in effetti la numerazione riparte da "1" se cambio l' anno di fatturazione è un programma eccezzzionalerrimo!!! peccato che io non riesca a fare neanche 1/1000000 di ciò che tu hai applicato al tuo tool
Ciao
OOo 4.1.1 su Windows Vista
- marcofoc
- Messaggi: 235
- Iscritto il: martedì 12 ottobre 2010, 16:48
- Località: Arzignano (VI)
- Contatta:
Re: Azzerare numerazione fatture
un trigger è una procedura che entra in funzione ogni volta che fai qualcosa al database.bydindi ha scritto: -Un trigger!?!? forse mi hai scambiato per un Guru di OOo.... un certo xergio
Fare qualcosa = insert, delete, update
Non esistono buoni maestri senza buoni allievi...
Re: Azzerare numerazione fatture
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.
OOo 4.1.1 su Windows Vista
Re: [RISOLTO] Azzerare numerazione fatture
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
Non sono ancora riuscito a capire come si fà a rendere univoca una coppia di colonne.....
Ciao
OOo 4.1.1 su Windows Vista
Re: [RISOLTO] Azzerare numerazione fatture
ciao a tutti,
scusate, ho provato varie volte ma no riesco.
Come faccio a rendere univoca una coppia di colonne?
Grazie
scusate, ho provato varie volte ma no riesco.
Come faccio a rendere univoca una coppia di colonne?
Grazie
OpenOffice 3.3 / win 8
- xergio
- Messaggi: 315
- Iscritto il: lunedì 15 marzo 2010, 21:54
- Località: Arzignano (Vicenza)
- Contatta:
Re: [RISOLTO] Azzerare numerazione fatture
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/).
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
Per cortesia, inserisci [Risolto] nel Titolo iniziale se il tuo problema è stato risolto.
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it
---
Sergio Corato
LibO 6.x su Ubuntu 18.04 / OOo 4.x su Windows XP/10 (VirtualBox)
https://efatto.it