Seriale Giornaliero

E' l'area in cui è possibile condividere funzioni personalizzate nate dalla creatività e l'esperienza degli sviluppatori FileMaker

Moderatore: Moderatori

Rispondi
raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Seriale Giornaliero

Messaggio da raybaudi » martedì 27 dicembre 2005, 6:01

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.

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

raysoyd
Messaggi: 549
Iscritto il: giovedì 13 gennaio 2005, 1:00

Re: Seriale Giornaliero

Messaggio da raysoyd » domenica 19 febbraio 2006, 10:14

Ma è bellissimo, ma sinceramente perdonate la mia iingnoranza ma non riesco a capire il codice, se puoi scrivere meglio come devo fare. Grazie tanto.

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » domenica 19 febbraio 2006, 21:19

Esattamente cosa non riesci a capire ?
Vorresti la traduzione dei comandi in Italiano ?
O non hai capito come e dove utilizzatla ?

Hai FM8 o FM8 Advanced ?

Se sei più preciso, ti risponderò meglio ! :wink:
Raybaudi FMP 12 Adv. Windows XP SP3

raysoyd
Messaggi: 549
Iscritto il: giovedì 13 gennaio 2005, 1:00

Messaggio da raysoyd » venerdì 24 febbraio 2006, 11:30

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

marianasu
Messaggi: 1235
Iscritto il: martedì 15 giugno 2004, 2:00
Località: Cagliari
Contatta:

Messaggio da marianasu » venerdì 24 febbraio 2006, 12:45

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
FM8.03 Adv.- FM8.5 Adv Windows XP SP2

raysoyd
Messaggi: 549
Iscritto il: giovedì 13 gennaio 2005, 1:00

Messaggio da raysoyd » venerdì 24 febbraio 2006, 14:59

Grazie tanto marianasu, anche se non ho capito tanto. ora ci provo.

raybaudi
Messaggi: 3616
Iscritto il: sabato 7 febbraio 2004, 1:00
Località: Roma
Contatta:

Messaggio da raybaudi » domenica 26 febbraio 2006, 23:26

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
Le funzioni personalizzate, se ricorsive, possono essere utilizzate solo da chi possiede FM7 Developer o FM8 Advanced.

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) :wink:
Raybaudi FMP 12 Adv. Windows XP SP3

raysoyd
Messaggi: 549
Iscritto il: giovedì 13 gennaio 2005, 1:00

Messaggio da raysoyd » martedì 28 febbraio 2006, 15:15

Forse ci sono riuscito grazie tantissimo sei stato molto gentile.

Rispondi