Funzione di autoincremento

di il
10 risposte

Funzione di autoincremento

Buon giorno a tutti e buon anno ragazzi ^^.
Il codice quì sotto:
="D" & Format(Date();"aa") & "/" & Format(IIf(IsNull(DMax("[N_ddt]";"[ddt]";"[N_ddt] like 'D" & Format(Date();"aa") & "/????'"));1;Right(DMax("[N_ddt]";"[ddt]";"[N_ddt] like 'D" & Format(Date();"aa") & "/????'");3)+1);"0000")
Prevede di avere un autoincremento del codice che identifica un DDT(documento di trasporto), con la struttura:
"D" / "ANNO" / "NUMERO INCREMENTALE
Es: D15/0001
Sto cercando tuttavia di modificare il codice in maniera tale che abbia ancora le caratteristica di autoincremento , ma con una struttura tipo
"NUMERO INCREMENTALE" / "ANNO"
Es: 0001/15
Tuttavia non riesco a rendere funzionante il codice, qualche anima pia potrebbe aiutarmi?

Grazie in anticipo,

Antonio

10 Risposte

  • Re: Funzione di autoincremento

    Il programma funziona in multi-utenza, oppure è mono-utente?
  • Re: Funzione di autoincremento

    Mono utenza
  • Re: Funzione di autoincremento

    Allora è abbastanza semplice:
    Format([N_ddt];"0000") & "/" & Format(Date(),"aa")
    Ovviamente al posto di [N_ddt] dovrai inserire il valore che avrai controllato (cosa che sai già fare).

  • Re: Funzione di autoincremento

    Si ma così non si auto incrementa. Questo codice finirà nel "valore predefinito" di una casella di testo
  • Re: Funzione di autoincremento

    thebusterazz ha scritto:


    Si ma così non si auto incrementa. Questo codice finirà nel "valore predefinito" di una casella di testo
    Non hai capito, rileggi meglio (o forse non ho capito bene io).
    Non ti ho indicato l'autoincremento perché ho visto che lo hai già usato nella versione precedente, quindi ho dato per scontato che tu lo sappia ricavare.

    Personalmente preferisco il VBA e fare un'interrogazione al volo del database, esempio:
    SELECT Max(N_DDT) + 1 
    FROM TABELLA WHERE ANNO = Year(Date)
    etc etc etc.......
    
    Puoi anche crearti una funzione o una query nel database, da richiamare quando serve, che lo faccia al posto tuo.

  • Re: Funzione di autoincremento

    In realtà il codice utilizzato non è mio. L'ho preso da un altro progetto e sono riuscito ad adattarlo con un po di reverse engineering, ma nel momento in cui ho provato a cambiarlo in maniera tale da avere il risultato indicato, non ci sono riuscito. ecco perché ho chiesto il vostro aiuto
  • Re: Funzione di autoincremento

    thebusterazz ha scritto:


    In realtà il codice utilizzato non è mio. L'ho preso da un altro progetto e sono riuscito ad adattarlo con un po di reverse engineering, ma nel momento in cui ho provato a cambiarlo in maniera tale da avere il risultato indicato, non ci sono riuscito. ecco perché ho chiesto il vostro aiuto
    Capisco, ma scopiazzare codice qua e la sottintende poi l'impegno per comprenderlo, altrimenti resta una mera copia ed è un'occasione persa per imparare.

  • Re: Funzione di autoincremento

    E come ho scritto l'ho fatto nel momento in cui ho avuto necessita di adattarlo . Detto ciò spero vivamente che qualcuno possa aiutarmi o per lo meno spiegarmi la soluzione
  • Re: Funzione di autoincremento

    Sono arrivato a partorire questo codice, tuttavia mi da ancora un errore di sintassi, qualcuno riesce ad aiutarmi ad individuarlo? ^^
    =Format(IIf(IsNull(DMax("[N_ddt]";"[ddt]";"[N_ddt] Like '????/" &  Format(Date();"aa")'"));1;Left(DMax("[N_ddt]";"[ddt]";"[N_ddt] Like '????/" & Format(Date();"aa")'");4)+1);"0000") & "/" & Format(Date();"aa")
  • Re: Funzione di autoincremento

    Sostanzialmente io non capisco perchè di debbano scrivere delle FUNZIONI(se così si possono chiamare) così insulse per ottenere un risultato necessario...!
    Il termine insulso è riferito al fatto che non hanno nulla di TECNICO, non sono Debuggabili e, come ben puoi vedere ti rendono la vita difficile per NULLA.

    Il suggerimento di GIBRA era quello giusto perchè non lo hai colto...?
    Ha il massimo della semplicità di valutazione, scrivi la tua bella Query in QBE la testi e vedi che risultato restituisce, apri un Recordset recuperi il dato e fai in modo possa essere richiamabile...!
    
    Function NuovaFattura()
    
    ' 0001/15
    
    Dim strSQL      As String
    Dim intPRG      As Integer
    Dim intY        As Integer
    Dim rs          As DAO.Recordset
    
    strSQL = "SELECT Max(Left$([Fattura],4)) AS Progressivo FROM TX "
    strSQL = strSQL & "GROUP BY Val(Right$([Fattura],2)) "
    strSQL = strSQL & "HAVING (((Val(Right$([Fattura],2)))=Val(Format$(Now(),'yy'))));"
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbopendinaset, dbReadOnly)
    
    If rs.EOF Then ' Anno NUOVO ripartiamo da 1...!
      progressivo = 1
    Else
      progressivo = rs.Fields("Progressivo") + 1
    End If
    
    NuovaFattura = Format$(progressivo, "0000") & "/" & Format$(Now(), "YY")
    
    End Function
    Questa funzione la puoi richiamare come DEFAULT VALUE di un controllo o come UDF in una Query...

    Vedi tu ora di gestirla al meglio se ti va...
Devi accedere o registrarti per scrivere nel forum
10 risposte