[RISOLTO] Azzerare numerazione fatture

Discussioni sulle caratteristiche di database
Rispondi
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

[RISOLTO] Azzerare numerazione fatture

Messaggio 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!!!)
Ultima modifica di bydindi il lunedì 28 febbraio 2011, 8:49, modificato 1 volta in totale.
OOo 4.1.1 su Windows Vista
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: Azzerare numerazione fatture

Messaggio 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..
Non esistono buoni maestri senza buoni allievi...
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Azzerare numerazione fatture

Messaggio 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
OOo 4.1.1 su Windows Vista
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: Azzerare numerazione fatture

Messaggio 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
Non esistono buoni maestri senza buoni allievi...
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: Azzerare numerazione fatture

Messaggio 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.
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
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Azzerare numerazione fatture

Messaggio 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
OOo 4.1.1 su Windows Vista
Avatar utente
marcofoc
Messaggi: 235
Iscritto il: martedì 12 ottobre 2010, 16:48
Località: Arzignano (VI)
Contatta:

Re: Azzerare numerazione fatture

Messaggio 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
Non esistono buoni maestri senza buoni allievi...
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: Azzerare numerazione fatture

Messaggio 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:
OOo 4.1.1 su Windows Vista
Avatar utente
bydindi
Volontario
Volontario
Messaggi: 258
Iscritto il: lunedì 21 febbraio 2011, 10:16

Re: [RISOLTO] Azzerare numerazione fatture

Messaggio 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
OOo 4.1.1 su Windows Vista
pinosauro
Messaggi: 37
Iscritto il: sabato 7 settembre 2013, 8:33

Re: [RISOLTO] Azzerare numerazione fatture

Messaggio da pinosauro »

ciao a tutti,

scusate, ho provato varie volte ma no riesco.

Come faccio a rendere univoca una coppia di colonne?

Grazie :?:
OpenOffice 3.3 / win 8
Avatar utente
xergio
Messaggi: 315
Iscritto il: lunedì 15 marzo 2010, 21:54
Località: Arzignano (Vicenza)
Contatta:

Re: [RISOLTO] Azzerare numerazione fatture

Messaggio 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
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
Rispondi