Newsgroup: it.comp.appl.access
Titolo: n°progressivo con anno

in un DB multiutente devo formattare il contatore "progressivo" in 
formato 12345/2007,
il contatore è formato testo,
ho inserito nel controllo prima di aggiornare della maschera "anagrafe" il
seguente codice:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord Then
Me.N_autorizzazione = "" & Format(Date, "aaaa") & "/" &
Format(IIf(IsNull(DMax("[]", "[]", "[] like '" & Format(Date, "aaaa") &
"/????'")), 1, Right(DMax("]", "[]", "[] like '" & Format(Date, "aaaa") &
"/????'"), 4) + 1), "0000")
End If
End Sub
ma come al solito, quando chiedo aiuto al NG, mi da un semplice numero
progressivo
dove sbaglio?
chi mi può aiutare?
grazie
luigi
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 questo articolo e` stato inviato via web dal servizio gratuitohttp://
www.newsland.it/newssegnala
 gli abusi ad 
a...@newsland.it
sai come faccio io? 20070001
uso questo numero come contatore di tutti i documenti, Cosi ho nelle
prime quattro cifre l'anno e oltre 9999 documenti in un anno ...
se ci stai come volume di dati può essere gestito facilmente senza
ricorrere a format vari ma solo tramite un dmax.

ciroteo ha scritto:


no!  purtroppo a me serve nel formato numero barra anno  XXXXX200X
e la formula che ho scelto funziona come valore predefinito, ma se lo
inserisco come codice dà errore!
luigi
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 - Mostra testo tra virgolette -
le virgolette sono a posto? intendo dire che da vba non puoi usare
apici doppi e a volte cambiano i punti e virgola e virgole varie ...
comunque non ho capito che errore ti da.
m

 ha scritto nel messaggio 
news:1183454631....@c77g2000hse.googlegroups.com...


Ciro...Ciro...ti ricordi che te l'ho fatto vedere alla CISA3????
Hai ragione però...non ti ho lasciato il codice...provvedo...anche per 
Luigi...
basta che nel controllo della form inserisci nella proprietà "valore 
predefinito" il seguente codice debitamente modificato
="" & Format(IIf(IsNull(DMax("[tua_casella]";"[tua_tabella]";"[tua_casella] 
like '???/" & Format(Date();"aa") & 
"'"));1;Mid(DMax("[tua_casella]";"[tua_tabella]";"[tua_casella] like '???/" 
& Format(Date();"aa") & "'");1;3)+1);"000") & "/" & Format(Date();"aa")
come potrai notare il formato che ti restituisce è del tipo 001/07, puoi 
fare tutte le midifiche che vuoi per portarlo anche a una soluzione del tipo 
0001/2007 o 0001-2007.... ecc...
vedi tu...
Ciao a tutti
-- 
Roberto da Parma

 Ciao a tutti
momento!!!!
io il codice non devo inserirlo nel "valore predefinito" in quanto è un
gestionale di rete a cui accedono vari utenti contemporaneamente e quindi
il numero calcolato come hai detto tu, a volte fallisce per numero già
utilizzato.
Quindi devo inserirlo come codice sulla form e quindi non và penso per
sintassi,
luigi
-- 
questo articolo e` stato inviato via web dal servizio gratuito 


 luigi
Non è vero, però su dirty della form devi salvare il record
-- 
-- 
MAssimiliano Amendola
www.accessgroup.it
Cisa - Conferenza Italiana Sviluppatori Access
Segrate (MI), 7-8 giugno 2007

 ha scritto nel messaggio 
news:f6frjm$bdg$1...@tdi.cu.mi.it...


