CREATE OR REPLACE PROCEDURE IMPOSTO_ITEMCOL
(
   P_EMPRESA    IN ALIQUOTA.CDEMPRESA%TYPE,
   P_INSCESTA   IN ALIQUOTA.CDINSCESTA%TYPE,
   P_FORNECEDOR IN FORNECEDOR.CDFORNECED%TYPE,
   P_FILCENT    IN ITEMCOLE.CDFILIAL%TYPE,
   P_LANCCOLP   IN ITEMCOLE.NRCOLEPRECO%TYPE,
   P_CDFORNECED IN ITEMCOLE.CDFORNECED%TYPE,
   P_CDREGIAO   IN ITEMCOLE.CDREGIAO%TYPE,
   P_CDPRODUTO  IN ITEMCOLE.CDPRODUTO%TYPE,
   P_CDMARCA    IN ITEMCOLE.CDMARCA%TYPE,
   P_INIVALID   IN ALIQUOTA.DTINIVALID%TYPE,
   P_TRANSACAO  IN VARCHAR2 DEFAULT 'S'
)
IS
   V_PAISORIG     VARCHAR2(04);
   V_ESTAORIG     VARCHAR2(02);
   V_MUNIORIG     VARCHAR2(04);
   V_PAISDEST     VARCHAR2(04);
   V_ESTADEST     VARCHAR2(02);
   V_ALIQTEMP     VARCHAR2(18);
   V_INCITEMP     VARCHAR2(18);
   V_TIPOOPER     VARCHAR2(02);
   V_CARACFIS     VARCHAR2(01);
   V_LIQUIITEM    NUMBER;
   V_PARDEDTMP    NUMBER;
   V_PREDBCTMP    NUMBER;
   V_ALIQUTMP     NUMBER;
   V_IMPOSTOIT    NUMBER;
   V_TAXABASECALC NUMBER;
   V_TAXAALIQUOTA NUMBER;
   V_BASECALCIT   NUMBER;
   V_CONTABCALC   NUMBER;
   V_PERDBCALC    NUMBER;
   V_ADIMPAF      NUMBER;
   V_TOTAIMPBCALC NUMBER;
   V_QTACMPITMCOL NUMBER;
   V_INSCESTA     ALIQUOTA.CDINSCESTA%TYPE;
   V_CDGRUPOFISC VARCHAR2(3);
   V_CDARVPROD    PRODUTO.CDARVPROD%TYPE;
   V_IDINTEREST   VARCHAR2(01);
   V_CDIMPOBCALTPOP IMPOSTO.CDIMPOSTO%TYPE;
   V_CDFILIAL     FILIAL.CDFILIAL%TYPE;
   V_CDEMPRESA    EMPRESA.CDEMPRESA%TYPE;
   /*CALCULAR ICMP-ST*/
   V_TAXABCSUBSTR NUMBER;
   V_PBCSUBTRIB   NUMBER;
   V_BASEVLRMAX   NUMBER;
   V_VRMAXVENDA   NUMBER;
   V_CALCVLRMAX   NUMBER;
   V_VRPEMAXVENDA NUMBER;
   V_IDPMCBASECAL VARCHAR2(01);
   V_CDIMPOSTRIB  VARCHAR2(4000);
   V_IDVRIMPSTRIB VARCHAR2(01);
   V_VRIMPCOLET   NUMBER;

BEGIN

   CONSULTA_GRUPOFISCAL('F', P_FORNECEDOR, '', 'E', '01', V_CDGRUPOFISC);

--Variaveis com a chave para as tabelas temporarias

   V_ALIQTEMP := 'COLP'||P_FILCENT||P_LANCCOLP;
   V_INCITEMP := 'COLP'||P_FILCENT||P_LANCCOLP;
