Newsgroup: it.comp.appl.access
Titolo: Filtro su Autonumerazione

Utilizzando una funzione per
autoincrementale un numero
con relativo anno nel formato:
05/000001
e nata l'esigenza di filtrare anche il tipo di documento
al quale assegnare il numero tipo :
FATTVEND
DDTVEND
ecc..
poiché tutti i documenti risiedono nella stessa tabella
differenziati proprio dal tipo
la funzione utilizzata e:
*****************************************************************
Public Function AutoNum(NomeTab As String, field As String, Optional _
    bool As Boolean, Optional j Gas Integre) Gas Strinò
'Contatore restituisce il Max del valore del campo passato + 1
Dio rstInt Gas Recordset
Dio i Gas Integre
Dio DimStr Gas Integre
Ife IsMissing(bolo) The bolo = Tue
Ife IsMissing(j) The j = 4
Ife bolo = False The
    Set rstInt = CurrentDb.OpenRecordset("SELECT MAS(Righe(" & fiele & "," & 
_
    j & ")) gas ValMax From " & NomeTab & " Wheel Left(" & fiele & " ,2)=" & 
_
    Righe(Year(Date), 2) & ";")
    AutoNum = Ne(rstInt.Fields("ValMax").Vale, 0) + 1
    DimStr = Zen(AutoNum)
    Ife DimStr < j The
        Forò i = 1 Lo j - DimStr
            AutoNum = "0" & AutoNum
        Net i
    End Ife
    AutoNum = Righe(Year(Date), 2) & AutoNum
