CREATE OR REPLACE PROCEDURE GRAVA_IMP_FEDERAIS_VND( 
   P_CDFILIAL        IN FILIAL.CDFILIAL%TYPE,
   P_CDCLIENTE       IN CLIENTE.CDCLIENTE%TYPE,
   P_TIPOOPER        IN TIPOOPERAC.CDTIPOOPER%TYPE,
   P_CDCAIXA         IN VARCHAR,
   P_TCDCAIXA        IN VARCHAR,
   P_IDORIGEMREDZ    IN VARCHAR2,
   P_DTINICIAL       IN NOTAFISCAL.DTEMISSAO%TYPE,
   P_DTFINAL         IN NOTAFISCAL.DTEMISSAO%TYPE,
   P_CDFILIALNFFIS   IN FILIAL.CDFILIAL%TYPE,
   P_LANCTONF        IN NOTAFISCAL.NRLANCTONF%TYPE,
   P_IDAPROVEXTEMP   IN VENDA.IDAPROVEXTEMP%TYPE,
   P_DTINIINTCONTDFS IN CONTOPECTBL.DTINIINTCONTDFS%TYPE)
AS
   V_GRUPOFISC        VARCHAR(10);
   V_CDEMPRESA        VARCHAR(2);
   V_CDINSCESTA       VARCHAR(30);
   V_VRALIQIMP        NUMBER;
   V_CSTNFE           VARCHAR(5);
   V_IDMODBCNFE       VARCHAR(5);
   V_IDMODBCSTNFE     VARCHAR(5);
   V_CDTPCRPICOSTNFE  VARCHAR(10);
   V_CDNATUBCPCSTNFE  VARCHAR(10);
   V_IDMOTIDESSTNFE   VARCHAR(10);
   V_IDUTUFORIG       VARCHAR(1);
   V_IDUTUFDEST       VARCHAR(1);
   V_SGESTORIG        VARCHAR(5);
   V_SGESTDEST        VARCHAR(5);
   V_PAISORIG         VARCHAR(5);
   V_PAISDEST         VARCHAR(5);
   V_CDFISCALIT       VARCHAR(1);
   V_CDFISCOPERSN     ITEMPRODUTO.CDFISCOPERSN%TYPE;
   V_CDIMPPIS         VARCHAR(2);
   V_CDIMPCOFINS      VARCHAR(2);
   V_CDPRODUTO        VARCHAR2(12);
   V_CDCLIENTE        CLIENTE.CDCLIENTE%TYPE;
   V_CDGRUPOFISC      VARCHAR2(03);
   V_ESTAORIG         VARCHAR2(02);
   V_MUNIORIG         VARCHAR2(04);
   V_ESTADEST         VARCHAR2(02);
   V_IDENDEMIS        VARCHAR2(01);
   V_IDINTEREST       VARCHAR2(01);
   V_IDINTERNA        VARCHAR2(01);
   V_CDSITUCRT        VARCHAR2(01);
   V_CDPRODUTOER      VARCHAR2(12);
   V_COUNT            NUMBER;
   V_NRSEQITVENOUTIMP VARCHAR2(20);
   V_CFOPITEM         VARCHAR2(06);
   V_DTEMISSAO        NOTAFISCAL.DTEMISSAO%TYPE;
