Te falta un ;
Código SQL
[-]
CREATE PROCEDURE REPORTE_COMPARATIVAVENTAPESOS
(FECHADESDE date,
FECHAHASTA date)
AS
BEGIN
SELECT M.DESCRIPCION AS MARCA,SR.DESCRIPCION AS RUBRO, SUM(C.TOTAL) AS TOTAL
FROM CUERPOCOMPROBANTES CC
INNER JOIN CABEZACOMPROBANTES C ON CC.NUMEROCOMPROBANTE = C.NUMEROCOMPROBANTE
INNER JOIN ARTICULOS A ON CC.CODIGOARTICULO = A.CODIGOARTICULO
INNER JOIN MARCAS M ON A.CODIGOMARCA = M.CODIGOMARCA
INNER JOIN RUBROS R ON A.CODIGORUBRO = R.CODIGORUBRO
INNER JOIN SUPERRUBROS SR ON R.CODIGOSUPERRUBRO = SR.CODIGOSUPERRUBRO
WHERE (C.FECHACOMPROBANTE BETWEEN :FECHADDE AND :FECHAHTA)
AND (C.TIPOCOMPROBANTE = 'FA'
OR C.TIPOCOMPROBANTE = 'FB'
OR C.TIPOCOMPROBANTE = 'NCA'
OR C.TIPOCOMPROBANTE = 'NCB'
OR C.TIPOCOMPROBANTE = 'NDA'
OR C.TIPOCOMPROBANTE = 'NDB')
GROUP BY M.DESCRIPCION,SR.DESCRIPCION;
END^
De todos modos supongo que quieres que te devuelva algo. Debes agregar la sentencia SUSPEND y meter el resultado dentro de variables de retorno.
Como supongo que devuelve más de un registro, debes utilizar un bucle FOR SELECT INTO VARIABLES DO.
Código SQL
[-]
CREATE PROCEDURE REPORTE_COMPARATIVAVENTAPESOS
(FECHADESDE date,
FECHAHASTA date)
RETURNS (MARCA varchar(10), RUBRO varchar(10), TOTAL double precision)
AS
BEGIN
FOR SELECT M.DESCRIPCION AS MARCA,SR.DESCRIPCION AS RUBRO, SUM(C.TOTAL) AS TOTAL
FROM CUERPOCOMPROBANTES CC
INNER JOIN CABEZACOMPROBANTES C ON CC.NUMEROCOMPROBANTE = C.NUMEROCOMPROBANTE
INNER JOIN ARTICULOS A ON CC.CODIGOARTICULO = A.CODIGOARTICULO
INNER JOIN MARCAS M ON A.CODIGOMARCA = M.CODIGOMARCA
INNER JOIN RUBROS R ON A.CODIGORUBRO = R.CODIGORUBRO
INNER JOIN SUPERRUBROS SR ON R.CODIGOSUPERRUBRO = SR.CODIGOSUPERRUBRO
WHERE (C.FECHACOMPROBANTE BETWEEN :FECHADDE AND :FECHAHTA)
AND (C.TIPOCOMPROBANTE = 'FA'
OR C.TIPOCOMPROBANTE = 'FB'
OR C.TIPOCOMPROBANTE = 'NCA'
OR C.TIPOCOMPROBANTE = 'NCB'
OR C.TIPOCOMPROBANTE = 'NDA'
OR C.TIPOCOMPROBANTE = 'NDB')
GROUP BY M.DESCRIPCION,SR.DESCRIPCION
INTO :MARCA, :RUBRO, TOTAL
DO
SUSPEND;
END^