Text columns in Grist will not transform the text when you enter it, so it’s the best choice here. If you enter your UPC Numbers directly into a Grist Text column (by typing, or pasting, or via API), they would neither lose zeros, nor get converted to a scientific notation.
The scientific notation must have come during import or conversion of column type. Did your data get imported from Excel? If so, you can force values in Excel to be pure text by entering them with a leading single-quote character.
Finally, if you do have incorrectly-formatted numbers in Grist, you can format them correctly by adding a formula column with this formula:
"%013.0f" % float($A)
replacing $A with the name of the column containing incorrectly formatted values. You can also replace the “13” in the formula with the desired length to pad to (e.g. 013 above pads the result with 0’s on the left to 13 characters total).
@dmitry-grist the problem is a large float in a numeric column is formatted by Grist as scientific notation when converting to text. Might help if the type was guessed as integer instead of numeric.