Grazie della precisazione...vrissimo...funziona benissimo anche per BE in 
rete...in ogni caso se ad esempio si fa un errore e si cancella poi la 
fattura o la registrazione, la numerazione riparte dall'ultimo valore 
disponibile ( sempre che questo sia l'ultimo ).
Es.
001/07
002/07  <---- se cancello questo il progressivo sarà 004/07
003/07  <---- se cancello questo ripartirò alla successiva apertura da 
questo numero
Ciao
-- 
Roberto da Parma

 Non è vero, però su dirty della form devi salvare il record
parliamone!
a me in un db BE-FE multiutente in cui su numero ho un controllo
incrementale semplice di solo numero, è capitato che :
1° utente inserisce un record, il controllo assegna il num.max+1, l'utente
ci mette, es. 5 minuti a completare il record prima di passare ad un nuovo
record,
mentre compila il record, un 2° utente inserisce un nuovo record, il
controllo assegna il numero+1 dell'ultimo record (quindi uguale all'altro
utente) questo 2° utente compila il record e passa avanti, tutto a posto.
il 1° utente, però, quando finisce di completare il record, passa al
successivo e rmane fregato! access gli dà errore che il numero assegnato è
già occupato con la conseguenza che perde i dati del record ed è costretto
a reinserirlo.
Questa sòituazione mi è capitata!.


 Questa situazione mi è capitata!.
Nessuno mette in dubbio il fatto che questa situazione ti sia capitata, ma 
sicuramente questo è successo perché hai approcciato male il problema.
Nella situazione che descrivi, quando un utente si posizione su nuovo record, 
gli viene fornito immediatamente un nuovo progressivo, prima ancora che egli 
abbia compilato alcunché.
E' questo il comportamento sbagliato.
Il nuovo progressivo lo dovresti calcolare in fase di Form_BeforeUpdate.
E' lo stesso concetto che sta alla base del tipo contatore di Access. Access 
ti fornisce un nuovo contatore ad ogni tentativo di creare un nuovo record, 
"bruciando" i valori per i quali poi il record non viene salvato.
SQL Server, invece, per i campi autoincrementanti provvede solo in fase di 
INSERT a fornire un nuovo valore, senza quindi "bruciare" alcun valore.
In entrambi i casi viene risolto il problema dell'univocità del valore fornito.
Nel tuo caso, invece, hai adottato proprio il comportamento opposto che, 
come hai sperimentato direttamente, può portare semplicemente a qualche problema.
--
PBsoft di Gabriele Bertolucci
www.pbsoft.it
skype:pbsoftsolution

 skype:pbsoftsolution


 0001/2007 o 0001-2007.... ecc...
Leggendo la discussione mi sono reso conto di essere nella stessa
situazione, avevo bisogno di qualcosa di analogo e direi che funziona
anche per me.
Solo una domanda, nel caso volessi ordinare i vari record prima per
anno e poi per numero come potrei fare usando un formato del genere?
Non ho mai elaborato dati per l'ordinamento...
Tra l'altro sorge il dubbio di come fare a fare in modo che la
numerazione parta dall'ultimo numero usato per l'anno impostato, credo
che sia molto più pratico separare codice ed anno....

 e quindi come soluzione pratica mi puoi dire come fare? grazie
Scusa, ma nel mio post ti ho già detto come fare. Ti ho detto di utilizzare 
l'evento Form_BeforeUpdate per recuperare il valore per il progressivo.
Ma hai letto il mio post?


 ha scritto nel messaggio 
news:1183703597.7...@r34g2000hsd.googlegroups.com...


Allora facciamo un pò di chiarezza...
A luigi:
il metodo che ti ho suggerito non va incontro al problema che mi dicevi tu 
prima
questo perchè il numero viene assegnato subito.
Quindi tu ci puoi impiegare anche 1 anno a compilare il tuo modulo che il 
numero ti è già stato assegnato (stai solamente modificando il record)!
Il problema semmai (ma che è di tutti i tipi di contatore) è il recupero 
della numerazione in caso di cancellazione ma questo è un'altro problema.
A diego:
idem come sopra in più per i tuoi ordinamenti puoi avere più soluzioni.
essendo però in questo caso il campo della numerazione un campo testo devi 
prima spezzare i due termini e poi ordinarli come meglio credi....prima anno 
e poi numero.
