Ver Mensaje Individual
  #3  
Antiguo 21-06-2005
RESP 3.0 RESP 3.0 is offline
Miembro
 
Registrado: may 2005
Posts: 29
Reputación: 0
RESP 3.0 Va por buen camino
Fijate que solamente me da al ejecutarlo desde delphi y lo he hecho con muchos procedimientos este es el codigo.


Código SQL [-]
  
SET TERM ^ ;
CREATE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA(
    MANO_OBRA INTEGER,
    TIPO_PRECIO CHAR(2))
RETURNS (
    PRECIO_VENTA NUMERIC(15,2))
AS
   DECLARE VARIABLE VCOSTO DECIMAL(15,2);
   DECLARE VARIABLE VFACTOR DECIMAL(15,4);
   DECLARE VARIABLE VPRECIO DECIMAL(15,2);
   DECLARE VARIABLE VBASE_PRECIO CHAR(1);
   DECLARE VARIABLE VTIPO CHAR(1);
   DECLARE VARIABLE VVALOR NUMERIC(15,2);
   DECLARE VARIABLE VPORCENTAJE NUMERIC(15,2);
   DECLARE VARIABLE VVALOR_BASE NUMERIC(15,2);
begin
  SELECT COSTO_HORA, FACTOR_GANANCIA, PRECIO_HORA
  FROM SER_MANO_OBRA
  WHERE CODIGO = :MANO_OBRA
  INTO :VCOSTO, :VFACTOR, :VPRECIO;
  PRECIO_VENTA = 0.0;
  IF (VPRECIO = 0) THEN
  BEGIN
     IF (VFACTOR > 1) THEN
        PRECIO_VENTA = REDONDEAR(VCOSTO * VFACTOR,2);
     ELSE           
       IF (VFACTOR < 1) THEN
          PRECIO_VENTA = REDONDEAR(VCOSTO / VFACTOR,2);
       ELSE
          PRECIO_VENTA = VCOSTO;
  END
  ELSE
     PRECIO_VENTA = :VPRECIO;
  IF (RTRIM(:TIPO_PRECIO) <> '') THEN
  BEGIN
      SELECT BASE_COSTO_PRECIO, TIPO, PORCENTAJE, 0.0
      FROM FAC_TIPO_PRECIO
      WHERE (CODIGO = :TIPO_PRECIO)
      INTO :VBASE_PRECIO, :VTIPO, :VPORCENTAJE, :VVALOR;
      IF ((:VVALOR = 0) AND (RTRIM(:VBASE_PRECIO) <> '') AND (RTRIM(:VTIPO) <> '')) THEN
      BEGIN
          IF (:VBASE_PRECIO = 'C') THEN
             VVALOR_BASE = :VCOSTO;
          IF (:VBASE_PRECIO = 'P') THEN
             EXECUTE PROCEDURE SER_CALCULA_PRECIO_MANO_OBRA :MANO_OBRA, ' ' RETURNING_VALUES :VVALOR_BASE;
             
          IF (VTIPO = '+') THEN
             PRECIO_VENTA = :VVALOR_BASE + REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
          IF (VTIPO = '-') THEN
             PRECIO_VENTA = :VVALOR_BASE - REDONDEAR(:VVALOR_BASE * (:VPORCENTAJE / 100),2);
      END
      ELSE
         PRECIO_VENTA = :VVALOR;
   END
   PRECIO_VENTA = REDONDEAR(PRECIO_VENTA,2);
  suspend;
end
^
SET TERM ; ^
y la forma de ejecutarlo es la siguiente:

Código:
 
function TdmServicio_Proc.Calcula_Precio_Mano_Obra(Mano_Obra : LongInt; Tipo_Precio : String) : Double;
begin
   SPCalcula_Precio_Mano_Obra.ParamByName('MANO_OBRA').Value := Mano_Obra;
   SPCalcula_Precio_Mano_Obra.ParamByName('TIPO_PRECIO').Value := Tipo_Precio;
   SPCalcula_Precio_Mano_Obra.ExecProc;
   Result := SPCalcula_Precio_Mano_Obra.ParamByName('PRECIO_VENTA').Value;
end;
No entiendo he hecho esto un sin numero de veces y nunca me habia dado este error, y al buscar el la web es muy poca la informacion que aparece sobre esto.

Hasta pronto
Responder Con Cita