You have a slightly difficult problem. IF you generate the number and a split second later someone else commits before you, you will either duplicate the number if the design permits or you will raise an error if not. The solution to that would be to create the number as the last thing in the operation but often a user needs that number at the start. The only solution to when the number is needed is to create it first and foremost, then it is locked in. That would allow you to continue entering data or park it for later. However, that number can never be released if the process is canceled. It can only be archived or otherwise flagged (e.g. Rejected or Canceled).
Either way, you could use DMax function on the field as long as it will never contain alpha. There should be a means whereby that cannot happen.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.