Seriale Giornaliero
Moderatore: Moderatori
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
Seriale Giornaliero
Ciao a tutti
Ho costruito una nuova funzione personalizzata non recursiva, utile per inserire automaticamente un numero seriale in un campo alla creazione di un nuovo record.
La particolarità di questo numero seriale è che riparte da uno ogni giorno ed ha il formato del tipo:
AAAAMMGG##
ad esempio il primo numero creato oggi sarebbe:
2005122701
e quello creato domani sarà:
2005122801
Parliamo dei ##... questi rappresentano il numero progressivo del record creato in quel giorno; nella funzione è indicato come "digit" e può essere definito a piacere di qualsiasi lunghezza. Ad esempio, per "digit" uguale a 4, avremo: 200512270001.
Anche il formato della data può essere cambiato, tramite il parametro "format", che ha il seguente significato:
format = 1 MMGGAAAA
format = 2 GGMMAAAA
format = "" AAAAMMGG <--questo è il formato di default
La funzione funziona solo con FMP8
La dovete inserire come calcolo di un campo testo impostato come AutoEnter e con Always Evaluate.
Ho costruito una nuova funzione personalizzata non recursiva, utile per inserire automaticamente un numero seriale in un campo alla creazione di un nuovo record.
La particolarità di questo numero seriale è che riparte da uno ogni giorno ed ha il formato del tipo:
AAAAMMGG##
ad esempio il primo numero creato oggi sarebbe:
2005122701
e quello creato domani sarà:
2005122801
Parliamo dei ##... questi rappresentano il numero progressivo del record creato in quel giorno; nella funzione è indicato come "digit" e può essere definito a piacere di qualsiasi lunghezza. Ad esempio, per "digit" uguale a 4, avremo: 200512270001.
Anche il formato della data può essere cambiato, tramite il parametro "format", che ha il seguente significato:
format = 1 MMGGAAAA
format = 2 GGMMAAAA
format = "" AAAAMMGG <--questo è il formato di default
La funzione funziona solo con FMP8
La dovete inserire come calcolo di un campo testo impostato come AutoEnter e con Always Evaluate.
Codice: Seleziona tutto
/*
DailySerial custom function
Author: Daniele Raybaudi
Format: DailySerial ( AEfield ; digit ; format )
Result: text
parameters:
AEfield: text - the text field wich will hold the serial number; it must be setted as auto-enter, always evaluate
digit: number - the number of digit (#) that must increment by one and restart from one every new day
format: number - the format can be specified, so to have:
format = 1: MMDDYYYY##
format = 2: DDMMYYYY##
format = "": YYYYMMDD## <--this is the default result
12/26/2005
*/
Let([
today = Get ( CurrentDate );
lastId =GetNthRecord (AEfield ; Get ( TotalRecordCount ) - 1);
dayLastDate = Case(
format = 1;Middle ( lastId ; 3 ; 2 );
format = 2;Left ( lastId ; 2 );
Middle( lastId ; 7;2 )
);
monthLastDate =Case(
format = 1;Left ( lastId ; 2 );
format = 2;Middle ( lastId ; 3 ; 2 );
Middle( lastId ; 5;2 )
);
yearLastDate = Case(
format = 1;Middle( lastId ; 5;4 );
format = 2;Middle ( lastId ; 5 ; 4 );
Left( lastId ; 4 )
);
lastDate =Date ( monthLastDate ; dayLastDate ; yearLastDate )
];
Case(
format = 1;Right ( "0" & Month( today ) ; 2 ) & Right ( "0" & Day ( today ) ; 2 ) & Year ( today );
format = 2;Right ( "0" & Day( today ) ; 2 ) & Right ( "0" & Month ( today ) ; 2 ) & Year ( today );
Year ( today ) & Right ( "0" & Month( today ) ; 2 ) & Right ( "0" & Day ( today ) ; 2 )
)
&
Case(
lastDate ≠ today or Right ( lastId ; digit ) = 10^digit -1; Right ( 10^digit ; digit-1 ) & "1";
SerialIncrement ( Right ( lastId ; digit ) ; 1 )
)
)
Raybaudi FMP 12 Adv. Windows XP SP3
-
- Messaggi: 549
- Iscritto il: giovedì 13 gennaio 2005, 1:00
Re: Seriale Giornaliero
Ma è bellissimo, ma sinceramente perdonate la mia iingnoranza ma non riesco a capire il codice, se puoi scrivere meglio come devo fare. Grazie tanto.
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
-
- Messaggi: 549
- Iscritto il: giovedì 13 gennaio 2005, 1:00
Scusami tanto non riesco a capire come devo applicare il tutto Grazie. ho fm8. E ho anche un'altro prob. non riesco far fare un contollo del n° di fattura con anno, Mi spiego meglio vorrei che creare un controllo che mi permetta di inserire un n° fattura unico per l'anno es2005 e lo stesso n° fattura per il 2006, così avvro lo storico delle fatture emesse, senza dover azzerare il tutto ogni fine anno. tante grazie
-
- Messaggi: 1235
- Iscritto il: martedì 15 giugno 2004, 2:00
- Località: Cagliari
- Contatta:
Per le fatture puoi fare un campo testo unico che come valore suggerito
ha numerofattura & anno_fattura
Se uno mette due fatture con lo stesso numero e anno viene lanciato il messaggio di errore.
Per usare le funzioni personalizzate devi andare nel menu FILE_DEfiniSci funzioni personalizzate e poi ti comparirà la funzione insieme alle altre funzioni....CIAOM
ha numerofattura & anno_fattura
Se uno mette due fatture con lo stesso numero e anno viene lanciato il messaggio di errore.
Per usare le funzioni personalizzate devi andare nel menu FILE_DEfiniSci funzioni personalizzate e poi ti comparirà la funzione insieme alle altre funzioni....CIAOM
FM8.03 Adv.- FM8.5 Adv Windows XP SP2
-
- Messaggi: 3616
- Iscritto il: sabato 7 febbraio 2004, 1:00
- Località: Roma
- Contatta:
Le funzioni personalizzate, se ricorsive, possono essere utilizzate solo da chi possiede FM7 Developer o FM8 Advanced.raysoyd ha scritto:Scusami tanto non riesco a capire come devo applicare il tutto Grazie. ho fm8. E ho anche un'altro prob. non riesco far fare un contollo del n° di fattura con anno, Mi spiego meglio vorrei che creare un controllo che mi permetta di inserire un n° fattura unico per l'anno es2005 e lo stesso n° fattura per il 2006, così avvro lo storico delle fatture emesse, senza dover azzerare il tutto ogni fine anno. tante grazie
Questa, comunque, non è una funzione ricorsiva; quindi può essere utilizzata anche semplicemente come calcolo.
Costruisci un campo testo e, nelle opzioni di inserimento automatico per calcolo, :
1) copia il tutto
2) togli la spunta a " non valutare se..."
3) togli la spunta a "non sostituire se..."
Per il secondo problema, quello che riguarda un numero seriale annuale, ti rimando alla funzione apposita (da poco inserita)
Raybaudi FMP 12 Adv. Windows XP SP3