the solution could be, to use the auto-generated serial for recordID, as you already do, and a second on commit generated number for your record as "visual ID".
greetings from germany
Thanks for the response Chris. I could do that but I've just found a function called Set Next Serial Value.
I have a field called Seria# which is an auto-generated serial on record creation, and a field called RecordID whose value is auto-entered by means of a calculation using the Serial#. I have created a cancel button that triggers a script that Sets Next Serial Value [table::Serial#; table::Serial#] then reverts the record. This seems to have done the trick.