Numero di fattura vb.net

lunedì 30 gennaio 2012 - 08.33
Tag Elenco Tags  VB.NET  |  .NET 3.5  |  Windows 7  |  Visual Studio 2010  |  SQL Server 2008  |  Access (.mdb)  |  Office 2010  |  Internet explorer 8.0  |  Firefox  |  VBScript  |  CSS 3.0  |  HTML 5

raf741804 Profilo | Newbie

Ciao a tutti
ho un problema con il software che sto creando,
infatti dovrei creare il campo con il numero di fattura,tenedo
presente che questo con l'anno nuovo si azzera e riparte da 1
ho una text box dove vedo il numero di fattura e l'anno
nfat/anno
nfat è auto incrementato,ma non è l'id
il tutto controllato da un tasto dove scrivo crea nuovo documento.
qualcuno può postarmi il codice per risolvere sto problema?

darkeric Profilo | Senior Member

Perchè non ti crei una tabella a parte?

id
tipodocumento
numero
anno


dove memorizzi l'ultimo numero di documento esistente
codi quando crei un nuovo documento
aggiungi uno a quel numero e aggiorni il campo

poi se stai emettendo la prima fattura del'anno successivo
ovviamente filtrando per anno non ti trova nessuna riga
automaticamente crei il nuovo anno con numerazione 0
e se poi aggiorni a 1 appena crei il primo documento

in genere si fa cosi!


Programmatore per passione!

raf741804 Profilo | Newbie

sai avrei bisogno di un esempio perchè
credimi lo so che è semplice,ma non riesco a metterci
le mani.

darkeric Profilo | Senior Member

posta un pò del tuo codice cosi vediamo di dargli un occhiata

e poi lo integriamo con la gestione dei progressivi



Programmatore per passione!

raf741804 Profilo | Newbie

io pensavo di fare in questo modo,ma non funziona:
Dim six, dex As String
If InStr(1,NumeroTextBox.Text, "/") <> 0 Then
six = (NumeroTextBox.Text & "/") + 1
six = (six + 1)
If six <= 9 Then
six = ("0" & six)
Else
six = CStr(six)
End If
End If
dex = (Date.Today.Year)
If dex <> Date.Today.Year Then
dex = Date.Today.Year
six = "01"
End If
six = NumeroTextBox.Text
NumeroTextBox.Text = six & "/" & dex

salvami ti prego

darkeric Profilo | Senior Member

ok ma con il DB come ci interagisci

da dove lo prendi l'ultimo numero per
proseguire con la numerazione?

dove salvi le fattura?

e soprattutto cosa salvi di ogni fattura

purtroppo non riesco a capire come stai gestendo queste cose!


Programmatore per passione!

raf741804 Profilo | Newbie

allora io ho 3 tabelle che chiamo testata,corpo e calce legate tra di loro con relazione uno a uno
quando salvo la fattura con una query ho una lista con tutti i documenti che ho emesso sia fatture che ddt
poi se mi serve cercare una fattura basta che filtro il numero e la trovo e me la stampo.
però non capisco io chiedo solo che la numerazione dei documenti a fine anno torni ad uno.

ti ho fatto vedere il ciclo che cerco di utilizzare per fare questi,ma non mi riesce.
se poi aiutarmi ad aggiustare il codice che ti ho scritto,perchè sono bloccatissimo.

raf741804 Profilo | Newbie

ti spiego come ho ragionato forse quello che ho pensato
sbaglio nel metterlo in atto:
Dim six, dex As String 'Perchè voglio che nella casella numero ci sia la scritta esempio 01/2012
If InStr(NumeroTextBox.Text, "/") <> 0 Then 'se il numero è diverso da zero
six = (NumeroTextBox.Text & "/") 'mettimelo nella textbox Numerotextbox
six = (six + 1) 'incrementami il numero di uno (forse sbaglo anche qua)
If six <= 9 Then 'se il numero è compreso tra 1 e 9
six = ("0" & six) 'mettimi uno zero davanti
Else
six = CStr(six) 'altrimenti no
End If
End If
dex = (Date.Today.Year) nella parte destra mettici l'anno
If dex <> Date.Today.Year Then 'se la parte destra è diversa dall'anno in corso allora
dex = Date.Today.Year 'cambia l'anno
six = "01" 'emetti a sinistra il numero 01
End If
NumeroTextBox.Text = six & "/" & dex 'il numero alla fine è dato da six e dex



ti prego dimmi dove sbaglio

darkeric Profilo | Senior Member

>ti spiego come ho ragionato forse quello che ho pensato
>sbaglio nel metterlo in atto:
>Dim six, dex As String 'Perchè voglio che nella casella numero
>ci sia la scritta esempio 01/2012
occhio che six e dex li stai dichiarando come String
>If InStr(NumeroTextBox.Text, "/") <> 0 Then 'se il numero
>è diverso da zero
>six = (NumeroTextBox.Text & "/") 'mettimelo nella textbox Numerotextbox
>six = (six + 1) 'incrementami il numero di uno (forse sbaglo
>anche qua)
quindi ammettiamo che six abbia valore 10
è facile che quando fai six = six + 1 ti restituisca 101 e non 11
>If six <= 9 Then 'se il numero è compreso tra 1 e 9
>six = ("0" & six) 'mettimi uno zero davanti
>Else
>six = CStr(six) 'altrimenti no
>End If
>End If
>dex = (Date.Today.Year) nella parte destra mettici l'anno
e ci mette l'anno corrente
>If dex <> Date.Today.Year Then 'se la parte destra è diversa
>dall'anno in corso allora
non può succedere perchè hai già dato il valore dell' anno corrente
>dex = Date.Today.Year 'cambia l'anno
>six = "01" 'emetti a sinistra il numero 01
>End If
>NumeroTextBox.Text = six & "/" & dex 'il numero alla fine è dato
>da six e dex
>
>

perdonami ma secondo me stai sbagliando approccio

perchè non la gestisci cosi se non vuoi farti una tabella coi progressivi.

creati 2 campi per gestire il numero
anno
numero

dove salverai ovviamente l'anno e il numero di fattura
in visualizzazione usi 2 textbox e lo "/" lo metti in mezzo alle 2 con una label
(la stampa è un' altra cosa!)

quando crei un nuovo documento devi ordinare la tabella per anno e per numero (ovviamente questi valori devono essere dichiarati INT non string)
cosi l'ultima riga dà l'ultima fattura emessa

a questo punto assegno
AnnoTextbox.text = today.year
if annotextbox.text = (valore di anno dell' ultima fattura) then
numerotextbox.text = (valore del numero dell' ultima fattura) + 1
Else
numerotextbox.text = 1

finito
>
>ti prego dimmi dove sbaglio

spero di esserti stato utile!


Programmatore per passione!

raf741804 Profilo | Newbie

mi manca definire questo:

valore di anno dell' ultima fattura

fammi sapere

Peppino Profilo | Junior Member

Guarda questo è un esempio che avuto mi sempra da Alex che ho aggiustato alla mia esegenza. Prova.
Private Function NumeroDocumento() As Integer

Try
'Cerco il numero del documento più alto salvato
Dim cmdTmp As New SqlCommand
cmdTmp.Connection = ConnessioneDatabase
cmdTmp.CommandText = "SELECT MAX(Prog) FROM DocumDdt WHERE anno = DATEPART(year, CURRENT_TIMESTAMP)"
ConnessioneDatabase.Open()
Dim ris1 As Object = cmdTmp.ExecuteScalar()
ConnessioneDatabase.Close()
If ris1 Is DBNull.Value Or ris1 Is Nothing Then
Return 1
End If
Return Convert.ToInt32(ris1) + 1

Catch ex As Exception
Messaggi.Errore("Errore non gestito nell'individuazione del nuovo numero documento : " & _
ex.ToString, "Attenzione")
Return 0
End Try
End Function

raf741804 Profilo | Newbie

Greazie davvero sei molto bravo ciao
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5