Ese es un SP de Ejecución, es decir, elimina el "suspend", ya que cuando llega a esa linea, no tiene que devolver ningun registro.
Para el "no es un decimal válido", ¿le estas pasando al menos un decimal con el separador de decimales en un punto?. Si no lleva el punto porque la cantidad en cuestión no tiene decimales , puede venir el problema por ahi.
Por otra parte, para que más tarde no dé un error inexplicable, revisa este hilo sobre
los Floats en Firebird.
Saludos