---------------------------------------------------------------------------------------------------------
   /* ALTERACAO PARA CARREGAR FILIAL, EMPRESA E INSCRICAO DA REGIAO DA COTACAO*/

   SELECT MAX(REGIAO.CDPAIS), MAX(REGIAO.SGESTADO), MAX(FILIAL.CDFILIAL)
     INTO V_PAISDEST, V_ESTADEST, V_CDFILIAL
     FROM REGIAO, FILIAL, ENDEFILI
    WHERE REGIAO.CDREGIAO =  FILIAL.CDREGIAO
      AND FILIAL.CDFILIAL = ENDEFILI.CDFILIAL
      AND NVL(ENDEFILI.IDTPENDEFILI, 'P') = 'P'
      AND REGIAO.CDPAIS   = ENDEFILI.CDPAIS
      AND REGIAO.SGESTADO = ENDEFILI.SGESTADO
      AND REGIAO.CDREGIAO = P_CDREGIAO;

   --ALTERACAO DIA 06/02/2017
   SELECT MAX(CDTIPOOPER) INTO V_TIPOOPER
   FROM PARCMPSUP
   WHERE CDFILIAL = V_CDFILIAL;
   --FIM ALTERACAO DIA 06/02/2017

   SELECT MAX(SUBSTR(EMITENTE(V_CDFILIAL, P_CDPRODUTO, P_CDFORNECED), 3, 2)) AS CDEMPRESA
     INTO V_CDEMPRESA
     FROM PARAMGERAL;

   /*
   ALTERACAO DIA 06/02/2017
    SELECT MAX(EMPRESA.CDEMPRESA), MIN(INSCRESTAD.CDINSCESTA)
     INTO V_CDEMPRESA, V_INSCESTA
     FROM EMPRESA, INSCRESTAD
    WHERE EMPRESA.CDEMPRESA = V_CDEMPRESA
      AND EMPRESA.CDEMPRESA = INSCRESTAD.CDEMPRESA;
   FIM ALTERACAO DIA 06/02/2017
   */
   --ALTERACAO DIA 06/02/2017
   IF V_INSCESTA IS NULL THEN
      SELECT MAX(CDINSCESTA)
        INTO V_INSCESTA
        FROM FILIAL
       WHERE CDFILIAL  = V_CDFILIAL
         AND CDEMPRESA = V_CDEMPRESA;
   END IF;
   /*FIM DA ALTERACAO*/
  SELECT MAX(CDARVPROD) INTO V_CDARVPROD
  FROM PRODUTO
  WHERE CDPRODUTO = P_CDPRODUTO;

--Variaveis para consulta de Aliquota, Incidencia

   SELECT MAX(CDPAIS), MAX(SGESTADO), MAX(CDMUNICIPIO) INTO V_PAISORIG, V_ESTAORIG, V_MUNIORIG
   FROM ENDEFORN
   WHERE (CDFORNECED   = P_FORNECEDOR) AND
         (IDTPENDEFORN = 'P');

   V_IDINTEREST := 'N';
   IF (V_PAISDEST = V_PAISORIG) AND (V_ESTADEST <> V_ESTAORIG) THEN
      V_IDINTEREST := 'S';
   END IF;
   /*
   ALTERACAO DIA 06/02/2017
   SELECT MAX(CDTIPOOPER) INTO V_TIPOOPER
   FROM PARCMPSUP
   WHERE CDFILIAL = P_FILCENT;
   FIM ALTERACAO DIA 06/02/2017
   */
   IF (V_TIPOOPER IS NULL) THEN
      V_TIPOOPER := '01';
   END IF;

   SELECT MAX(IDCARACFIS) INTO V_CARACFIS
   FROM PARAMFILIAL
   WHERE CDFILIAL = P_FILCENT;
---------------------------------------------------------------------------------------------------------