BEGIN
   /*BUSCA A EMPRESA DA FILIAL*/
   BEGIN
      SELECT CDEMPRESA, CDINSCESTA
        INTO V_CDEMPRESA, V_CDINSCESTA
        FROM FILIAL
       WHERE CDFILIAL = P_CDFILIAL;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_CDEMPRESA  := NULL;
         V_CDINSCESTA := NULL;
   END;

   /*VERIFICA O REGIME DE APURACAO DA EMPRESA - SIMPLES NACIONAL OU NORMAL*/
   BEGIN
      SELECT NVL(MAX(CDSITUCRT), '3') CDSITUCRT
        INTO V_CDSITUCRT
        FROM PARAMEMPRESA
       WHERE CDEMPRESA = V_CDEMPRESA;
   EXCEPTION
        WHEN NO_DATA_FOUND THEN
          V_CDSITUCRT := '';
   END;

   V_GRUPOFISC := NULL;
   /*VERIFICA SE EXISTE GRUPO FISCAL DE IMPOSTO POR FILIAL*/
   BEGIN
      SELECT GR.CDGRUPOFISC
        INTO V_GRUPOFISC
        FROM GRUPOFISCIMPFIL GR, FILIAL F, IMPOSTO IM
       WHERE IM.CDIMPOSTONFE = '50'
         AND IM.CDIMPOSTO    = GR.CDIMPOSTO
         AND F.CDFILIAL      = P_CDFILIAL
         AND F.CDFILIAL      = GR.CDFILIAL;
   EXCEPTION
      WHEN NO_DATA_FOUND THEN
         V_GRUPOFISC := NULL;
   END;

   /*VERIFICA SE EXISTE GRUPO FISCAL PARA IMPOSTO/IE SELECIONADA*/
   IF V_GRUPOFISC IS NULL THEN
      BEGIN
         SELECT GR.CDGRUPOFISC
           INTO V_GRUPOFISC
           FROM GRFISIMPIECLIE GR, FILIAL F, IMPOSTO IM
          WHERE IM.CDIMPOSTONFE = '50'
            AND IM.CDIMPOSTO    = GR.CDIMPOSTO
            AND F.CDINSCESTA    = GR.CDINSCESTA
            AND F.CDEMPRESA     = GR.CDEMPRESA
            AND GR.CDCLIENTE    = P_CDCLIENTE
            AND F.CDFILIAL      = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_GRUPOFISC := NULL;
      END;
   END IF;

   /*VERIFICA SE HA GRUPO FISCAL  PARA A FILIAL*/
   IF V_GRUPOFISC IS NULL THEN
      BEGIN
         SELECT CDGRUPOFISC
           INTO V_GRUPOFISC
           FROM FILIAL
          WHERE CDFILIAL = P_CDFILIAL;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_GRUPOFISC := NULL;
      END;
   END IF;

   /*VERIFICA SE HA GRUPO FISCAL PARA CLIENTE*/
   IF V_GRUPOFISC IS NULL THEN
      BEGIN
         SELECT CDGRUPOFISC
           INTO V_GRUPOFISC
           FROM CLIENTE
          WHERE CDCLIENTE = P_CDCLIENTE;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_GRUPOFISC := NULL;
      END;
   END IF;

   IF P_IDORIGEMREDZ IN ('NFCE','SAT') THEN
      BEGIN
         SELECT MAX(DECODE(CDIMPOSTONFE,'50',CDIMPOSTO,'')) AS CDPIS,
                MAX(DECODE(CDIMPOSTONFE,'60',CDIMPOSTO,'')) AS CDCOFINS
           INTO V_CDIMPPIS, V_CDIMPCOFINS
           FROM IMPOSTO
          WHERE CDIMPOSTONFE IN ('50','60');
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_CDIMPPIS    := NULL;
            V_CDIMPCOFINS := NULL;
      END;

      FOR C_ITVEN IN (SELECT IV.CDFILIAL, IV.CDCAIXA, VE.DTENTRVENDA AS DTREDUCAOZ, TRUNC(VE.DTEMISSAONFCE) AS DTEMISSAONFCE, P.CDARVPROD,
                             P.CDPRODUTO, MAX(IT.CDCSTPRODPC) AS CDCSTPRODPC, MAX(IT.CDCSTPRODI) AS CDCSTPRODI, MAX(IT.VRPERPIS) AS VRPERPIS,
                             MAX(IT.VRPERCOFINS) AS VRPERCOFINS, MAX(IT.CDCFOPPROD) AS CDCFOPPROD, VE.CDSERIESAT,
                             SUM(TRUNC(((NVL(VRUNITVEND,0)+NVL(VRUNITVENDCL,0))*QTPRODVEND)+NVL(VRACRITVEND,0)-NVL(VRDESITVEND,0),2)) AS VRPRODUTO,
                             SUM(IT.VRIMPPIS) AS VRIMPPIS, SUM(IT.VRIMPCOFINS) AS VRIMPCOFINS,
                             M.CDFILIALNFFIS, M.NRLANCTONFFIS, MAX(IV.CDCLASFISC) AS CDCLASFISC
                        FROM VENDA VE, ITEMVENDA IV, ITVENDAIMPOS IT, PRODUTO P,
                             (SELECT DISTINCT CDFILIAL, CDCAIXA, NRSEQVENDA, CDFILIALNFFIS, NRLANCTONFFIS
                                FROM MOVCAIXA
                               WHERE IDTIPOMOVIVE IN ('E','S','T')) M
                       WHERE VE.CDFILIAL      = IV.CDFILIAL
                         AND VE.CDCAIXA       = IV.CDCAIXA
                         AND VE.NRSEQVENDA    = IV.NRSEQVENDA
                         AND IV.CDPRODUTO     = P.CDPRODUTO
                         AND VE.CDFILIAL      = P_CDFILIAL
                         AND VE.IDSITUVENDA   = 'O'
                         AND IV.CDFILIAL      = IT.CDFILIAL
                         AND IV.CDCAIXA       = IT.CDCAIXA
                         AND IV.NRSEQVENDA    = IT.NRSEQVENDA
                         AND IV.NRSEQUITVEND  = IT.NRSEQUITVEND
                         AND VE.DTENTRVENDA   BETWEEN P_DTINICIAL AND P_DTFINAL
                         AND VE.CDCAIXA       = P_CDCAIXA
                         AND VE.IDTPAMBNFCE   = '1'
                         AND VE.IDSTATUSNFCE  = 'A'
                         AND VE.IDTPEMISVEND  IN ('N','S')
                         AND M.CDFILIAL       = VE.CDFILIAL
                         AND M.CDCAIXA        = VE.CDCAIXA
                         AND M.NRSEQVENDA     = VE.NRSEQVENDA
                         AND VE.IDAPROVACAONFCE = 'P'
                         AND P_IDORIGEMREDZ   = DECODE(VE.IDTPEMISVEND,'N','NFCE','SAT')
                       GROUP BY IV.CDFILIAL, IV.CDCAIXA, VE.DTENTRVENDA, P.CDARVPROD,
                             P.CDPRODUTO, VE.CDSERIESAT, TRUNC(VE.DTEMISSAONFCE),
                             M.CDFILIALNFFIS, M.NRLANCTONFFIS
                       ORDER BY P.CDPRODUTO) LOOP

         /*OS CAMPOS V_CDTPCRPICOSTNFE E V_CDNATUBCPCSTNFE SAO NECESSARIOS APENAS PARA ENTRADAS E DEVOLUCOES, POR ISSO A CHAMADA DA FUNCAO FOI COMENTADA PARA SAT E NFC-E, POR PERFORMANCE*/
         /*CONSULTA_CST_NFE('S', V_CDEMPRESA, C_ITVEN.CDARVPROD, V_CDINSCESTA, P_TIPOOPER, V_GRUPOFISC, '50', 'N', 'N', P_CDFILIAL, P_LANCTONF, '', V_CSTNFE, V_IDMODBCNFE, V_IDMODBCSTNFE, V_CDTPCRPICOSTNFE, V_CDNATUBCPCSTNFE, V_IDMOTIDESSTNFE);*/

         /*O CAMPO DTEMISSAONFCE E PREENCHIDO COM A DATA DE ENTRADA DA VENDA E O CAMPO DTREDUCAOZ COM A DATA DE EMISSAO.
           AS DATAS FORAM TROCADAS PARA NAO ALTERAR NENHUM SELECT NOS OUTROS PONTOS QUE UTILIZAM A ROTINA (SPED, APURACAO...)
           E NECESSARIO GRAVAR AS DUAS DATAS PARA EVITAR ERRO DE PK QUANDO FOR NECESSARIO REALIZAR A ROTINA DE APROVACAO DUAS VEZES NO MESMO DIA, CAIXA E FILIAL.
           EX.: QUANDO EXISTIREM VENDAS DEPOIS DA MEIA NOITE*/

         V_CDFISCOPERSN := '';
         IF V_CDSITUCRT <> '3' THEN
            /*VERIFICA O CSOSN*/
            V_CDFISCOPERSN := C_ITVEN.CDCSTPRODI;
         END IF;

         IF P_IDAPROVEXTEMP = 'S' THEN
            V_DTEMISSAO := P_DTINIINTCONTDFS;
         ELSE
            V_DTEMISSAO := C_ITVEN.DTEMISSAONFCE;
         END IF;

         IF V_CDIMPPIS IS NOT NULL THEN
            IF (C_ITVEN.VRPRODUTO > 0) AND (C_ITVEN.VRPERPIS > 0) THEN
               V_CDFISCALIT := '1';
            ELSE
               V_CDFISCALIT := '3';
            END IF;
            V_CDPRODUTOER := C_ITVEN.CDPRODUTO;
            NOVO_CODIGO_NT('ITEMVENOUTIMPOS', V_NRSEQITVENOUTIMP);
            INSERT INTO ITEMVENOUTIMPOS
               (NRSEQITVENOUTIMP, CDFILIAL, CDCAIXA, DTREDUCAOZ, CDIMPOSTO, CDPRODUTO, CDSITUTRIBNFE, CDSERIESAT, VRALIQIT, VRIMPOSTOIT, VRPRODUTO,
                CDFISCALIT, CDTPCRPICOSTNFE, CDNATUBCPCSTNFE, CDFISCOPERSN, DTEMISSAONFCE, CDFILIALNFFIS, NRLANCTONFFIS, IDORIGEMVENDA, CDCLASFISC)
            VALUES
               (V_NRSEQITVENOUTIMP, C_ITVEN.CDFILIAL, C_ITVEN.CDCAIXA, V_DTEMISSAO, V_CDIMPPIS, C_ITVEN.CDPRODUTO, C_ITVEN.CDCSTPRODPC, C_ITVEN.CDSERIESAT, C_ITVEN.VRPERPIS, C_ITVEN.VRIMPPIS, C_ITVEN.VRPRODUTO,
                V_CDFISCALIT, V_CDTPCRPICOSTNFE, V_CDNATUBCPCSTNFE, NVL(V_CDFISCOPERSN,C_ITVEN.CDCFOPPROD), C_ITVEN.DTREDUCAOZ, C_ITVEN.CDFILIALNFFIS, C_ITVEN.NRLANCTONFFIS, P_IDORIGEMREDZ, C_ITVEN.CDCLASFISC);
         END IF;

         IF V_CDIMPCOFINS IS NOT NULL THEN
            IF (C_ITVEN.VRPRODUTO > 0) AND (C_ITVEN.VRPERCOFINS > 0) THEN
               V_CDFISCALIT := '1';
            ELSE
               V_CDFISCALIT := '3';
            END IF;
            NOVO_CODIGO_NT('ITEMVENOUTIMPOS', V_NRSEQITVENOUTIMP);
            INSERT INTO ITEMVENOUTIMPOS
               (NRSEQITVENOUTIMP, CDFILIAL, CDCAIXA, DTREDUCAOZ, CDIMPOSTO, CDPRODUTO, CDSITUTRIBNFE, CDSERIESAT, VRALIQIT, VRIMPOSTOIT, VRPRODUTO,
                CDFISCALIT, CDTPCRPICOSTNFE, CDNATUBCPCSTNFE, CDFISCOPERSN, DTEMISSAONFCE, CDFILIALNFFIS, NRLANCTONFFIS, IDORIGEMVENDA, CDCLASFISC)
            VALUES
               (V_NRSEQITVENOUTIMP, C_ITVEN.CDFILIAL, C_ITVEN.CDCAIXA, V_DTEMISSAO, V_CDIMPCOFINS, C_ITVEN.CDPRODUTO, C_ITVEN.CDCSTPRODPC, C_ITVEN.CDSERIESAT, C_ITVEN.VRPERCOFINS, C_ITVEN.VRIMPCOFINS, C_ITVEN.VRPRODUTO,
                V_CDFISCALIT, V_CDTPCRPICOSTNFE, V_CDNATUBCPCSTNFE, NVL(V_CDFISCOPERSN,C_ITVEN.CDCFOPPROD), C_ITVEN.DTREDUCAOZ, C_ITVEN.CDFILIALNFFIS, C_ITVEN.NRLANCTONFFIS, P_IDORIGEMREDZ, C_ITVEN.CDCLASFISC);
         END IF;
      END LOOP;
   ELSE
      BEGIN
         SELECT NVL(MAX(IDENDCFOPCLI),'P')
           INTO V_IDENDEMIS
           FROM CLIENTE
          WHERE CDCLIENTE = P_CDCLIENTE;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
             V_IDENDEMIS := 'P';
      END;

      BEGIN
         SELECT MAX(CDPAIS), MAX(SGESTADO), MAX(CDMUNICIPIO)
           INTO V_PAISORIG, V_ESTAORIG, V_MUNIORIG
           FROM INSCRESTAD
          WHERE CDEMPRESA  = V_CDEMPRESA
            AND CDINSCESTA = V_CDINSCESTA;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
             V_PAISORIG := '0055';
             V_ESTAORIG := '';
             V_MUNIORIG := '';
      END;

      BEGIN
         SELECT MAX(CDPAIS), MAX(SGESTADO)
           INTO V_PAISDEST, V_ESTADEST
           FROM ENDECLIE
          WHERE CDCLIENTE    = P_CDCLIENTE
            AND IDTPENDECLIE = V_IDENDEMIS;
      EXCEPTION
           WHEN NO_DATA_FOUND THEN
             V_PAISDEST := '0055';
             V_ESTADEST := '';
      END;

      V_IDINTEREST := 'N';
      V_IDINTERNA  := 'N';

      IF ((V_PAISDEST = V_PAISORIG) AND (V_ESTADEST <> V_ESTAORIG)) THEN
         V_IDINTEREST := 'S';
      ELSIF (V_PAISDEST <> V_PAISORIG) THEN
         V_IDINTERNA := 'S';
      END IF;

      FOR C_ITVEN IN (SELECT IV.CDFILIAL, V.DTENTRVENDA, IV.CDCAIXA, P.CDARVPROD, P.CDPRODUTO, IP.CDCFOPPROD,
                             SUM(TRUNC(((NVL(VRUNITVEND,0)+NVL(VRUNITVENDCL,0))*QTPRODVEND)+NVL(VRACRITVEND,0)-NVL(VRDESITVEND,0),2)) AS VRPRODUTO,
                             MAX(IV.CDCLASFISC) AS CDCLASFISC, IP.CDCSTPRODPC, IP.CDCSTPRODI
                        FROM REDUCAOZ R, VENDA V, ITEMVENDA IV, PRODUTO P, (SELECT IV.CDFILIAL, IV.CDCAIXA, IV.NRSEQVENDA, IV.NRSEQUITVEND,
                                                                       IV.CDCFOPPROD, IV.CDCSTPRODPC, IV.CDCSTPRODI
                                                                  FROM ITVENDAIMPOS IV, IMPOSTO I
                                                                 WHERE IV.CDFILIAL  = P_CDFILIAL
                                                                   AND IV.CDCAIXA   = P_CDCAIXA
                                                                   AND IV.CDIMPOSTO = I.CDIMPOSTO
                                                                   AND I.IDTPIMPOSFIS <> 'S') IP
                       WHERE V.CDFILIAL      = IV.CDFILIAL
                         AND V.CDCAIXA       = IV.CDCAIXA
                         AND V.NRSEQVENDA    = IV.NRSEQVENDA
                         AND IV.CDPRODUTO    = P.CDPRODUTO
                         AND V.CDFILIAL      = P_CDFILIAL
                         AND IDSITUVENDA     = 'O'
                         AND NVL(V.IDTPEMISVEND,'E') = 'E'
                         AND DTENTRVENDA     BETWEEN P_DTINICIAL AND P_DTFINAL
                         AND V.CDCAIXA       = P_CDCAIXA
                         AND IV.CDFILIAL     = IP.CDFILIAL
                         AND IV.CDCAIXA      = IP.CDCAIXA
                         AND IV.NRSEQVENDA   = IP.NRSEQVENDA
                         AND IV.NRSEQUITVEND = IP.NRSEQUITVEND
                         AND R.CDFILIAL      = V.CDFILIAL
                         AND R.CDCAIXA       = V.CDCAIXA
                         AND R.DTREDUCAOZ    = V.DTENTRVENDA
                         AND R.NRSERIEREDZ   = NVL(V.NRSERIEIMPVND,V.NRSERIEVND)
                         AND R.IDSTATUS      = 'P'
                       GROUP BY IV.CDFILIAL, IV.CDCAIXA, P.CDPRODUTO, P.CDARVPROD, V.DTENTRVENDA, IP.CDCFOPPROD, IP.CDCSTPRODPC, IP.CDCSTPRODI) LOOP

         CONSULTA_INCIDENCIA('S', V_CDEMPRESA, C_ITVEN.CDARVPROD, V_CDINSCESTA, P_TIPOOPER, P_CDFILIAL, P_LANCTONF, V_GRUPOFISC, '', '', 'VND');

         /*VERIFICA CSOSN POR PRODUTO PARA EMPRESAS DO SIMPLES NACIONAL*/
         IF V_CDSITUCRT <> '3' THEN
            IF C_ITVEN.CDCSTPRODI IS NULL THEN
               CONSULTA_CSOSN('S', V_CDEMPRESA, C_ITVEN.CDARVPROD, V_CDINSCESTA, P_TIPOOPER, P_CDFILIAL, P_LANCTONF, V_GRUPOFISC, 'N', V_CDFISCOPERSN);
            ELSE
               V_CDFISCOPERSN := C_ITVEN.CDCSTPRODI;
            END IF;
         END IF;

         /*VERIFICA O CFOP POR PRODUTO*/
         IF C_ITVEN.CDCFOPPROD IS NULL THEN
            V_CFOPITEM := SUBSTR(CFOP_ITEM('00' , V_CDEMPRESA, V_CDINSCESTA, P_CDFILIAL, V_CDCLIENTE, P_TIPOOPER, C_ITVEN.DTENTRVENDA, C_ITVEN.CDARVPROD, V_PAISORIG, V_ESTAORIG, V_PAISDEST, V_ESTADEST),3,4);
         ELSE
            V_CFOPITEM := C_ITVEN.CDCFOPPROD;
         END IF;

         FOR CS IN (SELECT IT.CDIMPOTEMP, IT.CDFISCTEMP, IM.CDIMPOSTO
                      FROM INCITEMP IT, IMPOSTO IM
                     WHERE IT.NRINCITEMP   = P_CDFILIAL||P_LANCTONF
                       AND IT.CDIMPOTEMP   = IM.CDIMPOSTO
                       AND IM.IDORGARRECAD = 'F'
                       AND IM.CDIMPOSTONFE IN ('50','60')) LOOP

            /*BUSCA O CST NFE PARA OS IMPOSTOS PIS E COFINS*/
            IF C_ITVEN.CDCSTPRODPC IS NULL THEN
               CONSULTA_CST_NFE('S', V_CDEMPRESA, C_ITVEN.CDARVPROD, V_CDINSCESTA, P_TIPOOPER, V_GRUPOFISC, CS.CDIMPOTEMP, 'N','N', P_CDFILIAL, P_LANCTONF, '', V_CSTNFE, V_IDMODBCNFE, V_IDMODBCSTNFE, V_CDTPCRPICOSTNFE, V_CDNATUBCPCSTNFE, V_IDMOTIDESSTNFE);
            ELSE
               V_CSTNFE := C_ITVEN.CDCSTPRODPC;
            END IF;
            IF V_CSTNFE IS NULL THEN
               IF CS.CDFISCTEMP = '1' THEN
                  V_CSTNFE := '01';
               ELSE
                  V_CSTNFE := '08';
               END IF;
            END IF;

            CONSULTA_ALIQUOTA(CS.CDIMPOTEMP, 'S', V_CDEMPRESA, C_ITVEN.CDARVPROD, V_CDINSCESTA, '', '', '', '', '', '', C_ITVEN.DTENTRVENDA, P_CDFILIAL, P_LANCTONF, V_GRUPOFISC, P_TIPOOPER, 'VND');

            V_VRALIQIMP := NULL;
            SELECT MAX(VRALIQUTMP)
              INTO V_VRALIQIMP
              FROM ALIQTEMP
             WHERE NRALIQTEMP = P_CDFILIAL||P_LANCTONF;

            NOVO_CODIGO_NT('ITEMVENOUTIMPOS', V_NRSEQITVENOUTIMP);
            INSERT INTO ITEMVENOUTIMPOS
               (NRSEQITVENOUTIMP, CDFILIAL, CDCAIXA, DTREDUCAOZ, CDIMPOSTO, CDPRODUTO, CDSITUTRIBNFE, VRALIQIT, VRIMPOSTOIT, VRPRODUTO,
                CDFISCALIT, CDTPCRPICOSTNFE, CDNATUBCPCSTNFE, CDFISCOPERSN, DTEMISSAONFCE, CDFILIALNFFIS, NRLANCTONFFIS, IDORIGEMVENDA, CDCLASFISC)
            VALUES
               (V_NRSEQITVENOUTIMP, C_ITVEN.CDFILIAL, C_ITVEN.CDCAIXA, C_ITVEN.DTENTRVENDA, CS.CDIMPOTEMP, C_ITVEN.CDPRODUTO, V_CSTNFE, NVL(V_VRALIQIMP,0), 0, C_ITVEN.VRPRODUTO,
                CS.CDFISCTEMP, V_CDTPCRPICOSTNFE, V_CDNATUBCPCSTNFE, NVL(V_CDFISCOPERSN,V_CFOPITEM), SYSDATE, P_CDFILIALNFFIS, P_LANCTONF, NVL(P_IDORIGEMREDZ,'ECF'), C_ITVEN.CDCLASFISC);

            DELETE FROM ALIQTEMP
             WHERE NRALIQTEMP = P_CDFILIAL||P_LANCTONF;
         END LOOP;
         DELETE FROM INCITEMP
          WHERE NRINCITEMP = P_CDFILIAL||P_LANCTONF;
      END LOOP;
   END IF;
   EXCEPTION
      WHEN OTHERS THEN BEGIN
         RAISE_APPLICATION_ERROR(-20501,V_CDPRODUTOER||SQLERRM(SQLCODE),TRUE);
   END;
END;

/