1) If you don't already have it, define a calculation field, cYear as Year ( InvoiceDateField ). Define your value list with the use values from a field option and specify cYear as the field that supplies your values. Such value lists automatically filter out duplicates.
2) You can probably find a custom function for this, but this calculation will also do the job:
Ceiling ( Position ( "JanFebMarAprMayJunJulAugSepOctNovDec" ; Left ( monthNameField ; 3 ) ; 1 ; 1 ) / 3 )
3) your script can simply combine the month number and the year separated by a slash. If you enter find mode and enter 1/2012, your find will find all records dated January, 2012. This can be easily scripted.
Thanks for such a swift and informative reply! I will try out the two solutions you've suggested for the year & month lists, but I've also not been able to combine strings to create a searchable date value?
in the interim, to test the "find values" scripting, I tried setting up two numeric globals (monthnum & yearnum) and entered the values of  and . If I go into find mode and manually enter [*/05/2011] into the createdate field it works fine, however a find based upon [createdate="*/" & monthnum & "/" & yearnum] comes up as "invalid date value" - clearly I'm not using the correct syntax to concatenate the strings together?
In VBA I would have created a text string that added the fields together, and then used the date$(text) function to convert the text into a date upon which I could search but there doesn't seem to be an equivelent function in filemaker so I'm clearly missing something!?
Script your find like this:
Enter FInd mode --> clear pause check box
Set Field [YourTable::DateField ; Globals::gMonthNumber & "/" & Globals::gYear ]
Set Error Capture [on]
gMonthNumber and gYear must be either fields with global storage specified or they can be $Variables that received their values prior to the script entering Find mode.