Seguramente el evento
tbPrecio.OnCalcFields se está llamando recursivamente y se desborda la pila.
Una posible solución es que dentro del código desactives el evento para que no se dispare nuevamente al modificar la tabla de precios.
Código Delphi
[-]
procedure TDM.tbPrecioCalcFields(DataSet: TDataSet);
begin
tbPrecio.OnCalcFiels:=nil;
tbPrecio.OnCalcFields:=tbPrecioCalcFields;end;
Saludos