-- Atualizacao da tabela de ItemCol
   FOR C_ITEMCOLP IN (SELECT VRPRECUNIITM, VRPERDESITM, QTACMPITMCOL
                      FROM ITEMCOLE
                      WHERE ITEMCOLE.CDFILIAL    = P_FILCENT    AND
                            ITEMCOLE.NRCOLEPRECO = P_LANCCOLP   AND
                            ITEMCOLE.CDFORNECED  = P_CDFORNECED AND
                            ITEMCOLE.CDREGIAO    = P_CDREGIAO   AND
                            ITEMCOLE.CDPRODUTO   = P_CDPRODUTO  AND
                            ITEMCOLE.CDMARCA     = P_CDMARCA)LOOP

      IF (C_ITEMCOLP.QTACMPITMCOL IS NULL) OR (C_ITEMCOLP.QTACMPITMCOL = 0) THEN
         V_QTACMPITMCOL := 1;
      END IF;
      IF (C_ITEMCOLP.VRPERDESITM IS NULL) THEN
         V_LIQUIITEM := C_ITEMCOLP.VRPRECUNIITM; ---* V_QTACMPITMCOL;
      ELSE
         V_LIQUIITEM := (C_ITEMCOLP.VRPRECUNIITM) * ((100 - C_ITEMCOLP.VRPERDESITM)/100);
      END IF;

      CONSULTA_INCIDENCIA('E', V_CDEMPRESA, V_CDARVPROD, V_INSCESTA, V_TIPOOPER, 'COLP'||P_FILCENT, P_LANCCOLP, V_CDGRUPOFISC, NULL, V_IDINTEREST,
                          '', V_CDFILIAL, P_FORNECEDOR, '', P_INIVALID, '', V_LIQUIITEM, 'N');

---------------------------------------------------------------------------------------------------------
--Atualizacao da tabela de impostos por item.

      FOR C_INCIDENCIA IN (SELECT DISTINCT
                                  CDIMPOTEMP AS CDIMPOTEMP,
                                  CDFISCTEMP,
                                  IP.IDTRATIMPO,
                                  IP.IDIMPORECUP,
                                  NVL(IMPCOLET.IDIMPDIGCOL, 'N') AS IDIMPDIGCOL,
                                  IMPCOLET.VRALIQIMPCOL
                           FROM INCITEMP IT, IMPOSTO IP, IMPCOLET
                           WHERE (IT.NRINCITEMP = V_INCITEMP)    AND
                                 (IP.CDIMPOSTO  = IT.CDIMPOTEMP) AND
                                 (IP.IDPRODNOTA = 'P')        AND
                                 (IMPCOLET.CDIMPOSTO(+)   = IP.CDIMPOSTO) AND
                                 (IMPCOLET.CDFILIAL(+)    = P_FILCENT)    AND
                                 (IMPCOLET.NRCOLEPRECO(+) = P_LANCCOLP)   AND
                                 (IMPCOLET.CDFORNECED(+)  = P_CDFORNECED) AND
                                 (IMPCOLET.CDREGIAO(+)    = P_CDREGIAO)   AND
                                 (IMPCOLET.CDPRODUTO(+)   = P_CDPRODUTO)  AND
                                 (IMPCOLET.CDMARCA(+)     = P_CDMARCA)
                                 ORDER BY CDIMPOTEMP) LOOP

         CONSULTA_ALIQUOTA(C_INCIDENCIA.CDIMPOTEMP, 'E', V_CDEMPRESA, V_CDARVPROD, V_INSCESTA, V_PAISORIG,
                           V_ESTAORIG, V_PAISDEST, V_ESTADEST, V_MUNIORIG, V_LIQUIITEM, P_INIVALID,
                           'COLP'||P_FILCENT, P_LANCCOLP, V_CDGRUPOFISC, V_TIPOOPER,
                           '', 'N', V_LIQUIITEM, P_FILCENT, P_FORNECEDOR, '');




         V_PARDEDTMP  := 0;
         V_PREDBCTMP  := 0;
         V_ALIQUTMP   := 0;
         V_IMPOSTOIT  := 0;

         SELECT MAX(VRPARDEDTMP), MAX(VRPREDBCTMP), MAX(VRALIQUTMP), NVL(MAX(VRPBCSTTMP),0),  NVL(MAX(IDPMCBSCALTMP), 'S')
           INTO V_PARDEDTMP,V_PREDBCTMP,V_ALIQUTMP, V_PBCSUBTRIB, V_IDPMCBASECAL
           FROM ALIQTEMP
          WHERE (NRALIQTEMP = V_ALIQTEMP);

         IF (V_ALIQUTMP IS NULL) THEN
