En delphi en el evento before Post, pero teniendo en cuenta que esté en modo inserción (para que solo se asigne una vez al crearse el registro, en las posteriores ediciones, que no se modifique)
Código Delphi
[-]
if tabla.state = dsInsert then
tablaId_doc.asstring := 'PROC'+ inttostr(idproducto);
Como bien dices, lo correcto sería en un trigger, el idproducto sería un generador y en el trigger sería before_Insert.
Saludos