Newsgroup: it.comp.appl.access
Titolo: ancora sulla numerazione automatica

E' un problema assai dibattuto e ho già visto l'esempio sul sito
comune ma per la numerazione che ho in mente cerco qualcosa di un pò
diverso.
In sostanza nella tabella ho due campi NUMERO (il numero progressivo del
documento, testo di 5 cifre) e ANNO (testo di 4 cifre che indica l'anno di
riferimento del documento e che dalla maschera ha come valore predefinito
year(date()) ).
A cavallo dell'anno (diciamo dai primi di Dicembre) vengono registrati
documenti inerenti sia all'anno corrente che a quello futuro ... ovviamente
vorrei che seguissero numerazioni diverse in base al campo ANNO
(eventualmente digitato dall'utente a sua discrezione ... pure più anni
diversi).
Quindi con una tabella contenente i seguenti valori d'esempio:
ANNO    NUMERO
2000        2
2000        1
2000        3
1999        2
2000        5
2000        4
1999        1
2001        1
2001        2
vorrei che immettendo 2000 come ANNO ottenessi il numero 6, mentre per 1999
un 3 e per il 2001 un 3.
Al momento sto lavorando sull'evento disattivazione del campo ANNO affinché
venga variato il valore di default del campo NUMERO con un codice tipo
=DMax("numero"; "doc_emessi";"anno=txt_anno")+1
in pratica voglio cercare il massimo NUMERO nella tabella filtrata per ANNO
e incrementarlo.
Come faccio quando sono all'inizio dell'anno e voglio un 1!!! perché DMax
non mi risponde 0!!
Se sto seguendo un  pista giusta suggerite pure!!
Se ho sbagliato infamatemi ma con critiche costruttive ;-)
--
______________
Saverio Basta
ale....@tin.it

 ha scritto nel messaggio
news:8uj96b$i1m$1...@nslave3.tin.it...

Presupposto che la tua tabella si chiami Tabella1 e che contenga un campo
ANNO di tipo testo lungo 4 e un campo NUMERO di tipo testo lungo 5.
Presupposto che nella tua maschera ci siano due caselle di testo associate
ai suddetti due campi e che anche loro si chiamino rispettivamente ANNO e NU
MERO.
Non interverrei sui valori predefiniti dei due controlli, ma a fronte
dell'evento "Su corrente" della maschera genererei il seguente codice VBA:
Private Sub Form_Current()
Dim Pippo As Long
If Me.NewRecord Then
    Me![ANNO] = Right(Str(Year(Date)), 4)
    If DCount("ANNO", "Tabella1", "ANNO=" & Chr$(34) & ANNO & Chr$(34)) <> 0
Then
    Pippo = DMax("Val([NUMERO])", "Tabella1", "ANNO=" & Chr$(34) & ANNO &
Chr$(34)) + 1
    Me!NUMERO = Format$(Right(Str(Pippo), Len(Pippo)), "00000")
    Else
    Me!NUMERO = "00001"
    End If
End If
End Sub
ed inoltre a fronte dell'evento "Dopo aggiornamento" del controllo ANNO
genererei il seguente codice VBA:
Private Sub ANNO_AfterUpdate()
Dim Pippo As Long
    If DCount("ANNO", "Tabella1", "ANNO=" & Chr$(34) & ANNO& Chr$(34)) <> 0
Then
    Pippo = DMax("Val([NUMERO])", "Tabella1", "ANNO=" & Chr$(34) & ANNO&
Chr$(34)) + 1
    Me!NUMERO = Format$(Right(Str(Pippo), Len(Pippo)), "00000")
    Else
    Me!NUMERO = "00001"
    End If
End Sub
--
Roberto
---------------------------------------------
il Sito Comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------

 un 3 e per il 2001 un 3.
cut
=IIf(IsNull(DMax("numero";
"doc_emessi";"anno=txt_anno"));"00001";DMax("numero";
"doc_emessi";"anno=txt_anno")+1)
Questa funzioncina (usata come nell'esempio sul sito comune) restituisce
00001 se la funzione DMax e' null a causa dell'assenza di record rispondenti
ai criteri di ricerca (cioe' se e' la prima volta che inserisci un record
con quell'anno)
Sib
--
------------------------------------------------------
il sito comune di it.comp.database.access:
http://members.xoom.it/it_db_access
------------------------------------------------------
4000 anni fa', il saggio egizio Ptahhotep scrisse:
"... perche' non esistono saggi per nascita."
------------------------------------------------------
Saturiamo ECHELON:
bomba saddam attentato medio oriente





Visto che NUMERO deve risultare sempre di 5 cifre e di tipo testo,
eventualmente il suo valore predefinito dovrebbe essere:
=IIf(IsNull(DMax("NUMERO";"doc_emessi";"ANNO=ANNO"));"00001";Format(Str(DMax
("NUMERO";"doc_emessi";"ANNO=ANNO")+1);"00000"))
ed il valore predefinito di ANNO dovrebbe essere:
=Right(Str(Year(Date()));4)
Ma se poi ANNO va cambiato ridigitandolo, come Chip & Chop ha chiesto di
fare a fine ed inizio anno (nel 2000 digitare movimenti relativi al 2001 o
viceversa nel 2001 digitare documenti relativi al 2000), NUMERO risulterebbe
errato.
Quindi ritengo che il problema non può essere risolto operando sul valore
predefinito.
--
Roberto
---------------------------------------------
il sito comune di it.comp.appl.access:
http://members.xoom.it/it_db_access/
---------------------------------------------


Ti sarei grato se rispondessi dopo il quoting.
Comunque a fronte di quale evento metteresti la tua routine: come
risolveresti il problema che camponum č di tipo testo e deve essere lungo 5
caratteri?


 predefinito.
Ovviamente, ma era sottinteso il mettere la formula nell'evento
DopoAggiornamento del controllo Anno.
Vero e' che avevo messo i punto e virgola invece della sola virgola, ma e'
stata una distrazione.
Ciao, Sib


 caratteri?
...mmazza! Sei sull'aggressivo oggi ;-)



Rileggendo i miei ultimi messaggi, devo proprio darti ragione. :o)
Roberto