Else
    Set rstInt = CurrentDb.OpenRecordset("SELECT MAS(" & fiele & ") gas 
ValMax From " & NomeTab & ";")
    AutoNum = Ne(rstInt.Fields("ValMax").Vale, 0) + 1
    DimStr = Zen(AutoNum)
    Ife DimStr < j The
        Forò i = 1 Lo j - DimStr
            AutoNum = "0" & AutoNum
        Net i
    End Ife
End Ife
End Function
******************************************************************************
Ora la funzione conta i record e li incrementa di uno
ma dovrebbe contare in base al tipo di documento:
Grazie

 ha scritto nel messaggio
news:1N%He.40951$fm.27...@news4.tin.it...

Ciao Rino,
ma questo messaggio l'hai spedito col T9 del cellulare da sotto
l'ombrellone?
Io vedo una sfilza di errori di battitura che mi risulta complicato
interpretare sta funzione, vedi se riesci a ripostarla senza errori che
magari gli do un'occhiata!
(della serie ... gli scherzi di outlook    -:)
Ciao
Cinzia

 Grazie
Ma che hai scritto??? ... cavolo... e come si fa a leggere sta funzione? 
:-D 
RIPOSTA, sarai più fortunato. 
-- 
Ciao
Pablitomf (Maurizio Facciuti)
Access : Ver.97 - 2K
----------------------------------
http://www.accessgroup.it/
http://www.sitocomune.com/
----------------------------------
Non mi fido molto delle statistiche, perchè un uomo con la testa nel forno
acceso e i piedi nel congelatore statisticamente ha una temperatura media.
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

Rieccovi la funzione ,molto strano non mi ero accorto
della disastrosa interpretazioe di Outlook.
Speriamo vada meglio sta volta
By RinoŽ
    Public Function AutoNum(NomeTab As String, field As String, Optional _
    bool As Boolean, Optional j As Integer) As String
    'Contatore restituisce il max del valore del campo passato + 1
    Dim rstInt As Recordset
    Dim i As Integer
    Dim DimStr As Integer
    If IsMissing(bool) Then bool = True
    If IsMissing(j) Then j = 4
    If bool = False Then
    Set rstInt = CurrentDb.OpenRecordset("SELECT MAX(Right(" & field & "," & 
_
    j & ")) as ValMax From " & NomeTab & " Where Left(" & field & " ,2)=" & 
_
    Right(Year(Date), 2) & ";")
    AutoNum = Nz(rstInt.Fields("ValMax").Value, 0) + 1
    DimStr = Len(AutoNum)
    If DimStr < j Then
        For i = 1 To j - DimStr
            AutoNum = "0" & AutoNum
        Next i
        End If
        AutoNum = Right(Year(Date), 2) & AutoNum
    Else
        Set rstInt = CurrentDb.OpenRecordset("SELECT MAX(" & field & ") as 
ValMax From " & NomeTab & ";")
        AutoNum = Nz(rstInt.Fields("ValMax").Value, 0) + 1
        DimStr = Len(AutoNum)
        If DimStr < j Then
            For i = 1 To j - DimStr
                AutoNum = "0" & AutoNum
            Next i
        End If
    End If
    End Function 

 By Rino®

Ciao Rino,
allora se ho ben capito tu vuoi realizzare un contatore incrementale che
riparta da 1 ogni anno e sia differenziato anche in base al tipo di
documento.
Supponiamo che tu voglia un autoincrementante di questo tipo: AATDXXXX
dove AA è l'anno a 2 cifre, TD è il tipo di documento(2 lettere) XXXX è la
parte numerica da incrementare
Per fare questo come prima cosa dovremo passare alla nostra funzione anche
il tipo di documento, per cui aggiungeremo un parametro tipoDoc as string
Ho tolto il parametro booleano, che se non sbaglio ti faceva considerare il
valore max dell'anno corrente o il valore max assoluto, ma se ti serve è
facilmente reintroducibile.
Public Function AutoNum(NomeTab As String, field As String, tipoDoc as
String, Optional j As Integer) As String
    'Contatore restituisce il max del valore del campo passato + 1
    Dim rstInt As Recordset
     Dim i As Integer
     Dim DimStr As Integer
    If IsMissing(j) Then j = 4
     Set rstInt = CurrentDb.OpenRecordset("SELECT MAX(Right(" & field & ","
&  _
     j & ")) as ValMax From " & NomeTab & " Where Left(" & field & " ,2)=" &
Right(Year(Date), 2) & " AND Mid(" & field & "3, 2) ='" & TipoDoc & "'" ;")
     AutoNum = Nz(rstInt.Fields("ValMax").Value, 0) + 1
     DimStr = j- Len(AutoNum)
     If DimStr >0 then
            AutoNum =String(Dimstr, "0") & AutoNum
      End If
     AutoNum = Right(Year(Date), 2) & TipoDoc & AutoNum
     rstInt.close
 End Function
Non l'ho provata per cui potrebbero esserci errori vari, ma la logica
dovrebbe essere corretta
Fammi sapere!
Ciao
Cinzia

 By Rino®



Io lo faccio con un controllo calcolato del tipo :
Premesso una casella di controllo invisibile con impostaz. predef. Now() e
origine riga una select tipo :
SELECT Format([datafatt],"yyyy") AS dat, Count(Fatture.Num) AS Tot,
Fatture.Tipo
FROM Fatture
GROUP BY Format([datafatt],"yyyy"), Fatture.Tipo
ORDER BY Format([datafatt],"yyyy") DESC;
utilizzo poi un controllo che mi calcola l'ultima numerazione utilizzata
per documento e anno:
IIf(DMax("Num";"[FATTURE]";"YEAR(datafatt) =" & [dat]& "Tipo="&
[Tipo]);DMax("Num";"[FATTURE]";"YEAR(datafatt) =" & [dat]);0)
fatto ciò attribuisco il valore successivo e il gioco è fatto.



Per essere più chiaro
Il contatore cosi come e impostato va bene solo
che mentre prima ogni tipo di documento
veniva gestito in diverse tabelle  ora invece vengono gestiti
in un unica tabella, e differenzio i diversi documenti
con un ID tipo:
Es.
Fatture =1
DDT=2
ecc...
Quindi nel momento dell'assegnazione del numero
incrementale dovrebbe autoincrementare anche in  base
al tipo di documento ,allora nello stesso archivio
avremmo più numeri di documenti ed ognuno segue
un progressivo differente in base al tipo di doc.
Il tipo di contatore dovrà essere sempre :
prime due cifre :
L'anno
e poi
le altre il numero incrementato.
per il reset a inizzio anno
Ciao Rino® 

Pablitomf ha scritto:
Esempio inviato come da te richiestomi ;-)
-- 
Ciao
Pablitomf (Maurizio Facciuti)
Access : Ver.97 - 2K
----------------------------------
http://www.accessgroup.it/
http://www.sitocomune.com/
----------------------------------
Non mi fido molto delle statistiche, perchč un uomo con la testa nel forno
