CREATE OR REPLACE FUNCTION RENDIMENTO_RECEITA_CDP(
   P_CDFILIAL     IN ESPEPROD.CDFILIAL%TYPE,
   P_CDPRODUTO    IN ESPEPROD.CDPRODUTO%TYPE) RETURN NUMBER IS

   V_CDESPEPROD ESPEPROD.CDESPEPROD%TYPE;
   V_QTRENDINSU TCOMPPRO.QTPRODTCOMP%TYPE;
BEGIN
   V_QTRENDINSU := 0;
   SELECT MAX(CDESPEPROD)
     INTO V_CDESPEPROD
     FROM ESPEPROD
    WHERE (CDFILIAL = P_CDFILIAL)
      AND (CDPRODUTO  = P_CDPRODUTO)
      AND (DTVALESPEPRO = (SELECT MAX(DTVALESPEPRO)
                             FROM ESPEPROD
                            WHERE (CDFILIAL = P_CDFILIAL)
                              AND (CDPRODUTO  = P_CDPRODUTO)
                              AND (DTVALESPEPRO < SYSDATE)));
   IF V_CDESPEPROD IS NULL THEN
      SELECT MAX(E1.CDESPEPROD)
        INTO V_CDESPEPROD
        FROM ESPEPROD E1
       WHERE (E1.CDPRODUTO  = P_CDPRODUTO)
         AND (E1.DTVALESPEPRO = (SELECT MAX(E2.DTVALESPEPRO)
                                FROM ESPEPROD E2
                               WHERE (E1.CDFILIAL = E2.CDFILIAL)
                                 AND (E1.CDPRODUTO  = E2.CDPRODUTO)
                                 AND (E2.DTVALESPEPRO < SYSDATE)));
   END IF;

   IF V_CDESPEPROD IS NOT NULL THEN
      BEGIN
         SELECT MAX(QTPRODTCOMP)
           INTO V_QTRENDINSU
           FROM TCOMPPRO TC
          WHERE (TC.CDPRODUTO  = P_CDPRODUTO)
            AND (TC.CDESPEPROD = V_CDESPEPROD)
            AND (NVL(TC.IDTCOMPPROC,'N') = 'S');
      EXCEPTION
          WHEN NO_DATA_FOUND THEN
               V_QTRENDINSU := 0;
      END;
      IF  V_QTRENDINSU = 0 THEN
          SELECT MAX(QTPRODTCOMP)
            INTO V_QTRENDINSU
            FROM TCOMPPRO TC
           WHERE (TC.CDPRODUTO  = P_CDPRODUTO)
             AND (TC.CDESPEPROD = V_CDESPEPROD);
      END IF;
   END IF;

   RETURN(V_QTRENDINSU);
END;
/