CREATE OR replace FUNCTION VALOR_IMPOSTO_RETIDO_REGCAIXA(
   P_CDEMPRESA      IN LANCCONT.CDEMPRESA%TYPE,
   P_NRLANCCONT     IN LANCCONT.NRLANCCONT%TYPE,
   P_CDCONTCTBL     IN LANCCONT.CDCONTCTBL%TYPE) RETURN NUMBER
AS
   V_VRIMPRET     ITEMVENOUTIMPOS.VRPRODUTO%TYPE;
   V_VRIMPRETTOT  ITEMVENOUTIMPOS.VRPRODUTO%TYPE;
BEGIN
   V_VRIMPRETTOT := 0;
   FOR C_NF IN (SELECT DISTINCT C.CDFILIAL, C.NRLANCTONF, X.NRBAIXAREC
                  FROM CONTARECEBER C, BOLETRECEBER B, BAIXARECEBIDA X
                 WHERE C.CDFILIAL     = B.CDFILIAL
                   AND C.NRLANBOLREC  = B.NRLANBOLREC
                   AND B.CDFILIBAIREC = X.CDFILIAL
                   AND B.NRBAIXAREC   = X.NRBAIXAREC
                   AND X.CDEMPRESA    = P_CDEMPRESA
                   AND X.NRLCTBBREC   = P_NRLANCCONT) LOOP

      V_VRIMPRET := 0;
      BEGIN
         SELECT SUM((VRPROPRECBC*VRALIQNF/100)) AS VRIMP
           INTO V_VRIMPRET
           FROM IMPBAIXAREC IM, IMPOSTO IP
          WHERE IM.CDFILIAL     = C_NF.CDFILIAL
            AND IM.NRLANCTONF   = C_NF.NRLANCTONF
            AND IM.CDIMPOSTO    = IP.CDIMPOSTO
            AND IP.IDTRATIMPO   = 'R'
            AND IP.IDDESCRFONTE = 'R'
            AND IM.NRBAIXAREC   = C_NF.NRBAIXAREC;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_VRIMPRET := 0;
      END;
      V_VRIMPRETTOT := NVL(V_VRIMPRETTOT,0)+NVL(V_VRIMPRET,0);
   END LOOP;
   RETURN(V_VRIMPRETTOT);
END;
/