CREATE OR REPLACE FUNCTION TP_CONTA_PROD(P_CDFILIAL VARCHAR2,
                                         P_NRLANCTONF VARCHAR2,
                                         P_CDPRODUTO VARCHAR2,
                                         P_IDENTRSAIDOP VARCHAR2) RETURN VARCHAR

IS
  V_CDTPCTRECEB TIPOCTRECEBER.CDTPCTRECEB%TYPE;
  V_CDTPCTPAGAR TIPOCTPAGAR.CDTPCTPAGAR%TYPE;
BEGIN
   IF P_IDENTRSAIDOP = 'S' THEN
      BEGIN
       SELECT CDTPCTRECEB
         INTO V_CDTPCTRECEB
         FROM
         (SELECT PROD.CDTPCTRECEB AS CDTPCTRECEB, TP.CDCLASSFINA,  TP.DSDEFACTREC, SUM(PROD.VRBRUTITEM) AS VRBRUTITEM, COUNT(*) OVER() AS NROREGS
            FROM TIPOCTRECEBER TP,
                (SELECT P3.CDPRODUTO, P4.CDARVPROD, P4.CDTPCTRECEB, ROUND(I.VRBRUTITEM,2) AS VRBRUTITEM
                   FROM ITEMPRODUTO I, PRODUTO P3, PRODUTO P4
                  WHERE I.CDFILIAL = P_CDFILIAL
                    AND I.NRLANCTONF = P_NRLANCTONF
                    AND I.CDPRODUTO = P3.CDPRODUTO
                    AND (INSTR(P3.CDARVPROD,NVL(RTRIM(P4.CDARVPROD),P3.CDARVPROD)) = 1)
                    AND P4.CDTPCTRECEB IS NOT NULL
                    AND P4.CDPRODUTO = P_CDPRODUTO
                    AND P4.CDARVPROD = (SELECT MAX(P1.CDARVPROD)
                                          FROM ITEMPRODUTO IT,  PRODUTO P, PRODUTO P1
                                         WHERE IT.CDFILIAL = I.CDFILIAL
                                           AND IT.NRLANCTONF = I.NRLANCTONF
                                           AND IT.CDPRODUTO = I.CDPRODUTO
                                           AND IT.CDPRODUTO = P.CDPRODUTO
                                          AND (INSTR(P.CDARVPROD,NVL(RTRIM(P1.CDARVPROD),P.CDARVPROD)) = 1)
                                           AND P1.CDTPCTRECEB IS NOT NULL)
                    ORDER BY P3.CDARVPROD) PROD
           WHERE PROD.CDTPCTRECEB = TP.CDTPCTRECEB
           GROUP BY PROD.CDTPCTRECEB, TP.CDCLASSFINA, TP.DSDEFACTREC, PROD.CDPRODUTO
           UNION
          SELECT PROD.CDTPCTRECEB, CDCLASSFINA, DSDEFACTREC, SUM(PROD.VRBRUTITEM) AS VRBRUTITEM, COUNT(*) OVER() AS NROREGS
            FROM (SELECT I.VRBRUTITEM, NVL(P.CDTPCTRECEB,TI.CDTPCTRECEB) AS CDTPCTRECEB ,
                     NVL(TP.DSDEFACTREC,TC.DSDEFACTREC) AS DSDEFACTREC, NVL(TP.CDCLASSFINA,TC.CDCLASSFINA) AS CDCLASSFINA
                    FROM ITEMPRODUTO I, PRODUTO P, TIPOCTRECEBER TP, TIPOCTRECEBER TC, NOTAFISCAL N, TIPOOPERAC TI
                   WHERE I.CDFILIAL = P_CDFILIAL
                     AND I.NRLANCTONF = P_NRLANCTONF
                     AND P.CDPRODUTO = P_CDPRODUTO
                     AND I.CDPRODUTO = P.CDPRODUTO
                     AND P.CDTPCTRECEB = TP.CDTPCTRECEB(+)
                     AND I.CDFILIAL = N.CDFILIAL
                     AND I.NRLANCTONF = N.NRLANCTONF
                     AND N.IDENTRSAIDOP = TI.IDENTRSAIDOP
                     AND N.CDTIPOOPER   = TI.CDTIPOOPER
                     AND TC.CDTPCTRECEB = TI.CDTPCTRECEB
                     AND NOT EXISTS (SELECT 1
                                       FROM PRODUTO PR
                                      WHERE P.CDARVPROD LIKE PR.CDARVPROD||'%'
                                        AND PR.CDTPCTRECEB IS NOT NULL))PROD
           GROUP BY CDTPCTRECEB, CDCLASSFINA,  DSDEFACTREC);
		EXCEPTION
         WHEN NO_DATA_FOUND THEN
         V_CDTPCTRECEB := NULL;
      END;
      RETURN(V_CDTPCTRECEB);
   ELSE
      BEGIN
         SELECT PROD.CDTPCTPAGAR
           INTO V_CDTPCTPAGAR
           FROM TIPOCTPAGAR TP,
                (SELECT P3.CDPRODUTO, P4.CDARVPROD, P4.CDTPCTPAGAR,
                       ROUND(I.VRBRUTITEM,2) AS VRBRUTITEM
                  FROM ITEMPRODUTO I, PRODUTO P3, PRODUTO P4
                 WHERE I.CDFILIAL = P_CDFILIAL
                   AND I.NRLANCTONF = P_NRLANCTONF
                   AND I.CDPRODUTO = P3.CDPRODUTO
                   AND (INSTR(P3.CDARVPROD,NVL(RTRIM(P4.CDARVPROD),P3.CDARVPROD)) = 1)
                   AND P4.CDTPCTPAGAR IS NOT NULL
                   AND P4.CDPRODUTO = P_CDPRODUTO
                   AND P4.CDARVPROD = (SELECT MAX(P1.CDARVPROD)
                                         FROM ITEMPRODUTO IT,  PRODUTO P, PRODUTO P1
                                        WHERE IT.CDFILIAL = I.CDFILIAL
                                          AND IT.NRLANCTONF = I.NRLANCTONF
                                          AND IT.CDPRODUTO = I.CDPRODUTO
                                          AND IT.CDPRODUTO = P.CDPRODUTO
                                          AND (INSTR(P.CDARVPROD,NVL(RTRIM(P1.CDARVPROD),P.CDARVPROD)) = 1)
                                          AND P1.CDTPCTPAGAR IS NOT NULL)
                 ORDER BY P3.CDARVPROD) PROD
          WHERE PROD.CDTPCTPAGAR = TP.CDTPCTPAGAR;
      EXCEPTION
      WHEN NO_DATA_FOUND THEN
          V_CDTPCTPAGAR := NULL;
      END;
      RETURN(V_CDTPCTPAGAR);
   END IF;
END;
/