Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Fatturazione Numero sequenziale
venerdì 07 novembre 2014 - 09.49
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
pepp1989
Profilo
| Newbie
18
messaggi | Data Invio:
ven 7 nov 2014 - 09:49
Buongiorno a tutti,
sono alle prime armi con sql server, devo realizzare un programma di fatturazione. La mia difficoltà è di creare una tabella fatture con numero sequenziale che viene resettato ogni anno.
Ad esempio se ora ho la fattura 250/2014 nel 2015 dovrò avere la fattura 1/2015.
Come posso gestire questa cosa su SQL server?
Un amico mi ha consigliato di usare di creare una SEQUENCE(non so come usarla), anche se ho letto in rete che se una transazione va in rolleback viene perso un numero quindi non credo possa andare bene e anche utilizzare la funzione IDENTITY(1,1) visto che anche in quel caso posso perdere l'indice in caso di rollback.
Grazie a tutti in anticipo per il vostro aiuto
.
iif
Profilo
| Expert
713
messaggi | Data Invio:
ven 7 nov 2014 - 09:52
Ciao devi usare l'istruzione set identiy insert
pepp1989
Profilo
| Newbie
18
messaggi | Data Invio:
ven 7 nov 2014 - 10:33
Ciao,
grazie per la tempestiva risposta.
se io creo una tabella ad esempio fatture fiscali:
CREATE TABLE [dbo].[fatture_fiscali](
[NumeroFattura] [int] IDENTITY(1,1) NOT NULL,
--chiave esterna con la fattura proforma
[IDFattura] [int] NOT NULL,
[DataFattura] [smalldatetime] NOT NULL,
CONSTRAINT [PK_fatture_fiscali] PRIMARY KEY CLUSTERED
(
[NumeroFattura] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
quando faccio l'insert che controllo devo fare per assicurarmi che il numero fattura sia sequenziale? E soprattuto che l'anno 2015 il numero fattura venga resettato?
grazie per l'aiuto.
iif
Profilo
| Expert
713
messaggi | Data Invio:
ven 7 nov 2014 - 12:46
Metti nel campo anno come valore di default year(getdate()), in modo che assuma l'anno della data del sistema
jekisi
Profilo
| Senior Member
460
messaggi | Data Invio:
sab 8 nov 2014 - 20:28
La cosa è molto semplice, ti devi gestre gli anni finanziari.
Alla fine dell' anno crei una cartella, magari sotto la cartella principale del programma, alla quale come nome assegni l' anno finanziario, dopo di che, azzeri il db della cartella principale e ricominci la numerazione per l' anno nuovo.
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
lun 10 nov 2014 - 16:51
Se il programma lo usa solo un utente potresti fare una query sulla tabella delle fatture del genere:
select max(numero) + 1 from fatture where year(data) = [anno che ti interessa]
Se più utenti inseriscono la fattura potresti avere il problema di un numero doppio oppure di lasciare dei buchi, allora ti conviene assegnare il numero alla fine quando salvi la fattura e usare la stessa query all'interno della query di inserimento, così:
insert into fatture ( data, numero, ... ) values ( [data inserita], ( select max(numero) + 1 from fatture where year(data) = year( [data inserita] ) ), ... )
In questo modo hai il numero sequenziale in base all'anno della data della fattura e non corri il rischio di numeri doppi o buchi.
MaxMag
Profilo
| Newbie
12
messaggi | Data Invio:
dom 14 dic 2014 - 13:40
Non è una questione di sql server ma di logica di programmazione. Come ti hanno già suggerito devi gestire gli esercizi. Per ogni nuovo anno inserisci un nuovo record nel quale ci saranno i campi dei vari contatori da incrementare: n. fattura, ddt, ordini, preventivi ecc.
Ogni volta che generi un nuovo documento incrementi il valore del campo e lo leggi per assegnarlo alla tua fattura. In questo modo puoi anche lavorare in sovrapposizione di esercizi. I primi giorni di gennaio potresti infatti aver la necessità sia di produrre fatture con data 2015 sia dover fatturare dei vecchi ddt di competenza 2014.
pepp1989
Profilo
| Newbie
18
messaggi | Data Invio:
mar 16 dic 2014 - 15:09
Grazie a tutti per il vostro aiuto.
Il mio problema è che all'interno dell'applicazione devo far visualizzare il n. fattura all'utente, il quale devo poterlo anche cambiare però ovviamente essendo un' applicazione web devo stare attento alla concorrenza, perchè se mi prendo l'ultimo numero fattura come mi avete suggerito attraverso una query nel frattempo un altro utente potrebbe usare quello stesso numero, non so se mi sono spiegato
MaxMag
Profilo
| Newbie
12
messaggi | Data Invio:
mar 16 dic 2014 - 15:34
Quindi l'utente può inserire il numero fattura che vuole? In questo modo la numerazione (che per legge dovrebbe essere progressiva) diventa un groviera. Perchè sorgono i problemi di concorrenza? In che senso?
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
mar 16 dic 2014 - 17:13
Se hai più utenti contemporaneamente devi per forza chiederlo alla fine, deve essere automatico e non modificabile in fase di primo inserimento, quindi calcoli il numero progressivo con una query (come scritto nella mia risposta precedente) e memorizzi il documento, altrimenti avrai una numerazione piena di buchi e doppioni.
Eventualmente puoi in fase di modifica dare la possibilità di cambiare il numero fattura segnalando comunque eventuali doppioni o buchi con altre query di controllo e chiedendo di forzare la modifica.
pepp1989
Profilo
| Newbie
18
messaggi | Data Invio:
mar 16 dic 2014 - 17:55
>Quindi l'utente può inserire il numero fattura che vuole? In
>questo modo la numerazione (che per legge dovrebbe essere progressiva)
>diventa un groviera. Perchè sorgono i problemi di concorrenza?
>In che senso?
Più utenti possono accedere alla stessa applicazione quindi se faccio visualizzare l'ultimo n.fattura un altro utente potrebbe entrare nello stesso istante e prendere quello stesso numero fattura, quindi sicuramente la soluzione migliore come mi ha suggerito gsistemi è di permettere solo dopo l'inserimento la modifica da parte dell'utente del n. fattura.
Grazie ancora per i vostri suggerimenti.
Un ultima cosa se in futuro voglio far diventare la mia applicazione multi aziendale devo ovviamente prevederlo già da ora come potrei strutturare il database?
Grz
gsistemi
Profilo
| Junior Member
100
messaggi | Data Invio:
mar 16 dic 2014 - 18:54
devi solo aggiungere il campo IDAZIENDA nelle tabelle clienti, fornitori, fatture, ecc... Finchè non attivi la funzione multiaziendale puoi memorizzare il campo a 0 o 1 di default. Ti consiglio di prevedere già le query che filtrano i dati per azienda anche impostando manualmente il valore a 1 o 0, in questo modo quando attiverai la funzione multiaziendale ti basterà passare il valore dell'azienda selezionata e sostiturlo a quello di default.
dompa72
Profilo
| Senior Member
245
messaggi | Data Invio:
gio 8 gen 2015 - 18:36
Scusate se rispondo in modo forse troppo semplice.
1. Tabella per la gestione dei numeratori
2. Campo anno, numero e tipo nella tabella documenti
2. Chiave primaria sui campi Anno, Numero e tipo della tabella di testata fatture
3. Il numero viene proposo e l'utente vedrà il numero definitivo solo al salvataggio della fattura
4. Per gestire la concorrenza un bel READ committed in fase di scrittura su tutta la transazione e un snapshot del numeratore in fase di proposta.
5. Non conosco applicazioni ERP/Gestionali che permettono di autodefinirsi i numeratori, nel mio lavoro per modificare una numerazione (più un buco a seguito di una eliminazione di documenti) devo bloccare gli utenti, questo per garantire il rappresentante legale della consistenza dei dati ed evitare guai legali.
Saluti e buon anno
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !