Newsgroup: it.comp.appl.access
Titolo: NUMERO PROGRESSIVO PER ANNO RILEVATO DA FORM

Buongiorno a tutti,
ho cercato un po' tra i vari post ma ho trovato come creare un numero 
progressivo per anno (mi serve per protocollare fatture) e come estrarre 
l'anno da una data (year(date)).
Non riesco per� ad unire le 2 cose e soprattutto ad estrarre l'anno dalla 
form [AVVIO DATA] che ha
- il solo campo [DATA] che ha maschera di input 00/00/0000;0;_ e valore 
predef a now()
Nella formattazione dell'ultima parte del campo seguente mi trovo quindi in 
difficolt� nell'indicare l'anno:
=Format("A") & Format("/") & 
Format([DETTAGLI_FATTURE_ACQUISTO_PROTOCOLLO];"0000") & Format("/") & 
Format(Right(Year(Now());2))
Sempre che secondo voi, trovando questa soluzione, io riesca a soddisfare la 
mia esigenza di avere il campo "PROTOCOLLO" che si incrementi in base 
all'anno, ovvero:
nella form [AVVIO DATA] inserisco 01/02/2011
il protocollo della fattura registrata sar� 0025/11, quella dopo 
0026/11.....
se invece nella form [AVVIO DATA] inserisco 31/12/2010, il protocollo della 
fattura registrata dovrebbe seguire l'incremento dell'anno 2010 e quindi 
avere 0285/10, 0286/10....etc...
Io ho provato con right(year(form![AVVIO DATA]![DATA]);2) ma nulla.... dove 
sbaglio?
Grazie.
Giorgia 


Te l'avro' spiegato 2'433'455'544'322 volte :D
Per cui incremento e con questa siamo a 2'433'455'544'323....
se questi dati 0285/10, 0286/10, ecc... sono in una tabella, puoi fare
una query in cui separi i campi:
Cmp1 = int(left(TuoCampo;4))
Cmp2 = int(right(TuoCampo;2))
li raggruppi e per il Cmp1 metti MAX
In questo modo avrai per ogni anno il numero massimo di documento
registrato...
a questo punto per ogni inserimento potrai andarti a leggere a volo
questa query da recordset filtrandola per anno e recuperare il numero
massimo registrato... a sto punto verra' da se che il numero da
registrare nuovo sara' quello recuperato + 1...
chiaro? ;)

 ha scritto nel messaggio 
news:b5349daa-dbf6-445a...@m7g2000vbq.googlegroups.com...

Ehy ciao Prof! ;-)
uhm...posso dire "chiarino"?
nel senso che l'anno dove e come lo recupero? pensavo dalla form [AVVIO 
DATA]....ma non riesco....
Giorgia 

?"Giorgia"  ha scritto nel messaggio news:ii8rs6$lih$1...@speranza.aioe.org...


Giorgia
___
Ciao Giorgia, non usare now ma data fattura, altrimenti se ad inizio anno 
scrive le ultime dell'anno precedente, ti scatta il contatore..
inoltre no nha molto senso Format("A") & Format("/") , format ti permette di 
appunto formattare cioč mostrare una data o un numero in un certo modo
FORMAT(1,"000") esce "001"
Format(date, "ggg g.mmm.aaaa") esce mar "01.feb.2011"
nel tuo caso basta ="A/"
MA

 Giorgia

 Giorgia
Figurati se hai capito male prof!! sono io che sono una chiavica!!
Query creata, ma dato che per avere un unico scadenzario avevo creato un 
campo con valore predef.
=Format("A") & Format("/") & 
Format([DETTAGLI_FATTURE_ACQUISTO_PROTOCOLLO];"0000") & Format("/") & 
Format(Right(Year(Now());2))
(nella form di inserimento delle fatture di vendita avr� 
=Format("V")......etc....)
come mi devo comportare? Elimino i valori predefiniti dai campi delle form e 
uso il recordset?
a proposito......un aiutino per la stringa del recordset?:-))
Ma poi � la soluzione migliore? In fondo, un campo non numerico mi crea dei 
problemi per le relazioni.....e infatti avevo anche il campo PROTOCOLLO con 
valore predefinito =Nz(DMax("[PROTOCOLLO]";"[FATTURE ACQUISTO]");0)+1
(idem per FATTURE VENDITE)....
Giorgia 


...a parte il fatto che fai un po' un uso ad capocchiam del
"Format" :D
se proprio devi, si scrive cosi' :
 ="A/" & Format([DETTAGLI_FATTURE_ACQUISTO_PROTOCOLLO];"0000") & "/" &
Format(Now();"yy")
io userei recordset come ti dicevo :
Aiutino :
Dim db As Database
Dim rs As DAO.Recordset
Set db =  CurrentDb
Set rs = db.OpenRecordset("SELECT * FROM TuaTabella Where TuoiCampi =
Qualcosa")
ecc...
PS la soluzione miglioere e' quella che piu' facilmente risolve il
problema.


ARIPERDONAMI ma.....come collego il discorso del recordset alla query che ho 
creato?
Mi riferisco a quando mi hai scritto:
" In questo modo avrai per ogni anno il numero massimo di documento 
registrato...
 a questo punto per ogni inserimento potrai andarti a leggere a volo
 questa query da recordset filtrandola per anno e recuperare il numero
 massimo registrato... a sto punto verra' da se che il numero da
 registrare nuovo sara' quello recuperato + 1..."
Giorgia 

 creato?
se ti crei quella query, potrai usare il Dlookup("TuoCampo";"TuaQuery")
+1

 ha scritto nel messaggio 
news:c4caf970-129a-45ea...@4g2000yqo.googlegroups.com...


Allora, ci dovrei quasi essere....
Il mio problema ora č: la query č questa
SELECT Max(Int(Left([PROTOCOLLO],4))) AS NUMERO, Int(Right([REGISTRAZIONE 
IVA],2)) AS ANNO
FROM [FATTURE VENDITA]
GROUP BY Int(Right([REGISTRAZIONE IVA],2));
ma io la data REGISTRAZIONE IVA la inserisco in un secondo momento, quando 
registro la fattura e piů precisamente
Private Sub DATA_FATTURA_BeforeUpdate(Cancel As Integer)
If IsNull([REGISTRAZIONE IVA]) Then
[REGISTRAZIONE IVA] = [DATA FATTURA]
End If
End Sub
ed effettuando il seguente controllo
Private Sub REGISTRAZIONE_IVA_LostFocus()
If Month([REGISTRAZIONE IVA]) <> Month(Forms![AVVIO DATA]!DATA) Or 
Year([REGISTRAZIONE IVA]) <> Year(Forms![AVVIO DATA]!DATA) Then MsgBox "Data 
fuori periodo IVA"
End Sub
L'unica cosa che potrebbe far funzionare correttamente l'incremento del 
protocollo, sarebbe quella (a mio modestissimo avviso), di fare riferimento 
alla DATA della maschera AVVIO DATA che č una maschera non associata che si 
apre all'avvio del db e che si puň controllare da un pulsante presente sulla 
form NUOVA FATTURA VENDITA.
Ho provato a indicare
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord acForm, Me.Name, acNewRec
Me.REGISTRAZIONE_IVA = Form![AVVIO DATA]![DATA]
Me.PROTOCOLLO = DLookup("[NUMERO]", "[QueryPROTOCOLLOVENDITE]") + 1
End Sub
ma la form AVVIO DATA non viene riconosciuta...che problema ci puň essere?
Grazie.
Giorgia

 ha scritto nel messaggio 
news:ijdp7u$km7$1...@speranza.aioe.org...

Davvero una demente!
la sintassi giusta era forms! e non form!
scusate l'intasamento.
Giorgia 

 ha scritto nel messaggio 
news:ijdpv5$n63$1...@speranza.aioe.org...

il problema non riesco comunque a risolverlo, anche con la sintassi 
corretta, la stringa a volte funziona e a volte no (non capisco da cosa 
dipenda) e comunque il PROTOCOLLO non viene aggiornato in base all'anno 
inserito nella DATA di avvio.....
Giorgia 

 Giorgia
Guardati il mio demo "FATTURE" su Accessgroup... in quell'esempio c'e'
il numero incrementale rispetto alla data...
;)

 Giorgia
Guardati il mio demo "FATTURE" su Accessgroup... in quell'esempio c'e'
il numero incrementale rispetto alla data...
;)
L'ho guardato e ti ringrazio, ma la tua struttura mi sembra troppo diversa 
dalla mia e non vorrei pasticciare ulteriormente nel stravolgere tutto.
Ci dovrei quasi essere, ma non mi funziona un piccolo tassello.
Dunque,
form NUOVA_FATTURA_VENDITA
cmp PROTOCOLLO =DLookUp("[NUMERO]";"[QueryPROTOCOLLOVENDITE]")+1
cmp REGISTRAZIONE_IVA=[Maschere]![AVVIO DATA]![DATA]
e la query in questione nel dettaglio �
SELECT Max(((Int(Left([PROTOCOLLO],4))))) AS NUMERO, 
Int(Right([REGISTRAZIONE IVA],2)) AS ANNO
FROM [FATTURE VENDITA]
GROUP BY Int(Right([REGISTRAZIONE IVA],2));
mi controllo la data di REGISTRAZIONE_IVA tramite la form pop up AVVIO DATA, 
che si apre su Apertura della form NUOVA_FATTURA_VENDITA
ed � qui che sorgono i problemi:
1- se vario la data, il cmp REGISTRAZIONE_IVA non viene aggiornato anche se 
ho provato a indicare un requery su chiusura della pop up
2- attualmente, non ho dati inseriti per l'anno 2010, ma se faccio una 
prova, variando la data REGISTRAZIONE_IVA, il cmp PROTOCOLLO continua a 
seguire la numerazione dell'anno 2011, anche se nella query di cui sopra � 
evidente che per l'anno 2010 non ci siano record
Sbaglio sicuramente, qualcuno inorridir� sicuramente....ma potreste 
aiutarmi?
Grazie


Riepiloghiamo, altrimenti facciamo solo casino :
1) Tabella (Es. tbl_FATTURE) in cui hai tra l'altro "cmp_DATA" e
"cmp_Numero" (i nomi li ho inventati)
2) Sulla tabella tbl_FATTURE, crei una qry_NUM_MAX_ANNO del tipo :
SELECT Max(tbl_FATTURE.cmp_NUMERO) AS NUMERO, Year([cmp_DATA]) AS ANNO
FROM tbl_FATTURE
GROUP BY Year([cmp_DATA]);
In questo modo avrai a livello DB sempre a disposizione per ogni
singolo anno, il numero massimo raggiunto in archivio.
3) All'inserimento del nuovo documento, metterai una data (*), e
andrai ad interrogare la query filtrata sulla data (*) che hai
inserito. Per farlo ti basterà un semplice
nz(dlookup("NUMERO";"qry_NUM_MAX_ANNO";"ANNO=" & TuoCampoData);0)
Es. Crea una maschera (Maschera1)
Inserisci 2 campi
cmp_1
cmp_2
Su "aggiorna" di cmp_1 metti questo codice
me.cmp_2 = Nz(DLookup("NUMERO", "qry_NUM_MAX_ANNO", "ANNO='" &
Me.cmp_1 & "'")) + 1
ora metti l'anno in cmp_1 e premi invio... vedrai che lui andra' a
leggere i valori relativi al NUMERO massimo relativamente all'anno
indicato e ti aggiungera' 1, ovvero ti dara' il numero del nuovo
documento...
piu' di cosi' non riesco a spiegartelo.

Riepiloghiamo, altrimenti facciamo solo casino :
1) Tabella (Es. tbl_FATTURE) in cui hai tra l'altro "cmp_DATA" e
"cmp_Numero" (i nomi li ho inventati)
2) Sulla tabella tbl_FATTURE, crei una qry_NUM_MAX_ANNO del tipo :
SELECT Max(tbl_FATTURE.cmp_NUMERO) AS NUMERO, Year([cmp_DATA]) AS ANNO
FROM tbl_FATTURE
GROUP BY Year([cmp_DATA]);
In questo modo avrai a livello DB sempre a disposizione per ogni
singolo anno, il numero massimo raggiunto in archivio.
3) All'inserimento del nuovo documento, metterai una data (*), e
andrai ad interrogare la query filtrata sulla data (*) che hai
inserito. Per farlo ti basterŕ un semplice
nz(dlookup("NUMERO";"qry_NUM_MAX_ANNO";"ANNO=" & TuoCampoData);0)
Es. Crea una maschera (Maschera1)
Inserisci 2 campi
cmp_1
cmp_2
Su "aggiorna" di cmp_1 metti questo codice
me.cmp_2 = Nz(DLookup("NUMERO", "qry_NUM_MAX_ANNO", "ANNO='" &
Me.cmp_1 & "'")) + 1
ora metti l'anno in cmp_1 e premi invio... vedrai che lui andra' a
leggere i valori relativi al NUMERO massimo relativamente all'anno
indicato e ti aggiungera' 1, ovvero ti dara' il numero del nuovo
documento...
piu' di cosi' non riesco a spiegartelo.
Tu sei un ottimo prof nulla da dire, sono io che sicuramente vado in panne 
in fretta...
la query era ok, il dlookup era da rivedere ma ora l'ho impostato cosě senza 
ottenere l'aggiornamento  sperato sul PROTOCOLLO.....
Private Sub REGISTRAZIONE_IVA_AfterUpdate()
Me.PROTOCOLLO = Nz(DLookup("PROTOCOLLO", "QueryPROTOCOLLOVENDITE", "ANNO='" 
& Year(Me.REGISTRAZIONE_IVA & "'"))) + 1
End Sub
mi sono permessa di modificare con Year, perchč mi sembra che debba 
prelevare l'anno dalla data REGISTRAZIONE_IVA....
che ne pensi?
Giorgia 

 che ne pensi?
dipende da cosa mi dici delle cose che ti ho chiesto su.

 mi sono permessa di modificare con Year, perchč mi sembra che debba


 dx....io sono certa che sia un campo numerico
si scusa, ho invertito io... e' corretto, destra = num, sinistra = txt
se apri la query che hai preparato, ti fa vedere per ogni anno il
numero max documento raggiunto?

 ha scritto nel messaggio 
news:1a94fc21-719e-4bff...@o20g2000yqk.googlegroups.com...



Sì la query funziona perfettamente, nella maschera il protocollo rimane 
sempre a 0 

 sempre a 0
inviami sto cavolo di DB epurato di cio' che non mi serve... mo' devo
capire! :D