-- FOI RETIRADO POIS DEVE SER CALCULADO MAS NAO DEVERA SER TOTALIZADO FUTURAMENTE
-- OR (C_INCIDENCIA.IDIMPORECUP = 'S' AND C_INCIDENCIA.CDFISCTEMP <> '1') THEN
            V_ALIQUTMP := 0;
         ELSE
            IF C_INCIDENCIA.IDIMPDIGCOL = 'S' THEN
               V_ALIQUTMP := C_INCIDENCIA.VRALIQIMPCOL;
            END IF;
         END IF;

         IF (V_PREDBCTMP IS NULL) THEN
            V_PREDBCTMP := 0;
         END IF;

         IF (V_PARDEDTMP IS NULL) THEN
             V_PARDEDTMP := 0;
         END IF;

         V_TAXABASECALC := (100 - V_PREDBCTMP)/100;
         V_TAXAALIQUOTA := (V_ALIQUTMP/100);
         V_TAXABCSUBSTR := 1 + (V_PBCSUBTRIB/100);
         V_BASECALCIT   := V_LIQUIITEM * V_TAXABASECALC;
         /*ALTERACAO PARA CONSIDERAR ICMS-ST*/

         /*V_IMPOSTOIT    := ((V_LIQUIITEM * V_TAXABASECALC) * V_TAXAALIQUOTA) - V_PARDEDTMP;

         V_CONTABCALC := V_LIQUIITEM - (V_LIQUIITEM * V_TAXABASECALC);
         V_PERDBCALC  := 100 - V_PREDBCTMP; */


         /*ALTERACAO PARA CONSIDERAR ICMS-ST*/
         IF V_PBCSUBTRIB > 0 THEN
            V_BASECALCIT := (V_BASECALCIT * V_TAXABCSUBSTR);
            V_PREDBCTMP  := V_PBCSUBTRIB;
         END IF;

         V_BASEVLRMAX   := 0;
         V_VRPEMAXVENDA := 0;
         V_VRMAXVENDA   := 0;
         V_CALCVLRMAX   := 0;

         /*VALOR MAXIMO DE VENDA AO COSUMIDOR*/
         BEGIN
            SELECT NVL(MAX(VRMAXVENDA),0), NVL(MAX(VRPEMAXVENDA),0)
              INTO   V_VRMAXVENDA     , V_VRPEMAXVENDA
              FROM VRMAXVENPROD A
             WHERE (CDPAIS   = V_PAISDEST)          AND
                   (SGESTADO = V_ESTADEST)          AND
                   (A.CDPRODUTO = P_CDPRODUTO);
         EXCEPTION
            WHEN NO_DATA_FOUND THEN
               V_VRMAXVENDA := 0;
               V_VRPEMAXVENDA := 0;
         END;

         IF V_VRMAXVENDA IS NOT NULL THEN
            V_CALCVLRMAX := (1 * V_VRMAXVENDA) * (V_VRPEMAXVENDA/100);
            V_BASEVLRMAX := V_CALCVLRMAX;
         END IF;

         /*IMPOSTO DE SUBSTITUICAO TRIBUTARIA*/
         FOR C_ICMSST IN (SELECT CDIMPOSTO
                            FROM IMPOSTO
                           WHERE CDIMPOSTRIB = C_INCIDENCIA.CDIMPOTEMP)
         LOOP
            V_CDIMPOSTRIB := V_CDIMPOSTRIB||C_ICMSST.CDIMPOSTO||'_';
         END LOOP;

         IF V_CDIMPOSTRIB IS NULL THEN
            V_IMPOSTOIT    := ((V_LIQUIITEM * V_TAXABASECALC) * V_TAXAALIQUOTA) - V_PARDEDTMP;
         ELSE
         /*Se o parametro de "Utiliza PMC" estiver marcado eu comparo o percentual de majoracao com o valor maximo
           de venda e o maior entra na base de calculo. Se o parametro estiver desmarcado sempre sera utilizado o percentual de
           majoracao */
            IF NVL(V_IDPMCBASECAL, 'S') = 'S' THEN
               IF V_BASECALCIT > V_BASEVLRMAX THEN
                  V_IMPOSTOIT   := (V_BASECALCIT * V_TAXAALIQUOTA) - V_PARDEDTMP;
               ELSE
                  V_IMPOSTOIT   := (V_BASEVLRMAX * V_TAXAALIQUOTA) - V_PARDEDTMP;
               END IF;
            ELSE
               V_IMPOSTOIT   := (V_BASECALCIT * V_TAXAALIQUOTA) - V_PARDEDTMP;
            END IF;

            SELECT NVL(MAX(IDVRIMPSTRIB), 'N')
              INTO V_IDVRIMPSTRIB
              FROM IMPCOLET I, IMPOSTO II
             WHERE (I.CDFILIAL    = P_FILCENT)
               AND (I.NRCOLEPRECO = P_LANCCOLP)
               AND (I.CDMARCA     = P_CDMARCA)
               AND (I.CDFORNECED  = P_CDFORNECED)
               AND (I.CDREGIAO    = P_CDREGIAO)
               AND (I.CDPRODUTO   = P_CDPRODUTO)
               AND (INSTR(V_CDIMPOSTRIB,II.CDIMPOSTO||'_') > 0)
               AND (I.CDIMPOSTO = II.CDIMPOSTO);

            IF (NVL(V_IDVRIMPSTRIB,'N') = 'N') THEN
               V_VRIMPCOLET := 0;
            ELSE
               BEGIN
                  SELECT NVL(MAX(VRIMPCOLETA),0)
                    INTO V_VRIMPCOLET
                    FROM IMPCOLET I
                   WHERE (I.CDFILIAL    = P_FILCENT)
                     AND (I.NRCOLEPRECO = P_LANCCOLP)
                     AND (I.CDMARCA     = P_CDMARCA)
                     AND (I.CDFORNECED  = P_CDFORNECED)
                     AND (I.CDREGIAO    = P_CDREGIAO)
                     AND (I.CDPRODUTO   = P_CDPRODUTO)
                     AND (INSTR(V_CDIMPOSTRIB,I.CDIMPOSTO||'_') > 0);
               Exception
                  When No_Data_Found Then
                     V_VRIMPCOLET := 0;
               End;
            END IF;
            V_IMPOSTOIT := V_IMPOSTOIT - V_VRIMPCOLET;
         END IF;
         /*FIM ALTERACAO PARA CONSIDERAR ICMS-ST*/

         IF (V_IMPOSTOIT < 0) THEN
            V_IMPOSTOIT := 0;
         END IF;

         V_ADIMPAF := 0;

         IF (C_INCIDENCIA.IDTRATIMPO = 'A') THEN
            V_ADIMPAF := V_IMPOSTOIT;

         ELSIF (C_INCIDENCIA.IDTRATIMPO = 'D') THEN
            V_ADIMPAF := - V_IMPOSTOIT;
         END IF;

         DELETE IMPCOLET
         WHERE (CDFILIAL    = P_FILCENT)    AND
               (NRCOLEPRECO = P_LANCCOLP)   AND
               (CDFORNECED  = P_CDFORNECED) AND
               (CDREGIAO    = P_CDREGIAO)   AND
               (CDPRODUTO   = P_CDPRODUTO)  AND
               (CDMARCA     = P_CDMARCA)    AND
               (CDIMPOSTO   = C_INCIDENCIA.CDIMPOTEMP);

         INSERT INTO IMPCOLET(
            CDFILIAL, NRCOLEPRECO, CDFORNECED, CDREGIAO, CDPRODUTO, CDMARCA,
            CDIMPOSTO, VRALIQIMPCOL, VRPERRBCALCO, VRIMPCOLETA, VRBASECALCOL,
            VRPARCDEDCOL, CDFISCITMCOL, VRADIMPCOL, IDIMPDIGCOL)
         VALUES(
            P_FILCENT, P_LANCCOLP, P_CDFORNECED, P_CDREGIAO, P_CDPRODUTO, P_CDMARCA,
            C_INCIDENCIA.CDIMPOTEMP,V_ALIQUTMP,V_PREDBCTMP, V_IMPOSTOIT, V_BASECALCIT,
            V_PARDEDTMP, C_INCIDENCIA.CDFISCTEMP, V_ADIMPAF, C_INCIDENCIA.IDIMPDIGCOL);
         DELETE ALIQTEMP
         WHERE NRALIQTEMP = V_ALIQTEMP;
      END LOOP;

      DELETE INCITEMP
      WHERE NRINCITEMP = V_INCITEMP;

      IF P_TRANSACAO = 'S' THEN
         COMMIT;
      END IF;   
   END LOOP;

