Using your script change "insert Text" to SetField and use the name of the field to set to "0". Change each and every Inset Text to Set Field.
PS: There are faster ways to do this, but you spent the time... go for it.
Try it this way:
Show All Records
Replace Field Contents [no dialog; Product::Size Small 28 ; If ( Isempty ( Product::Size Small 28 ) ; 0 ; Product::Size Small 28 ) ]
Replace Field Contents [no dialog; Product::Size sMedium 29 ; If ( Isempty ( Product::Size sMedium 29 ) ; 0 ; Product::Size sMedium 29 ) ]
Make one Replace Field Contents step for each field. Use the Calcualtion option to specify the If function that checks to see if the field is empty.
Manage | Database | Options.. on each Size field Auto-Entry Tab.... Check Calculated and Specify this Calculation
If ( IsEmpty ( Self ) ; 0 ; Self )
Uncheck Don't evaluate if all referenced field are empty.
Do this for each size field, no script needed.
You'll still need the script to update existing records for a 'one time fix' as the auto-enter calc will only enter data into a new record or when you edit the field in question.
this is great and worked perfectly.