Hola, Prueba con esto para no tocar mucho tu código:
nota: voy a poner en negrita lo que añadí.
Código Delphi
[-]
SET TERM ^ ;
CREATE PROCEDURE TRAE3 (
FECHAINI DATE,
FECHAFIN DATE)
RETURNS (
GS FLOAT,
MEC INTEGER,
SER INTEGER,
TC INTEGER)
AS
Declare variable Aux_GS FLOAT;
Declare variable Aux_MEC INTEGER;
Declare variable Aux_SER INTEGER;
Declare variable Aux_TC INTEGER;
BEGIN
Aux_GS = 0;
Aux_MEC = 0;
Aux_SER = 0;
Aux_TC = 0;
FOR SELECT
(SELECT SUM(GS) FROM HONDATA WHERE IDHONDATA = H.IDHONDATA) AS GS,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDHONDATA = H.IDHONDATA AND R.IDRETSER = 1) AS MEC,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDHONDATA = H.IDHONDATA AND R.IDRETSER = 2) AS SER,
(SELECT COUNT(R.IDRETSER) FROM RETMR R WHERE R.IDHONDATA = H.IDHONDATA AND R.IDRETSER = 3) AS TC
FROM ENCAOR E, HONDATA H
WHERE E.TIPO <> 'C' AND E.FECH BETWEEN :FECHAINI AND :FECHAFIN AND E.ORDE = H.ORDE AND EXTRACT(MONTH FROM (H.FECHORDE)) = EXTRACT(MONTH FROM(:FECHAFIN))
INTO :Aux_GS, :Aux_MEC, :Aux_SER, :Aux_TC
DO
Begin
GS = :GS + :Aux_GS;
MEC = :MEC + :Aux_MEC;
SER = :SER + :Aux_SER;
TC = :TC + :Aux_TC;
SUSPEND;
end
END^
SET TERM ; ^
No le he probado, asi que eso te toca a ti que ya tienes la estructura de las tabla y los datos de pruebas creados.
espero sea lo que necesitas, sino te sirve pega un grito y buscamos como solucionarlo.