---------------------------------------------------------------------------------------------------------
--Calculo do Valor dos Impostos que contem outros impostos na sua Base de Calculo

   FOR C_PRODUTO IN (SELECT  IP.CDFORNECED, IP.CDREGIAO,IP.CDPRODUTO,
                             IP.CDMARCA, II.CDIMPOSTO,
                             II.VRALIQIMPCOL, II.VRPERRBCALCO,
                             II.VRIMPCOLETA, II.VRPARCDEDCOL,
                             II.CDFISCITMCOL, IM.IDTRATIMPO, IM.IDIMPORECUP
                     FROM ITEMCOLE IP, IMPCOLET II, IMPOSTO IM
                     WHERE (IP.CDFILIAL    = P_FILCENT)      AND
                           (IP.NRCOLEPRECO = P_LANCCOLP)     AND
                           (IP.CDFORNECED  = P_CDFORNECED)   AND
                           (IP.CDREGIAO    = P_CDREGIAO)     AND
                           (IP.CDPRODUTO   = P_CDPRODUTO)    AND
                           (IP.CDMARCA     = P_CDMARCA)      AND
                           (II.CDFILIAL    = IP.CDFILIAL)    AND
                           (II.NRCOLEPRECO = IP.NRCOLEPRECO) AND
                           (II.CDFORNECED  = IP.CDFORNECED)  AND
                           (II.CDREGIAO    = IP.CDREGIAO)    AND
                           (II.CDPRODUTO   = IP.CDPRODUTO)   AND
                           (II.CDMARCA     = IP.CDMARCA)     AND
                           (IM.CDIMPOSTO   = II.CDIMPOSTO)   AND
                           (II.IDIMPDIGCOL = 'N')) LOOP

      V_CDIMPOBCALTPOP := NULL;
      SELECT MAX(BC.CDIMPOBCALC), SUM(VRIMPCOLETA) AS VRIMPOBCALC INTO V_CDIMPOBCALTPOP, V_TOTAIMPBCALC
        FROM ITEMCOLE IP, IMPCOLET II, BASECALCTPOPER BC
       WHERE (BC.IDENTRSAIDOP = 'E')
         AND (BC.CDTIPOOPER   = V_TIPOOPER)
         AND (BC.CDIMPOSTO    = C_PRODUTO.CDIMPOSTO)
         AND (IP.CDFILIAL     = P_FILCENT)
         AND (IP.NRCOLEPRECO  = P_LANCCOLP)
         AND (II.CDFILIAL     = IP.CDFILIAL)
         AND (II.NRCOLEPRECO  = IP.NRCOLEPRECO)
         AND (IP.CDFORNECED   = C_PRODUTO.CDFORNECED)
         AND (IP.CDREGIAO     = C_PRODUTO.CDREGIAO)
         AND (IP.CDPRODUTO    = C_PRODUTO.CDPRODUTO)
         AND (IP.CDMARCA      = C_PRODUTO.CDMARCA)
         AND (II.CDFORNECED   = C_PRODUTO.CDFORNECED)
         AND (II.CDREGIAO     = C_PRODUTO.CDREGIAO)
         AND (II.CDPRODUTO    = C_PRODUTO.CDPRODUTO)
         AND (II.CDMARCA      = C_PRODUTO.CDMARCA)
         AND (II.CDIMPOSTO    = BC.CDIMPOBCALC)
         AND (II.IDIMPDIGCOL  = 'N')
         AND ((C_PRODUTO.CDFISCITMCOL = BC.CDFISCIMPOTPOP) OR (BC.CDFISCIMPOTPOP IS NULL));

      IF V_CDIMPOBCALTPOP IS NULL THEN
         SELECT SUM(VRIMPCOLETA) AS VRIMPOBCALC INTO V_TOTAIMPBCALC
         FROM ITEMCOLE IP, IMPCOLET II, BASECALC BC
         WHERE (BC.CDIMPOSTO   = C_PRODUTO.CDIMPOSTO)   AND
               (IP.CDFILIAL    = P_FILCENT)             AND
               (IP.NRCOLEPRECO = P_LANCCOLP)            AND
               (II.CDFILIAL    = IP.CDFILIAL)           AND
               (II.NRCOLEPRECO = IP.NRCOLEPRECO)        AND
               (IP.CDFORNECED  = C_PRODUTO.CDFORNECED)  AND
               (IP.CDREGIAO    = C_PRODUTO.CDREGIAO)    AND
               (IP.CDPRODUTO   = C_PRODUTO.CDPRODUTO)   AND
               (IP.CDMARCA     = C_PRODUTO.CDMARCA)     AND
               (II.CDFORNECED  = C_PRODUTO.CDFORNECED)  AND
               (II.CDREGIAO    = C_PRODUTO.CDREGIAO)    AND
               (II.CDPRODUTO   = C_PRODUTO.CDPRODUTO)   AND
               (II.CDMARCA     = C_PRODUTO.CDMARCA)     AND
               (II.CDIMPOSTO   = BC.CDIMPOBCALC)        AND
               (II.IDIMPDIGCOL = 'N')                   AND
               ((C_PRODUTO.CDFISCITMCOL = BC.CDFISCIMPO) OR (BC.CDFISCIMPO IS NULL)) AND
               (BC.IDTIPOBCALC   = 'I');
      END IF;

      IF NOT (V_TOTAIMPBCALC IS NULL) THEN
         V_TAXABASECALC := (100 - C_PRODUTO.VRPERRBCALCO)/100;
         V_TAXAALIQUOTA := (C_PRODUTO.VRALIQIMPCOL/100);

         UPDATE IMPCOLET
         SET VRBASECALCOL = VRBASECALCOL + (V_TOTAIMPBCALC * V_TAXABASECALC),
             VRIMPCOLETA  = VRIMPCOLETA  + ((V_TOTAIMPBCALC * V_TAXABASECALC) * V_TAXAALIQUOTA)
         WHERE (CDFILIAL    = P_FILCENT)             AND
               (NRCOLEPRECO = P_LANCCOLP)            AND
               (CDFORNECED  = C_PRODUTO.CDFORNECED)  AND
               (CDREGIAO    = C_PRODUTO.CDREGIAO)    AND
               (CDPRODUTO   = C_PRODUTO.CDPRODUTO)   AND
               (CDMARCA     = C_PRODUTO.CDMARCA)     AND
               (CDIMPOSTO   = C_PRODUTO.CDIMPOSTO);
      END IF;
      IF P_TRANSACAO = 'S' THEN
         COMMIT;
      END IF;   

   END LOOP;
/* ATUALIZA O PRECO ECONOMICO DO ITEM */
   UPDATE ITEMCOLE
   SET IDTPFOPGTCOL = IDTPFOPGTCOL
   WHERE
    CDFILIAL    = P_FILCENT    AND
    NRCOLEPRECO = P_LANCCOLP   AND
    CDREGIAO    = P_CDREGIAO   AND
    CDFORNECED  = P_FORNECEDOR AND
    CDPRODUTO   = P_CDPRODUTO  AND
    CDMARCA     = P_CDMARCA;

   IF P_TRANSACAO = 'S' THEN
      COMMIT;
   END IF;
END;
/