CREATE OR REPLACE PROCEDURE APURA_EFETIVACAO
                     (P_CDCENTCMP      IN ITMAPURPREC.CDCENTITMAP%TYPE,
                      P_NRSEQAPUR      IN ITMAPURPREC.NRSEQITMAP%TYPE,
                      P_PRODINI        IN PRODUTO.CDARVPROD%TYPE DEFAULT NULL,
                      P_PRODFIN        IN PRODUTO.CDARVPROD%TYPE DEFAULT NULL,
                      P_DTINI          IN ITMAPURPREC.DTENTRAPUT%TYPE,
                      P_DTFIN          IN ITMAPURPREC.DTENTRAPUT%TYPE,
                      P_CDOPERADOR     IN VARCHAR2,
                      P_CDREGIAO       IN VARCHAR2 DEFAULT NULL,
                      P_CDFILIAL       IN ITMAPURPREC.CDFILIAP%TYPE,
                      P_DTPROCESSA     IN PARAMFILIAL.DTPROCESSA%TYPE,
                      P_FILIPROC       IN FILIAL.CDFILIAL%TYPE,
                      P_CDGRUPFILI     IN VARCHAR2 DEFAULT NULL,
                      P_OPTIMIZER_MODE IN VARCHAR2 DEFAULT 'CHOOSE',
                      P_ROWSAFFECT    OUT VARCHAR2,
                      P_CDOPERLANC     IN VARCHAR2,
                      P_CDCOMPRADOR    IN VARCHAR2,
                      P_LISTAFILIAL    IN VARCHAR2,
                      P_EXTRA          IN APURPRECO.IDCONSOLAPUEFET%TYPE,
                      P_NRLOGCORTEOL   IN LOGCORTEOL.NRLOGCORTEOL%TYPE DEFAULT NULL,
                      P_IDQTFRAC       IN VARCHAR2 DEFAULT 'N')
IS
 V_TREGIAO        VARCHAR(1);
 V_TGRUPFILI      VARCHAR(1);
 V_QTACOMPRAR     ITEMSOLI.QTSOLIPROD%TYPE;
 V_QTACOMPRAR_AUX ITEMSOLI.QTSOLIPROD%TYPE;
 V_QTDECOMP       ITEMAUTF.QTPROGENTAF%TYPE;
 V_EXISTAPUR      INT;
 V_PRODINI        VARCHAR(30);
 V_PRODFIN        VARCHAR(30);
 V_CDARVPROD      PRODUTO.CDARVPROD%TYPE;
 V_CDOPERINI      VARCHAR(12);
 V_CDOPERFIN      VARCHAR(12);
 V_ITEM           VARCHAR2(1);
 V_CTPRODATIV     INT;
 V_CTPRODCMP      INT;
 V_CTIMPOSTO      INT;
 V_VRARREDCMP     PRODUTO.VRARREDCMP%TYPE;
 V_IDPRODWEB      AUTOFORNE.IDAFPRODWEB%TYPE;
 V_IDAFOPERLOG    AUTOFORNE.IDAFOPERLOG%TYPE;
 V_IDCONSPRSOL    PARASUPRI.IDCONSPRSOL%TYPE;
 V_VRARREDEMPE    PRODFORNCOMP.VRARREDEMPE%TYPE;
 V_CDEMPRESA      EMPRESA.CDEMPRESA%TYPE;
 V_CONCKEY         VARCHAR2(200);
 V_IDTIPEMIT       VARCHAR2(1);
 V_EMITENTE        VARCHAR2(4);
 V_DSPZOPGTCONC    VARCHAR2(2000);
 V_IDUTISTATCOT    VARCHAR2(1);
 V_IDUTQTDISPGERAL VARCHAR2(1);

 V_LISTA_GRUPFILI VARCHAR2(20);   /* NUMERO DA PRXLISTA SOBRE GRUPFILI */
 V_LISTA_FILIAL   VARCHAR2(20);   /* NUMERO DA PRXLISTA SOBRE FILIAL   */
 V_LISTA_REGIAO   VARCHAR2(20);   /* NUMERO DA PRXLISTA SOBRE REGIAO   */

 V_REGIAO_AUX     VARCHAR2(2000); /* AUXILIAR PARA TRATAR A LISTA DE REGIAO   */
 V_GRUPFILI_AUX   VARCHAR2(2000); /* AUXILIAR PARA TRATAR A LISTA DE GRUPFILI */
 V_FILIAL_AUX     VARCHAR2(2000); /* AUXILIAR PARA TRATAR A LISTA DE FILIAL   */

 V_AUX_LISTA      VARCHAR2(2000);
 V_IDSEPAFIMP     VARCHAR2(1);

 V_CDFILIOPELOG   VARCHAR2(2000);
 V_CDFORNOPELOG   VARCHAR2(2000);
 V_IDPRODATIV     VARCHAR2(1);
 V_IDUTILCONSSOLIOL VARCHAR2(1);
 V_IDUTLPRCMPATIVO  VARCHAR2(1);

 V_COUNT          INT;
 V_IDUTLMARPREFOL PARASUPRI.IDUTLMARPREFOL%TYPE;
 V_CDMARCA_PADRAO PARASUPRI.CDMARCA%TYPE;
 V_IDUTLPRARVOLCMP PARASUPRI.IDUTLPRARVOLCMP%TYPE;
 V_IDFUNCAOFILICMPOL PARASUPRI.IDUTLPRARVOLCMP%TYPE;
 V_LISTA_PRODUTO  VARCHAR2(20);
 V_CORTE_OL       VARCHAR2(1) := 'N';
 V_ERROR          VARCHAR2(2000);

 V_IDARREDCMPAMENOS VARCHAR2(1);
 V_IDCONSDESTITEMCOL PARASUPRI.IDCONSDESTITEMCOL%TYPE;
 V_CONTACOMPRADOR INT;
 V_CDTPCTPAGAR      PRODUTO.CDTPCTPAGAR%TYPE;

BEGIN
  BEGIN
     P_ROWSAFFECT := 'N';
     V_QTACOMPRAR := 0;
     IF P_CDREGIAO IS NULL THEN
       V_TREGIAO := 'T';
     END IF;
     IF P_CDGRUPFILI IS NULL THEN
       V_TGRUPFILI := 'T';
     ELSE
       V_TGRUPFILI := 'X';
     END IF;
     IF (P_PRODINI IS NULL) AND (P_PRODFIN IS NULL) THEN
        V_PRODINI := '0';
        V_PRODFIN := 'ZZZZZZZZZZZZZZZZZZZZ';
     ELSE
        IF P_PRODINI > P_PRODFIN THEN
           V_PRODINI := P_PRODINI || 'ZZZZZZZZZZ';
           V_PRODFIN := P_PRODFIN;
        ELSE
           V_PRODFIN := P_PRODFIN || 'ZZZZZZZZZZ';
           V_PRODINI := P_PRODINI;
        END IF;
     END IF;

     IF P_CDOPERADOR = 'T' THEN
        V_CDOPERINI := '0';
        V_CDOPERFIN := '999999999999';
        V_ITEM := 'S';
     ELSE
        V_CDOPERINI := P_CDOPERADOR;
        V_CDOPERFIN := P_CDOPERADOR;
        V_ITEM := 'T';
     END IF;

     SELECT MAX(CDMARCA)
       INTO V_CDMARCA_PADRAO
       FROM MARCA;

     SELECT
        NVL(MAX(IDCONSPRSOL), 'N'),
        NVL(MAX(IDSEPAFIMP), 'N'),
        NVL(MAX(IDUTISTATCOT), 'N'),
        NVL(MAX(IDUTILCONSSOLIOL), 'N'),
        NVL(MAX(IDUTQTDISPGERAL), 'N'),
        NVL(MAX(IDUTLMARPREFOL), 'N'),
        NVL(MAX(CDMARCA), V_CDMARCA_PADRAO),
        NVL(MAX(IDUTLPRARVOLCMP), 'N'),
        NVL(MAX(IDUTLPRCMPATIVO), 'N'),
        NVL(MAX(IDARREDCMPAMENOS), 'N'),
        NVL(MAX(IDCONSDESTITEMCOL), 'N')
     INTO
        V_IDCONSPRSOL,      /* Considerar somente Produto Solicitado para Cotacao e AF Automatica  */
        V_IDSEPAFIMP,       /* Gera AF's Separadas de Acordo com o Imposto                         */
        V_IDUTISTATCOT,     /* Utiliza Status na Cotacao                                           */
        V_IDUTILCONSSOLIOL, /* Utiliza consolidacao de solicitacao de compras para o OL            */
        V_IDUTQTDISPGERAL,  /* Utiliza quantidade disponivel para a escolha dos melhores precos    */
        V_IDUTLMARPREFOL,   /* Utiliza Marca Preferencial no Lancamento de Pedidos OL              */
        V_CDMARCA_PADRAO,
        V_IDUTLPRARVOLCMP,
        V_IDUTLPRCMPATIVO,  /* Desconsidera embalagem utilizada para compra na geracao da AF do OL */
        V_IDARREDCMPAMENOS,  /* Grava quantidade a comprar com valor arredondado para menos */
        V_IDCONSDESTITEMCOL /*Considera Destinatario para Calculo de Imposto do Item de Cotacao*/
     FROM
        PARASUPRI
     WHERE
        CDFILIAL = P_CDCENTCMP;

     IF P_NRLOGCORTEOL IS NOT NULL THEN
        V_IDUTLMARPREFOL := 'S';
        /*ALTERACAO GR DIA 27/09 PARA GARANTIR COMPRA APENAS PARA PRODUTO DA SOLICITACAO DO OL*/
        V_IDUTILCONSSOLIOL := 'S';
        V_CORTE_OL         := 'S';
     END IF;

     IF NVL(P_IDQTFRAC, 'N') = 'N' THEN
        INSERT INTO
           APURPRECO
          (CDFILCENTCMP, NRAPURPREC, CDCOMPRADOR, DTINIAPUPREC,
           DTFINAPUPREC, IDSITAPUPREC, DTAPURPREC,CDOPERADOR, CDFILLANC,
           DSGRUPFILIAPUR, CDPRODINICAPUR, CDPRODFINAAPUR, IDCONSOLAPUEFET, NRLOGCORTEOL)
         VALUES
          (P_CDCENTCMP, P_NRSEQAPUR, P_CDCOMPRADOR, P_DTINI,
           P_DTFIN, '1', SYSDATE, P_CDOPERLANC, P_FILIPROC,
           P_CDGRUPFILI, P_PRODINI, P_PRODFIN, P_EXTRA, P_NRLOGCORTEOL);
     ELSE
        DELETE FROM ITMAPURPREC
         WHERE CDCENTITMAP = P_CDCENTCMP
           AND NRSEQITMAP  = P_NRSEQAPUR;
     END IF;

   /*################################ PREENCHIMENTO DA TABELA LISTA PARA GRUPFILI E REGIAO ############################*/
     NOVO_CODIGO('LISTA', V_LISTA_GRUPFILI, 1);
     V_LISTA_GRUPFILI := SUBSTR(V_LISTA_GRUPFILI, 11, 10);

     NOVO_CODIGO('LISTA', V_LISTA_FILIAL, 1);
     V_LISTA_FILIAL := SUBSTR(V_LISTA_FILIAL, 11, 20);

     NOVO_CODIGO('LISTA', V_LISTA_REGIAO, 1);
     V_LISTA_REGIAO := SUBSTR(V_LISTA_REGIAO, 11, 10);

     IF NOT (V_TGRUPFILI = 'T') THEN
        V_GRUPFILI_AUX := SUBSTR(P_CDGRUPFILI, 2, LENGTH(P_CDGRUPFILI));
        WHILE INSTR(V_GRUPFILI_AUX, '_') > 0 LOOP
           V_AUX_LISTA := SUBSTR(V_GRUPFILI_AUX, 1, INSTR(V_GRUPFILI_AUX, '_') - 1);
           V_GRUPFILI_AUX := SUBSTR(V_GRUPFILI_AUX, INSTR(V_GRUPFILI_AUX, '_') + 1, LENGTH(V_GRUPFILI_AUX));
           INSERT INTO LISTA
              (NRLISTA, CDLISTA)
           VALUES
              (V_LISTA_GRUPFILI, V_AUX_LISTA);
        END LOOP;
     END IF;

     IF NOT P_CDFILIAL = 'T' THEN
        INSERT INTO LISTA
           (NRLISTA, CDLISTA)
        VALUES
           (V_LISTA_FILIAL, P_CDFILIAL);
     ELSE
        IF NOT P_LISTAFILIAL = 'T' THEN
           V_FILIAL_AUX := SUBSTR(P_LISTAFILIAL, 2, LENGTH(P_LISTAFILIAL));
           WHILE INSTR(V_FILIAL_AUX, '_') > 0 LOOP
              V_AUX_LISTA := SUBSTR(V_FILIAL_AUX, 1, INSTR(V_FILIAL_AUX, '_') - 1);
              V_FILIAL_AUX := SUBSTR(V_FILIAL_AUX, INSTR(V_FILIAL_AUX, '_') + 1, LENGTH(V_FILIAL_AUX));
              INSERT INTO LISTA
                 (NRLISTA, CDLISTA)
              VALUES
                 (V_LISTA_FILIAL, V_AUX_LISTA);
           END LOOP;
        END IF;
     END IF;

     IF V_TREGIAO = 'T' THEN
        INSERT INTO LISTA
           (NRLISTA, CDLISTA)
        SELECT V_LISTA_REGIAO, CDREGIAO
        FROM REGIAO;
     ELSE
        V_REGIAO_AUX := SUBSTR(P_CDREGIAO, 2, LENGTH(P_CDREGIAO));
        WHILE INSTR(V_REGIAO_AUX, '_') > 0 LOOP
           V_AUX_LISTA := SUBSTR(V_REGIAO_AUX, 1, INSTR(V_REGIAO_AUX, '_') - 1);
           V_REGIAO_AUX := SUBSTR(V_REGIAO_AUX, INSTR(V_REGIAO_AUX, '_') + 1, LENGTH(V_REGIAO_AUX));
           INSERT INTO LISTA
              (NRLISTA, CDLISTA)
           VALUES
              (V_LISTA_REGIAO, V_AUX_LISTA);
        END LOOP;
     END IF;
   /*#################################################################################################################*/
     FOR C_FILGRUPFILI IN
        (SELECT
           FILGRUPFILI.CDFILIAL,
           NVL(FILIAL.IDFUNCAOFILI, 'NULL') IDFUNCAOFILI
         FROM
           FILGRUPFILI,
           FILIAL,
           LISTA
         WHERE
           LISTA.NRLISTA   = V_LISTA_GRUPFILI       AND
           LISTA.CDLISTA   = FILGRUPFILI.CDGRUPFILI AND
           FILIAL.CDFILIAL = FILGRUPFILI.CDFILIAL   AND
           (EXISTS(SELECT '1' FROM SOLICITA WHERE SOLICITA.CDFILSOLI = FILGRUPFILI.CDFILIAL)) AND
           ((P_LISTAFILIAL = 'T') OR (EXISTS(SELECT 1
                                              FROM LISTA
                                              WHERE LISTA.NRLISTA = V_LISTA_FILIAL
                                                AND LISTA.CDLISTA = FILIAL.CDFILIAL))
           )

         UNION

         SELECT
           FILIAL.CDFILIAL,
           NVL(FILIAL.IDFUNCAOFILI, 'NULL') IDFUNCAOFILI
         FROM
           FILIAL
         WHERE V_TGRUPFILI = 'T'
           AND (EXISTS(SELECT '1' FROM SOLICITA WHERE SOLICITA.CDFILSOLI = FILIAL.CDFILIAL))
           AND ((P_LISTAFILIAL = 'T') OR (EXISTS(SELECT 1
                                                  FROM LISTA
                                                  WHERE LISTA.NRLISTA = V_LISTA_FILIAL
                                                    AND LISTA.CDLISTA = FILIAL.CDFILIAL))
               )


        )
     LOOP
        INSERT INTO PRODCMPFILI_TMP
           (NRSEQAPUR,
            CDFILIAL,
            CDPRODUTO)
        SELECT P_NRSEQAPUR AS NRSEQAPUR,
               CDFILIAL,
               CDPRODUTO
        FROM
           PRODCMPFILI
        WHERE
           CDFILIAL = C_FILGRUPFILI.CDFILIAL;
        V_IDFUNCAOFILICMPOL := 'N';

        IF (C_FILGRUPFILI.IDFUNCAOFILI = 'O') AND (V_IDUTLPRARVOLCMP = 'S') THEN
           V_IDFUNCAOFILICMPOL := 'S';
        END IF;

        IF (NVL(V_IDCONSPRSOL, 'N') = 'N') AND ((C_FILGRUPFILI.IDFUNCAOFILI <> 'O') OR (V_IDUTILCONSSOLIOL = 'N')  OR (V_IDFUNCAOFILICMPOL = 'S')) THEN
           FOR C_ITEMSOLI IN
           (SELECT /*+ ORDERED */
               CASE V_IDFUNCAOFILICMPOL
                  WHEN 'N'
                  THEN PRODUTO.CDPRODESTO
                  ELSE PRODUTO.CDPRODUTO
               END CDPRODESTO,
               ITEMSOLI.CDFILSOLI,
               ITEMSOLI.DTPROGENTR,
               FILIAL.CDREGIAO,
               CASE C_FILGRUPFILI.IDFUNCAOFILI
                  WHEN 'O'
                  THEN NVL(ITEMSOLI.CDMARCA, V_CDMARCA_PADRAO)
                  ELSE NULL
               END CDMARCA,
               SUM(DECODE(ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV, NULL, 0, ITEMSOLI.QTSOLIPROD*PRODUTO.VRFATOCONV)) AS QTDEACOMP /* QUANTIDADE CONVERTIDA PARA ESTOQUE */
            FROM
               LISTA,
               FILIAL,
               ITEMSOLI,
               PRODUTO,
               SOLICITA
            WHERE
               (ITEMSOLI.CDFILSOLI = SOLICITA.CDFILSOLI)     AND
               (ITEMSOLI.CDFILLAN  = SOLICITA.CDFILLANCA)    AND
               (ITEMSOLI.NRSOLICMP = SOLICITA.NRSOLICMP)     AND
               ((P_NRLOGCORTEOL IS NULL) OR (SOLICITA.NRLOGCORTEOL = P_NRLOGCORTEOL )) AND
               (ITEMSOLI.CDFILSOLI = C_FILGRUPFILI.CDFILIAL)       AND
               (ITEMSOLI.DTPROGENTR BETWEEN CASE NVL(P_NRLOGCORTEOL, 0)
                                               WHEN 0
                                               THEN P_DTINI
                                               ELSE P_DTINI-15
                                            END AND P_DTFIN)   AND
               (ITEMSOLI.IDITMCONS  = 'N')                         AND
               (ITEMSOLI.CDFILIOPELOG IS NULL)                     AND
               (PRODUTO.CDARVPROD BETWEEN V_PRODINI AND V_PRODFIN) AND
                DECODE(FILIAL.CDFILCENTCMP, NULL, FILIAL.CDFILIAL, FILIAL.CDFILCENTCMP) = P_CDCENTCMP AND
               (FILIAL.IDCNTRRESC <> 'S') AND
                LISTA.NRLISTA = V_LISTA_REGIAO AND
                LISTA.CDLISTA = FILIAL.CDREGIAO AND
               (ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO) AND
               (ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL) AND
                DECODE(ITEMSOLI.IDSOLIAPROV, NULL, 'S', ITEMSOLI.IDSOLIAPROV) = 'S'  AND
                ((ITEMSOLI.IDITMSOLEXTRA = P_EXTRA) OR (P_EXTRA = 'X'))              AND
                EXISTS(SELECT PRODCOMP.CDOPERADOR
                      FROM PRODCOMP, PRODUTO PC
                      WHERE PRODCOMP.CDPRODUTO = PC.CDPRODUTO AND
                            PRODCOMP.CDOPERADOR BETWEEN V_CDOPERINI AND V_CDOPERFIN AND
                            PRODUTO.CDARVPROD LIKE PC.CDARVPROD || '%')
            GROUP BY
               FILIAL.CDREGIAO,
               ITEMSOLI.CDFILSOLI,
               CASE V_IDFUNCAOFILICMPOL
                  WHEN 'N'
                  THEN PRODUTO.CDPRODESTO
                  ELSE PRODUTO.CDPRODUTO
               END,
               ITEMSOLI.DTPROGENTR,
               CASE C_FILGRUPFILI.IDFUNCAOFILI
                  WHEN 'O'
                  THEN NVL(ITEMSOLI.CDMARCA, V_CDMARCA_PADRAO)
                  ELSE NULL
               END
            )LOOP
             SELECT COUNT(1)
               INTO V_CONTACOMPRADOR
               FROM PRODCOMP, PRODUTO PC, PRODUTO
              WHERE PRODCOMP.CDPRODUTO = PC.CDPRODUTO
                AND PRODCOMP.CDOPERADOR = P_CDCOMPRADOR
                AND C_ITEMSOLI.CDPRODESTO = PRODUTO.CDPRODUTO
                AND PRODUTO.CDARVPROD LIKE PC.CDARVPROD || '%';
             SELECT
                NVL(MAX(PRODFILI.IDPRODATIV), 'A')
             INTO
                V_IDPRODATIV
             FROM
                PRODFILI
             WHERE
                PRODFILI.CDFILIAL  = C_ITEMSOLI.CDFILSOLI AND
                PRODFILI.CDPRODUTO = C_ITEMSOLI.CDPRODESTO;

             IF ((V_IDPRODATIV = 'A') AND (V_CONTACOMPRADOR > 0)) THEN
                V_CTPRODCMP := 0;

                IF V_ITEM = 'S' THEN
                   SELECT COUNT(*) INTO V_CTPRODCMP
                   FROM PRODCMPFILI_TMP PRODCMPFILI,
                        PRODUTO,
                        PRODUTO PRODESTO
                   WHERE
                      PRODESTO.CDPRODUTO = C_ITEMSOLI.CDPRODESTO     AND
                      PRODCMPFILI.CDPRODUTO = PRODUTO.CDPRODUTO      AND
                      PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI    AND
                      PRODCMPFILI.NRSEQAPUR = P_NRSEQAPUR            AND
                      PRODESTO.CDARVPROD LIKE PRODUTO.CDARVPROD||'%' AND
                      PRODUTO.CDARVPROD > (SELECT DECODE(MAX(PR.CDARVPROD), NULL, '0', MAX(PR.CDARVPROD))
                                           FROM PRODNCMP, PRODUTO PR
                                           WHERE PRODNCMP.CDPRODUTO = PR.CDPRODUTO AND
                                                 PRODESTO.CDARVPROD LIKE PR.CDARVPROD||'%' AND
                                                 PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                END IF;

                IF V_ITEM = 'T' THEN
                   SELECT COUNT(*) INTO V_CTPRODCMP
                   FROM PRODCMPFILI_TMP PRODCMPFILI,
                        PRODUTO,
                        PRODUTO PRODESTO
                   WHERE
                      PRODESTO.CDPRODUTO = C_ITEMSOLI.CDPRODESTO     AND
                      PRODCMPFILI.CDPRODUTO = PRODUTO.CDPRODUTO      AND
                      PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI    AND
                      PRODCMPFILI.NRSEQAPUR = P_NRSEQAPUR            AND
                      PRODCMPFILI.CDFILIAL <> P_FILIPROC             AND
                      PRODESTO.CDARVPROD LIKE PRODUTO.CDARVPROD||'%' AND
                      PRODUTO.CDARVPROD > (SELECT DECODE(MAX(PR.CDARVPROD), NULL, '0', MAX(PR.CDARVPROD))
                                           FROM PRODNCMP, PRODUTO PR
                                           WHERE PRODNCMP.CDPRODUTO = PR.CDPRODUTO AND
                                                 PRODESTO.CDARVPROD LIKE PR.CDARVPROD||'%' AND
                                                 PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                   IF V_CTPRODCMP = 0 THEN
                      V_CTPRODCMP := 1;
                   ELSE
                      V_CTPRODCMP := 0;
                   END IF;
                END IF;

                V_CDARVPROD := '';

                IF V_CTPRODCMP > 0 THEN
                   SELECT MAX(CDARVPROD) INTO V_CDARVPROD
                     FROM PRODUTO
                    WHERE CDPRODUTO = C_ITEMSOLI.CDPRODESTO;

                   SELECT COUNT(*) INTO V_CTPRODCMP
                     FROM PRODNCMP, PRODUTO
                    WHERE PRODNCMP.CDPRODUTO = PRODUTO.CDPRODUTO
                      AND PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI
                      AND V_CDARVPROD LIKE PRODUTO.CDARVPROD||'%'
                      AND PRODUTO.CDARVPROD > (SELECT NVL(MAX(PR.CDARVPROD), '0')
                                                 FROM PRODCMPFILI, PRODUTO PR
                                                WHERE PRODCMPFILI.CDPRODUTO = PR.CDPRODUTO
                                                  AND V_CDARVPROD LIKE PR.CDARVPROD||'%'
                                                  AND PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                   IF V_CTPRODCMP > 0 THEN
                      V_CTPRODCMP := 0;
                   ELSE
                      V_CTPRODCMP := 1;
                   END IF;
                END IF;

                /* Grava quantidade a comprar com valor arredondado para menos */
                IF (V_IDARREDCMPAMENOS = 'S') AND (P_IDQTFRAC = 'S') THEN
                   V_IDARREDCMPAMENOS := 'S';
                ELSE
                   V_IDARREDCMPAMENOS := 'N';
                END IF;

                IF V_CTPRODCMP > 0 THEN
                  V_QTACOMPRAR := C_ITEMSOLI.QTDEACOMP;
                     BEGIN
                 --      DBMS_OUTPUT.PUT_LINE('AF');
                       IF (V_IDFUNCAOFILICMPOL = 'N' AND C_FILGRUPFILI.IDFUNCAOFILI <> 'O') THEN
                          SELECT
                            SUM((CASE V_IDARREDCMPAMENOS
                                    WHEN 'N'
                                    THEN ITEMAUTF.QTPROGENTAF
                                    ELSE CASE FLOOR(ITEMAUTF.QTPROGENTAF)
                                            WHEN 0
                                            THEN 1
                                            ELSE FLOOR(ITEMAUTF.QTPROGENTAF)
                                         END
                                 END) * PRODUTO.VRFATOCONV) INTO V_QTDECOMP /* QTDE CONVERTIDA PARA ESTOQUE */
                          FROM
                            AUTOFORNE, ITEMAUTF, PRODUTO
                          WHERE
                            (PRODUTO.CDPRODESTO  = C_ITEMSOLI.CDPRODESTO)           AND
                            (AUTOFORNE.CDFILDEST = ITEMAUTF.CDFILDEST)              AND
                            (AUTOFORNE.CDFILLANC = ITEMAUTF.CDFILLANC)              AND
                            (AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN)            AND
                            ((AUTOFORNE.IDAUTOFORNEX = P_EXTRA) OR ((P_EXTRA = 'X') AND (AUTOFORNE.IDAUTOFORNEX = 'N'))) AND
                             DECODE(AUTOFORNE.IDBAIXAAF, NULL, '0', AUTOFORNE.IDBAIXAAF) <> '5' AND
                            (ITEMAUTF.CDFILDEST   =  C_ITEMSOLI.CDFILSOLI)          AND
                            (ITEMAUTF.CDPRODUTO   =  PRODUTO.CDPRODUTO)             AND
                            (ITEMAUTF.DTENTRITMSOL =  C_ITEMSOLI.DTPROGENTR)
                          GROUP BY
                            ITEMAUTF.CDFILDEST,
                            ITEMAUTF.DTENTRITMSOL,
                            PRODUTO.CDPRODESTO;
                         ELSE
                            SELECT
                              SUM((CASE V_IDARREDCMPAMENOS
                                      WHEN 'N'
                                      THEN ITEMAUTF.QTPROGENTAF
                                      ELSE CASE FLOOR(ITEMAUTF.QTPROGENTAF)
                                              WHEN 0
                                              THEN 1
                                              ELSE FLOOR(ITEMAUTF.QTPROGENTAF)
                                           END
                                   END) * CASE PRODUTO.CDPRODUTO
                                             WHEN RELACPRODOLEST.CDPRARVORIG
                                             THEN CASE V_IDFUNCAOFILICMPOL /* ALTERACAO SOLICITACA 173521 DIA 29/05/2016*/
                                                     WHEN 'S'
                                                     THEN PRODUTO.VRFATOCONV
                                                     ELSE 1
                                                  END
                                             ELSE PRODUTO.VRFATOCONV
                                          END) INTO V_QTDECOMP /* QTDE CONVERTIDA PARA ESTOQUE */
                            FROM
                              AUTOFORNE, ITEMAUTF, RELACPRODOL, PRODUTO PRODUTOOL, RELACPRODOL RELACPRODOLEST, PRODUTO PRODUTORIG, PRODUTO

                            WHERE
                              (AUTOFORNE.CDFILDEST     = ITEMAUTF.CDFILDEST)                        AND
                              (AUTOFORNE.CDFILLANC     = ITEMAUTF.CDFILLANC)                        AND
                              (AUTOFORNE.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN)                       AND
                              DECODE(AUTOFORNE.IDBAIXAAF, NULL, '0', AUTOFORNE.IDBAIXAAF) <> '5'    AND
                              ((AUTOFORNE.IDAUTOFORNEX = P_EXTRA) OR ((P_EXTRA = 'X') AND (AUTOFORNE.IDAUTOFORNEX = 'N'))) AND
                              (ITEMAUTF.CDFILDEST      =  C_ITEMSOLI.CDFILSOLI)                     AND
                              (RELACPRODOLEST.CDPRARVORIG  =  C_ITEMSOLI.CDPRODESTO)                AND
                              (ITEMAUTF.CDPRODUTO      =  RELACPRODOL.CDPRODARVOL)                  AND
                              ITEMAUTF.CDMARCA         =  RELACPRODOL.CDMARCA                       AND
                              ((V_IDUTLMARPREFOL = 'N') OR (ITEMAUTF.CDMARCA = NVL(C_ITEMSOLI.CDMARCA, ITEMAUTF.CDMARCA))) AND
                              (ITEMAUTF.DTENTRITMSOL   =  C_ITEMSOLI.DTPROGENTR)                    AND
                               RELACPRODOL.CDPRARVORIG    = PRODUTO.CDPRODUTO                       AND
                               RELACPRODOL.CDPRODARVOL    = PRODUTOOL.CDPRODUTO                     AND
                               RELACPRODOLEST.CDPRODARVOL = PRODUTOOL.CDPRODESTO                    AND
                               RELACPRODOLEST.CDPRARVORIG = PRODUTORIG.CDPRODUTO                    AND
                               ITEMAUTF.CDMARCA           = CASE V_IDFUNCAOFILICMPOL
                                                               WHEN 'N'
                                                               THEN ITEMAUTF.CDMARCA
                                                               ELSE NVL(C_ITEMSOLI.CDMARCA, ITEMAUTF.CDMARCA)
                                                            END
                            GROUP BY
                              ITEMAUTF.CDFILDEST,
                              ITEMAUTF.DTENTRITMSOL,
                              CASE V_IDFUNCAOFILICMPOL
                               WHEN 'S'
                               THEN PRODUTO.CDPRODESTO
                               ELSE ITEMAUTF.CDPRODUTO
                              END;
                         END IF;
                     EXCEPTION
                       WHEN OTHERS THEN
                         V_QTDECOMP := 0;
                     END;
                     V_QTACOMPRAR := V_QTACOMPRAR - V_QTDECOMP;

                  IF TRUNC(V_QTACOMPRAR,3) > 0 THEN
              --     DBMS_OUTPUT.PUT_LINE('COLETA');
                     NOVO_CODIGO('LISTA', V_LISTA_PRODUTO, 1);
                     V_LISTA_PRODUTO := SUBSTR(V_LISTA_PRODUTO, 11, 10);
                     IF V_IDFUNCAOFILICMPOL = 'N' THEN
                        INSERT
                          INTO LISTA
                               (NRLISTA, CDLISTA)
                        SELECT V_LISTA_PRODUTO, CDPRODUTO
                          FROM PRODUTO
                         WHERE CDPRODESTO = C_ITEMSOLI.CDPRODESTO;
                     ELSE
                        INSERT
                          INTO LISTA
                               (NRLISTA, CDLISTA)
                        SELECT DISTINCT V_LISTA_PRODUTO, RELACPRODOLEST.CDPRARVORIG
                          FROM PRODUTO PRODUTOOL, RELACPRODOL RELACPRODOLEST, RELACPRODOL
                         WHERE PRODUTOOL.CDPRODESTO    = RELACPRODOL.CDPRODARVOL
                           AND PRODUTOOL.CDPRODUTO     = RELACPRODOLEST.CDPRODARVOL
                           AND RELACPRODOL.CDPRARVORIG = C_ITEMSOLI.CDPRODESTO;
                     END IF;
                     FOR C_GRAVA IN (
                     SELECT
                        ITEMCOLE.CDFILIAL,
                        ITEMCOLE.CDPRODUTO,
                        PRODUTO.VRFATOCONV,
                        ITEMCOLE.NRCOLEPRECO,
                        ITEMCOLE.CDFORNECED,
                        ITEMCOLE.CDREGIAO,
                        ITEMCOLE.CDMARCA,
                        ITEMCOLE.CDTIPCOB,
                        ITEMCOLE.CDFORMPGTO,
                        ITEMCOLE.IDUTDIAPGCOL,
                        ITEMCOLE.IDTPFOPGTCOL,
                        ITEMCOLE.IDTIPFREITM,
                        ITEMCOLE.NRPARCPGTCOL,
                        ITEMCOLE.CDSEGMARCCOL,
                        ITEMCOLE.VRPRECUNIITM,
                        ITEMCOLE.VRPERDESITM,
                        ITEMCOLE.NRDIAPGFXCOL,
                        ITEMCOLE.VRPRECECOITM,
                        ITEMCOLE.VRPRECOITMPI,
                        ITEMCOLE.IDITMLISPREC,
                        ITEMCOLE.NRSEQPRELIST,
                        ITEMCOLE.QTACMPITMCOL,
                        ITEMCOLE.VRINDICEITMCOL,
                        COLETAPR.CDTPINDICECOL,
                        COLETAPR.IDPERVALORCOL,
                        COLETAPR.CDINDICECOL,
                        COLETAPR.DTREFINDCOL
                     FROM COLETAPR
                    INNER JOIN ITEMCOLE
                            ON COLETAPR.CDFILIAL     = ITEMCOLE.CDFILIAL
                           AND COLETAPR.NRCOLEPRECO  = ITEMCOLE.NRCOLEPRECO
                    INNER JOIN PRODUTO
                            ON ITEMCOLE.CDPRODUTO    = PRODUTO.CDPRODUTO
                    INNER JOIN LISTA
                            ON LISTA.CDLISTA         = PRODUTO.CDPRODUTO
                     LEFT JOIN PRMARCPEDCOL
                            ON PRMARCPEDCOL.CDFILIAL    = ITEMCOLE.CDFILIAL
                           AND PRMARCPEDCOL.NRPEDIDOCOL = ITEMCOLE.NRPEDIDOCOL
                           AND PRMARCPEDCOL.CDPRODUTO   = ITEMCOLE.CDPRODUTO
                           AND PRMARCPEDCOL.CDMARCA     = ITEMCOLE.CDMARCA
                    INNER JOIN FORNECEDOR
                            ON FORNECEDOR.CDFORNECED    = ITEMCOLE.CDFORNECED
                      WHERE
                        COLETAPR.CDFILIAL           = P_CDCENTCMP                AND
                        COLETAPR.CDOPERADOR BETWEEN V_CDOPERINI AND V_CDOPERFIN  AND  --OR P_CDOPERADOR = 'T' AND
                        ((V_IDUTQTDISPGERAL = 'N')                               OR
                         (NVL(FORNECEDOR.IDUTQTDISPFORN, 'N') = 'N')             OR
                         (NVL(PRMARCPEDCOL.QTDISPPRODMARC, 1) > 0  )
                        )                                                        AND
                        ((ITEMCOLE.IDITMLISPREC     = V_ITEM AND DECODE(ITEMCOLE.IDPRECALT, NULL, 'S', ITEMCOLE.IDPRECALT) = 'S') OR V_ITEM = 'T') AND
                        ITEMCOLE.VRPRECUNIITM      <> 0                     AND
                        ITEMCOLE.CDREGIAO           = C_ITEMSOLI.CDREGIAO   AND
                        ((C_ITEMSOLI.CDMARCA IS NULL) OR (ITEMCOLE.CDMARCA  = C_ITEMSOLI.CDMARCA)) AND
                        (C_ITEMSOLI.DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM) AND
                        FORNECEDOR.IDSITUCADA       = 'A'                   AND
                        FORNECEDOR.IDTIPOFORN      <> 'A'                   AND
                        COLETAPR.NRCOMPRA IS NULL                           AND
                        ((V_IDUTISTATCOT = 'N') OR (NVL(COLETAPR.IDSITUCOLETA, 'C') = 'C')) AND

                        NOT EXISTS
                         (SELECT
                            REFOREG.CDREGIAO
                          FROM
                            REFOREG
                          WHERE
                            REFOREG.CDREGIAO   = C_ITEMSOLI.CDREGIAO  AND
                            REFOREG.CDFORNECED = ITEMCOLE.CDFORNECED) AND

                        NOT EXISTS
                        (SELECT
                            QFOPRODFORN.CDPRODUTO
                         FROM
                            QFOPRODFORN,
                            PARASUPRI
                         WHERE
                           PARASUPRI.CDFILIAL = P_CDCENTCMP  AND
                           (QFOPRODFORN.CDPRODUTO = PRODUTO.CDPRODUTO) AND
                           (QFOPRODFORN.CDFORNECED = ITEMCOLE.CDFORNECED) AND
                           ((QFOPRODFORN.IDFORNAPROV = 'N' AND QFOPRODFORN.IDFORNAUTOR = 'N') OR
                            ((QFOPRODFORN.IDFORNAPROV = 'S') AND
                               ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                 COLETAPR.DTCOLEPREC > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR
                                (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                 COLETAPR.DTCOLEPREC > QFOPRODFORN.DTVALPRFORN)) ) )) AND

                        NOT EXISTS
                          (SELECT
                             QFOMARPROD.CDMARCA
                           FROM
                             QFOMARPROD, PARASUPRI
                           WHERE
                            (PARASUPRI.CDFILIAL = P_CDCENTCMP)            AND
                            (QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO) AND
                            (QFOMARPROD.CDMARCA   = ITEMCOLE.CDMARCA)     AND
                            ((QFOMARPROD.IDAPRMARPRO = 'N' AND QFOMARPROD.IDAUTMARPRO = 'N') OR
                             ((QFOMARPROD.IDAPRMARPRO = 'S') AND
                                ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                  COLETAPR.DTCOLEPREC > LAST_DAY(QFOMARPROD.DTVALAPROVA)) OR
                                 (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                  COLETAPR.DTCOLEPREC > QFOMARPROD.DTVALAPROVA)) ) )) AND

                        EXISTS
                          (SELECT
                             QFOMARPROD.CDMARCA
                           FROM
                             QFOMARPROD
                           WHERE
                             QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO AND
                             QFOMARPROD.CDMARCA   = ITEMCOLE.CDMARCA

                           UNION

                           SELECT
                             PARASUPRI.CDMARCA
                           FROM
                             PARASUPRI
                           WHERE
                             PARASUPRI.CDFILIAL     = P_CDCENTCMP AND
                             (PARASUPRI.IDMARSEMQUA = 'N' OR PARASUPRI.IDMARSEMQUA IS NULL)) AND

                        NOT EXISTS
                          (SELECT QUALIFICACAO.CDQUALIF
                           FROM QUALIFICACAO, PARASUPRI
                           WHERE (FORNECEDOR.CDQUALIF       = QUALIFICACAO.CDQUALIF) AND
                                 (PARASUPRI.CDFILIAL        = P_CDCENTCMP)           AND
                                 (FORNECEDOR.IDFORNAUTO     = 'N')                   AND
                                 ((QUALIFICACAO.IDPERCOTCMP = '2')                   OR
                                  ((PARASUPRI.IDULTIDTVALQ  = 'D'                    AND
                                    COLETAPR.DTCOLEPREC > FORNECEDOR.DTVALQUALIF)    OR
                                  (PARASUPRI.IDULTIDTVALQ = 'M'                      AND
                                   COLETAPR.DTCOLEPREC > LAST_DAY(FORNECEDOR.DTVALQUALIF))))) AND

                        NOT EXISTS /* Tirando fornecedores que nao atendam as filiais */
                         (SELECT
                            REFORFIL.CDFILIAL
                          FROM
                            REFORFIL
                          WHERE
                            REFORFIL.CDFILIAL   = C_ITEMSOLI.CDFILSOLI  AND
                            REFORFIL.CDPERIENTR IS NULL                 AND
                            REFORFIL.CDFORNECED = ITEMCOLE.CDFORNECED ) AND
                            NRLISTA = V_LISTA_PRODUTO                   AND
                            ITEMCOLE.CDMARCA    = CASE V_IDFUNCAOFILICMPOL
                                                     WHEN 'N'
                                                     THEN ITEMCOLE.CDMARCA
                                                     ELSE NVL(C_ITEMSOLI.CDMARCA, ITEMCOLE.CDMARCA)
                                                  END)

                       LOOP
                         V_CTIMPOSTO := NULL;
                         V_CONCKEY   := NULL;

                         IF V_IDSEPAFIMP = 'S' THEN
                            SELECT
                               COUNT(*)
                            INTO
                               V_CTIMPOSTO
                            FROM
                               IMPCOLET
                            WHERE
                               CDFILIAL    = C_GRAVA.CDFILIAL    AND
                               NRCOLEPRECO = C_GRAVA.NRCOLEPRECO AND
                               CDMARCA     = C_GRAVA.CDMARCA     AND
                               CDREGIAO    = C_GRAVA.CDREGIAO    AND
                               CDFORNECED  = C_GRAVA.CDFORNECED  AND
                               CDPRODUTO   = C_GRAVA.CDPRODUTO;
                            IF V_CTIMPOSTO = 0 THEN
                               V_CONCKEY := '';
                            ELSE
                               IF V_CTIMPOSTO = 1 THEN
                                  SELECT DISTINCT
                                     CDIMPOSTO
                                  INTO
                                     V_CONCKEY
                                  FROM
                                     IMPCOLET
                                  WHERE
                                     CDFILIAL    = C_GRAVA.CDFILIAL    AND
                                     NRCOLEPRECO = C_GRAVA.NRCOLEPRECO AND
                                     CDMARCA     = C_GRAVA.CDMARCA     AND
                                     CDREGIAO    = C_GRAVA.CDREGIAO    AND
                                     CDFORNECED  = C_GRAVA.CDFORNECED  AND
                                     CDPRODUTO   = C_GRAVA.CDPRODUTO;
                               ELSE
                                  IF V_CTIMPOSTO > 1 THEN
                                     V_CONCKEY := '*';
                                  END IF;
                               END IF;
                            END IF;
                         END IF;
                         V_EMITENTE  := EMITENTE(C_ITEMSOLI.CDFILSOLI, C_GRAVA.CDPRODUTO, C_GRAVA.CDFORNECED);
                         V_CDEMPRESA := SUBSTR(V_EMITENTE, 3, 2);
                         IF V_IDSEPAFIMP = 'S' THEN
                            /*Alteracao atraves da solicitacao 190776 para resolver problema causado pela solicitacao 182945*/
                            SELECT NVL(MAX(PROD.CDTPCTPAGAR), '1')
                              INTO V_CDTPCTPAGAR
                              FROM PRODUTO P, PRODUTO PROD
                             WHERE P.CDPRODUTO  = C_GRAVA.CDPRODUTO
                               AND P.CDARVPROD LIKE PROD.CDARVPROD||'%'
                               AND PROD.CDTPCTPAGAR IS NOT NULL;
                         END IF;
                         V_CONCKEY   := V_CONCKEY||C_GRAVA.CDFILIAL|| C_GRAVA.CDFORNECED ||SUBSTR(V_EMITENTE, 3, 2)||
                                        C_GRAVA.IDTPFOPGTCOL ||
                                        C_GRAVA.CDTIPCOB     || C_GRAVA.IDTIPFREITM  ||
                                        C_GRAVA.CDFORMPGTO   || C_GRAVA.NRPARCPGTCOL ||
                                        C_GRAVA.NRDIAPGFXCOL || C_GRAVA.IDUTDIAPGCOL ||SUBSTR(V_EMITENTE, 1, 1)||V_CDTPCTPAGAR;
                         V_IDTIPEMIT := SUBSTR(V_EMITENTE, 1, 1);
                         V_DSPZOPGTCONC := CONCAT_PZO_PAGTO (C_GRAVA.CDFILIAL,   C_GRAVA.NRCOLEPRECO,
                                                             C_GRAVA.CDFORNECED, C_GRAVA.CDPRODUTO,
                                                             C_GRAVA.CDMARCA,    C_GRAVA.CDREGIAO);
                         SELECT
                            DECODE(MAX(VRARREDCMP), NULL, 0, MAX(VRARREDCMP)) INTO V_VRARREDCMP
                         FROM
                            PRODUTO
                         WHERE
                            CDPRODUTO = C_GRAVA.CDPRODUTO;

                         V_QTACOMPRAR_AUX := V_QTACOMPRAR / C_GRAVA.VRFATOCONV; /* CONVERTE PARA UNIDADE DE COMPRA */
                         IF (MOD(V_QTACOMPRAR_AUX, V_VRARREDCMP) <> 0) AND V_VRARREDCMP > 0 THEN
                            V_QTACOMPRAR_AUX := CEIL(V_QTACOMPRAR_AUX / V_VRARREDCMP) * V_VRARREDCMP;
                         END IF;

                         V_IDAFOPERLOG  := 'X';
                         V_CDFILIOPELOG := NULL;
                         V_CDFORNOPELOG := NULL;

                         IF V_IDUTILCONSSOLIOL = 'N' THEN
                            SELECT
                              DECODE(MAX('2'), NULL, 'X', MAX('2')) INTO V_IDAFOPERLOG
                            FROM
                              PARAMPRODSUP
                            WHERE
                               CDFILIAL     = C_ITEMSOLI.CDFILSOLI AND
                               CDPRODUTO    = C_GRAVA.CDPRODUTO    AND
                               CDFILIOPELOG IS NOT NULL;
                            SELECT
                               MAX(P.CDFILIOPELOG), MAX(F.CDFORNOPELOG) INTO V_CDFILIOPELOG , V_CDFORNOPELOG
                            FROM
                              PARAMPRODSUP P, FILIAL F
                            WHERE
                               P.CDFILIAL     = C_ITEMSOLI.CDFILSOLI AND
                               P.CDPRODUTO    = C_GRAVA.CDPRODUTO    AND
                               P.CDFILIOPELOG = F.CDFILIAL;
                            IF V_CDFORNOPELOG <> C_GRAVA.CDFORNECED THEN
                               V_IDAFOPERLOG  := 'X';
                               V_CDFILIOPELOG := NULL;
                            END IF;
                         END IF;

                         V_IDPRODWEB := 'N';
                         SELECT
                           DECODE(MAX(PARAMPRODSUP.IDPRODWEB), NULL, 'N', MAX(PARAMPRODSUP.IDPRODWEB)) INTO V_IDPRODWEB
                         FROM
                           PARAMPRODSUP
                         WHERE
                            CDFILIAL   = C_ITEMSOLI.CDFILSOLI AND
                            CDPRODUTO  = C_GRAVA.CDPRODUTO    AND
                            CDFORNECED = C_GRAVA.CDFORNECED;

                         IF V_CDFILIOPELOG IS NULL THEN
                            V_CDFILIOPELOG := 'OL_NULL';
                         END IF;
                         IF C_FILGRUPFILI.IDFUNCAOFILI = 'O' THEN
                            BEGIN
                               INSERT INTO ITMAPURPREC
                               (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
                                DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                                CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
                                QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                                CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
                                CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                                IDTIPOFRETAP, NRPARCPGTOAP, CDSEGMARCCOL,
                                VRPRECUNIAP,  VRPERDESIAP,  NRDIAPGFIAP,
                                DSPZOPGTCOAP, VRPRECECOAP,  VRPRECONPIAP,
                                IDITMLISPRAP, NRLISTAITMAP, QTDISPPRODMARC,
                                CDTPINDICEAPU, IDPERVALORAPU, CDINDICEAPU, DTREFINDAPU, VRINDICEAPU)
                               VALUES(P_CDCENTCMP,
                                      P_NRSEQAPUR,
                                      C_ITEMSOLI.CDFILSOLI,
                                      C_ITEMSOLI.DTPROGENTR,
                                      C_GRAVA.CDPRODUTO,
                                      C_GRAVA.NRCOLEPRECO,
                                      C_GRAVA.CDFORNECED,
                                      C_GRAVA.CDREGIAO,
                                      C_GRAVA.CDMARCA,
                                      V_QTACOMPRAR_AUX,
                                      V_QTACOMPRAR_AUX,
                                      C_GRAVA.CDTIPCOB,
                                      V_CDEMPRESA,
                                      C_GRAVA.CDFORMPGTO,
                                      C_GRAVA.IDUTDIAPGCOL,
                                      V_CONCKEY||V_CDFILIOPELOG||V_IDPRODWEB||V_IDAFOPERLOG,
                                      C_GRAVA.IDTPFOPGTCOL,
                                      V_IDTIPEMIT,
                                      C_GRAVA.IDTIPFREITM,
                                      C_GRAVA.NRPARCPGTCOL,
                                      C_GRAVA.CDSEGMARCCOL,
                                      C_GRAVA.VRPRECUNIITM,
                                      C_GRAVA.VRPERDESITM,
                                      C_GRAVA.NRDIAPGFXCOL,
                                      V_DSPZOPGTCONC,
                                      C_GRAVA.VRPRECECOITM,
                                      C_GRAVA.VRPRECOITMPI,
                                      C_GRAVA.IDITMLISPREC,
                                      C_GRAVA.NRSEQPRELIST,
                                      C_GRAVA.QTACMPITMCOL,
                                      C_GRAVA.CDTPINDICECOL, C_GRAVA.IDPERVALORCOL, C_GRAVA.CDINDICECOL, C_GRAVA.DTREFINDCOL, C_GRAVA.VRINDICEITMCOL);
                            EXCEPTION
                               WHEN OTHERS THEN BEGIN
                                  UPDATE ITMAPURPREC
                                    SET QTSOLACOMP = QTSOLACOMP+V_QTACOMPRAR_AUX,   QTACOMP = QTACOMP+V_QTACOMPRAR_AUX
                                   WHERE CDCENTITMAP = P_CDCENTCMP
                                     AND NRSEQITMAP = P_NRSEQAPUR
                                     AND CDFILIAP = C_ITEMSOLI.CDFILSOLI
                                     AND DTENTRAPUT = C_ITEMSOLI.DTPROGENTR
                                     AND CDPRODITMAP = C_GRAVA.CDPRODUTO
                                     AND NRCOLEITMAP = C_GRAVA.NRCOLEPRECO
                                     AND CDFORNITMAP = C_GRAVA.CDFORNECED
                                     AND CDREGITMAP = C_GRAVA.CDREGIAO
                                     AND CDMARCITMAP  =  C_GRAVA.CDMARCA;

                               END;
                            END;
                         ELSE
                            INSERT INTO ITMAPURPREC
                            (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
                             DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                             CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
                             QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                             CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
                             CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                             IDTIPOFRETAP, NRPARCPGTOAP, CDSEGMARCCOL,
                             VRPRECUNIAP,  VRPERDESIAP,  NRDIAPGFIAP,
                             DSPZOPGTCOAP, VRPRECECOAP,  VRPRECONPIAP,
                             IDITMLISPRAP, NRLISTAITMAP, QTDISPPRODMARC,
                             CDTPINDICEAPU, IDPERVALORAPU, CDINDICEAPU, DTREFINDAPU, VRINDICEAPU)
                            VALUES(P_CDCENTCMP,
                                   P_NRSEQAPUR,
                                   C_ITEMSOLI.CDFILSOLI,
                                   C_ITEMSOLI.DTPROGENTR,
                                   C_GRAVA.CDPRODUTO,
                                   C_GRAVA.NRCOLEPRECO,
                                   C_GRAVA.CDFORNECED,
                                   C_GRAVA.CDREGIAO,
                                   C_GRAVA.CDMARCA,
                                   V_QTACOMPRAR_AUX,
                                   V_QTACOMPRAR_AUX,
                                   C_GRAVA.CDTIPCOB,
                                   V_CDEMPRESA,
                                   C_GRAVA.CDFORMPGTO,
                                   C_GRAVA.IDUTDIAPGCOL,
                                   V_CONCKEY||V_CDFILIOPELOG||V_IDPRODWEB||V_IDAFOPERLOG,
                                   C_GRAVA.IDTPFOPGTCOL,
                                   V_IDTIPEMIT,
                                   C_GRAVA.IDTIPFREITM,
                                   C_GRAVA.NRPARCPGTCOL,
                                   C_GRAVA.CDSEGMARCCOL,
                                   C_GRAVA.VRPRECUNIITM,
                                   C_GRAVA.VRPERDESITM,
                                   C_GRAVA.NRDIAPGFXCOL,
                                   V_DSPZOPGTCONC,
                                   C_GRAVA.VRPRECECOITM,
                                   C_GRAVA.VRPRECOITMPI,
                                   C_GRAVA.IDITMLISPREC,
                                   C_GRAVA.NRSEQPRELIST,
                                   C_GRAVA.QTACMPITMCOL,
                                   C_GRAVA.CDTPINDICECOL, C_GRAVA.IDPERVALORCOL, C_GRAVA.CDINDICECOL, C_GRAVA.DTREFINDCOL, C_GRAVA.VRINDICEITMCOL);
                         END IF;
                         IF SQL%ROWCOUNT > 0 THEN
                            P_ROWSAFFECT := 'S';
                         END IF;
                       END LOOP;
                       DELETE
                         FROM LISTA
                        WHERE NRLISTA = V_LISTA_PRODUTO;
                  END IF;
                  COMMIT;
                  V_QTACOMPRAR := 0;
                END IF;
             END IF;
           END LOOP;
        ELSE
           IF C_FILGRUPFILI.IDFUNCAOFILI <> 'O' THEN
              V_IDUTLPRCMPATIVO := 'N';
           END IF;
           FOR C_ITEMSOLI IN
             (SELECT /*+ ORDERED */
                 CASE V_IDUTLPRCMPATIVO
                    WHEN 'S'
                    THEN PRODUTO.CDPRODESTO
                    ELSE PRODUTO.CDPRODUTO
                 END CDPRODUTO,
                 ITEMSOLI.CDFILSOLI,
                 ITEMSOLI.DTPROGENTR,
                 FILIAL.CDREGIAO,
                 CASE V_IDUTLMARPREFOL
                    WHEN 'S'
                    THEN NVL(ITEMSOLI.CDMARCA, CASE V_CORTE_OL
                                                  WHEN 'S'
                                                  THEN ''
                                                  ELSE V_CDMARCA_PADRAO
                                               END)
                    ELSE NULL
                 END CDMARCA,
                 SUM(ITEMSOLI.QTSOLIPROD*(CASE V_IDUTLPRCMPATIVO
                                             WHEN 'S'
                                             THEN PRODUTO.VRFATOCONV
                                             ELSE 1
                                          END)) AS QTDEACOMP /* QUANTIDADE CONVERTIDA PARA ESTOQUE */
              FROM
                 LISTA,
                 FILIAL,
                 ITEMSOLI,
                 PRODUTO,
                 SOLICITA
              WHERE
                (ITEMSOLI.CDFILSOLI = SOLICITA.CDFILSOLI)     AND
                (ITEMSOLI.CDFILLAN  = SOLICITA.CDFILLANCA)    AND
                (ITEMSOLI.NRSOLICMP = SOLICITA.NRSOLICMP)     AND
                ((P_NRLOGCORTEOL IS NULL) OR (SOLICITA.NRLOGCORTEOL = P_NRLOGCORTEOL )) AND
                (ITEMSOLI.CDFILSOLI = C_FILGRUPFILI.CDFILIAL) AND
                (ITEMSOLI.DTPROGENTR BETWEEN CASE NVL(P_NRLOGCORTEOL, 0)
                                               WHEN 0
                                               THEN P_DTINI
                                               ELSE P_DTINI-15
                                             END AND P_DTFIN)   AND
                (ITEMSOLI.CDFILIOPELOG IS NULL)                     AND
                (ITEMSOLI.IDITMCONS  = 'N')                         AND
                (PRODUTO.CDARVPROD BETWEEN V_PRODINI AND V_PRODFIN) AND
                 DECODE(FILIAL.CDFILCENTCMP, NULL, FILIAL.CDFILIAL, FILIAL.CDFILCENTCMP) = P_CDCENTCMP AND
                (FILIAL.IDCNTRRESC <> 'S') AND
                LISTA.NRLISTA = V_LISTA_REGIAO AND
                LISTA.CDLISTA = FILIAL.CDREGIAO AND
                (ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO) AND
                (ITEMSOLI.CDFILSOLI = FILIAL.CDFILIAL) AND
                 DECODE(ITEMSOLI.IDSOLIAPROV, NULL, 'S', ITEMSOLI.IDSOLIAPROV) = 'S' AND
                ((ITEMSOLI.IDITMSOLEXTRA = P_EXTRA) OR (P_EXTRA = 'X'))              AND
                 EXISTS(SELECT PRODCOMP.CDOPERADOR
                       FROM PRODCOMP, PRODUTO PC
                       WHERE PRODCOMP.CDPRODUTO = PC.CDPRODUTO AND
                             PRODCOMP.CDOPERADOR BETWEEN V_CDOPERINI AND V_CDOPERFIN AND
                             PRODUTO.CDARVPROD LIKE PC.CDARVPROD || '%')
              GROUP BY
                 CASE V_IDUTLPRCMPATIVO
                    WHEN 'S'
                    THEN PRODUTO.CDPRODESTO
                    ELSE PRODUTO.CDPRODUTO
                 END,
                 ITEMSOLI.CDFILSOLI,
                 ITEMSOLI.DTPROGENTR,
                 FILIAL.CDREGIAO,
                 CASE V_IDUTLMARPREFOL
                    WHEN 'S'
                    THEN NVL(ITEMSOLI.CDMARCA, CASE V_CORTE_OL
                                                  WHEN 'S'
                                                  THEN ''
                                                  ELSE V_CDMARCA_PADRAO
                                               END)
                    ELSE NULL
                 END
              )LOOP
             SELECT COUNT(1)
               INTO V_CONTACOMPRADOR
               FROM PRODCOMP, PRODUTO PC, PRODUTO
              WHERE PRODCOMP.CDPRODUTO = PC.CDPRODUTO
                AND PRODCOMP.CDOPERADOR = P_CDCOMPRADOR
                AND C_ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
                AND PRODUTO.CDARVPROD LIKE PC.CDARVPROD || '%';
             SELECT
                NVL(MAX(PRODFILI.IDPRODATIV), 'A')
             INTO
                V_IDPRODATIV
             FROM
                PRODFILI
             WHERE
                PRODFILI.CDFILIAL  = C_ITEMSOLI.CDFILSOLI AND
                PRODFILI.CDPRODUTO = C_ITEMSOLI.CDPRODUTO;

             IF ((V_IDPRODATIV = 'A') AND (V_CONTACOMPRADOR > 0)) THEN
                V_CTPRODCMP := 0;

                IF V_ITEM = 'S' THEN
                   SELECT COUNT(*) INTO V_CTPRODCMP
                   FROM PRODCMPFILI_TMP PRODCMPFILI,
                        PRODUTO,
                        PRODUTO P
                   WHERE
                      P.CDPRODUTO = C_ITEMSOLI.CDPRODUTO AND
                      PRODCMPFILI.CDPRODUTO = PRODUTO.CDPRODUTO AND
                      PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI AND
                      PRODCMPFILI.NRSEQAPUR = P_NRSEQAPUR         AND
                      P.CDARVPROD LIKE PRODUTO.CDARVPROD||'%' AND
                      PRODUTO.CDARVPROD > (SELECT DECODE(MAX(PR.CDARVPROD), NULL, '0', MAX(PR.CDARVPROD))
                                           FROM PRODNCMP, PRODUTO PR
                                           WHERE PRODNCMP.CDPRODUTO = PR.CDPRODUTO AND
                                                 P.CDARVPROD LIKE PR.CDARVPROD||'%' AND
                                                 PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                END IF;

                IF V_ITEM = 'T' THEN
                   SELECT COUNT(*) INTO V_CTPRODCMP
                   FROM PRODCMPFILI_TMP PRODCMPFILI,
                        PRODUTO,
                        PRODUTO P
                   WHERE
                      P.CDPRODUTO = C_ITEMSOLI.CDPRODUTO AND
                      PRODCMPFILI.CDPRODUTO = PRODUTO.CDPRODUTO AND
                      PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI AND
                      PRODCMPFILI.CDFILIAL <> P_FILIPROC AND
                      PRODCMPFILI.NRSEQAPUR = P_NRSEQAPUR AND
                      P.CDARVPROD LIKE PRODUTO.CDARVPROD||'%' AND
                      PRODUTO.CDARVPROD > (SELECT DECODE(MAX(PR.CDARVPROD), NULL, '0', MAX(PR.CDARVPROD))
                                           FROM   PRODNCMP, PRODUTO PR
                                           WHERE  PRODNCMP.CDPRODUTO = PR.CDPRODUTO AND
                                                  P.CDARVPROD LIKE PR.CDARVPROD||'%' AND
                                                  PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                   IF V_CTPRODCMP = 0 THEN
                      V_CTPRODCMP := 1;
                   ELSE
                      V_CTPRODCMP := 0;
                   END IF;
                END IF;

                V_CDARVPROD := '';
             
                IF V_CTPRODCMP > 0 THEN
                   SELECT MAX(CDARVPROD) INTO V_CDARVPROD
                     FROM PRODUTO
                    WHERE CDPRODUTO = C_ITEMSOLI.CDPRODUTO;

                   SELECT COUNT(*) INTO V_CTPRODCMP
                     FROM PRODNCMP, PRODUTO
                    WHERE PRODNCMP.CDPRODUTO = PRODUTO.CDPRODUTO
                      AND PRODNCMP.CDFILIAL = C_ITEMSOLI.CDFILSOLI
                      AND V_CDARVPROD LIKE PRODUTO.CDARVPROD||'%'
                      AND PRODUTO.CDARVPROD > (SELECT NVL(MAX(PR.CDARVPROD), '0')
                                                 FROM PRODCMPFILI, PRODUTO PR
                                                WHERE PRODCMPFILI.CDPRODUTO = PR.CDPRODUTO
                                                  AND V_CDARVPROD LIKE PR.CDARVPROD||'%'
                                                  AND PRODCMPFILI.CDFILIAL = C_ITEMSOLI.CDFILSOLI);
                   IF V_CTPRODCMP > 0 THEN
                      V_CTPRODCMP := 0;
                   ELSE
                      V_CTPRODCMP := 1;
                   END IF;
                END IF;

                IF V_CTPRODCMP > 0 THEN
                  V_QTACOMPRAR := C_ITEMSOLI.QTDEACOMP;

                  BEGIN
              --      DBMS_OUTPUT.PUT_LINE('AF');
                    IF (C_FILGRUPFILI.IDFUNCAOFILI = 'O') AND (V_IDUTILCONSSOLIOL = 'S') THEN
                       IF V_IDUTLPRCMPATIVO = 'S' THEN
                          SELECT
                            SUM(ITEMAUTF.QTPROGENTAF  * PRODUTO.VRFATOCONV) INTO V_QTDECOMP
                          FROM
                            AUTOFORNE, ITEMAUTF, RELACPRODOL, PRODUTO
                          WHERE
                            (AUTOFORNE.CDFILDEST     = ITEMAUTF.CDFILDEST)                      AND
                            (AUTOFORNE.CDFILLANC     = ITEMAUTF.CDFILLANC)                      AND
                            (AUTOFORNE.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN)                     AND
                            DECODE(AUTOFORNE.IDBAIXAAF, NULL, '0', AUTOFORNE.IDBAIXAAF) <> '5' AND
                            ((AUTOFORNE.IDAUTOFORNEX = P_EXTRA) OR ((P_EXTRA = 'X') AND (AUTOFORNE.IDAUTOFORNEX = 'N'))) AND
                            (ITEMAUTF.CDFILDEST      =  C_ITEMSOLI.CDFILSOLI)                   AND
                            (PRODUTO.CDPRODESTO      =  C_ITEMSOLI.CDPRODUTO)                   AND
                            (RELACPRODOL.CDPRARVORIG =  PRODUTO.CDPRODUTO)                      AND
                            (ITEMAUTF.CDPRODUTO      =  RELACPRODOL.CDPRODARVOL)                AND
                            ITEMAUTF.CDMARCA         =  RELACPRODOL.CDMARCA                     AND
                            ((V_IDUTLMARPREFOL = 'N') OR (ITEMAUTF.CDMARCA = CASE V_CORTE_OL
                                                                                WHEN 'S'
                                                                                THEN NVL(C_ITEMSOLI.CDMARCA, ITEMAUTF.CDMARCA)
                                                                                ELSE C_ITEMSOLI.CDMARCA
                                                                             END)) AND
                            (ITEMAUTF.DTENTRITMSOL   =  C_ITEMSOLI.DTPROGENTR)
                          GROUP BY
                            ITEMAUTF.CDFILDEST,
                            ITEMAUTF.DTENTRITMSOL,
                            PRODUTO.CDPRODESTO;
                       ELSE
                          SELECT
                            SUM(ITEMAUTF.QTPROGENTAF) INTO V_QTDECOMP
                          FROM
                            AUTOFORNE, ITEMAUTF, RELACPRODOL
                          WHERE
                            (AUTOFORNE.CDFILDEST     = ITEMAUTF.CDFILDEST)                      AND
                            (AUTOFORNE.CDFILLANC     = ITEMAUTF.CDFILLANC)                      AND
                            (AUTOFORNE.NRAUTOFORN    = ITEMAUTF.NRAUTOFORN)                     AND
                            DECODE(AUTOFORNE.IDBAIXAAF, NULL, '0', AUTOFORNE.IDBAIXAAF) <> '5' AND
                            ((AUTOFORNE.IDAUTOFORNEX = P_EXTRA) OR ((P_EXTRA = 'X') AND (AUTOFORNE.IDAUTOFORNEX = 'N'))) AND
                            (ITEMAUTF.CDFILDEST      =  C_ITEMSOLI.CDFILSOLI)                   AND
                            (RELACPRODOL.CDPRARVORIG =  C_ITEMSOLI.CDPRODUTO)                   AND
                            (ITEMAUTF.CDPRODUTO      =  RELACPRODOL.CDPRODARVOL)                AND
                            ITEMAUTF.CDMARCA         =  RELACPRODOL.CDMARCA                     AND
                            ((V_IDUTLMARPREFOL = 'N') OR (ITEMAUTF.CDMARCA = CASE V_CORTE_OL
                                                                                WHEN 'S'
                                                                                THEN NVL(C_ITEMSOLI.CDMARCA, ITEMAUTF.CDMARCA)
                                                                                ELSE C_ITEMSOLI.CDMARCA
                                                                             END)) AND
                            (ITEMAUTF.DTENTRITMSOL   =  C_ITEMSOLI.DTPROGENTR)
                          GROUP BY
                            ITEMAUTF.CDFILDEST,
                            ITEMAUTF.DTENTRITMSOL,
                            RELACPRODOL.CDPRARVORIG;
                       END IF;
                    ELSE
                       SELECT
                         SUM(ITEMAUTF.QTPROGENTAF) INTO V_QTDECOMP  /* QTDE CONVERTIDA PARA ESTOQUE */
                       FROM
                         AUTOFORNE, ITEMAUTF
                       WHERE
                         (AUTOFORNE.CDFILDEST = ITEMAUTF.CDFILDEST)   AND
                         (AUTOFORNE.CDFILLANC = ITEMAUTF.CDFILLANC)   AND
                         (AUTOFORNE.NRAUTOFORN = ITEMAUTF.NRAUTOFORN) AND
                         ((AUTOFORNE.IDAUTOFORNEX = P_EXTRA) OR ((P_EXTRA = 'X') AND (AUTOFORNE.IDAUTOFORNEX = 'N'))) AND
                         DECODE(AUTOFORNE.IDBAIXAAF, NULL, '0', AUTOFORNE.IDBAIXAAF) <> '5' AND
                         (ITEMAUTF.CDFILDEST    =  C_ITEMSOLI.CDFILSOLI)  AND
                         (ITEMAUTF.CDPRODUTO    =  C_ITEMSOLI.CDPRODUTO)  AND
                         (ITEMAUTF.DTENTRITMSOL =  C_ITEMSOLI.DTPROGENTR)
                       GROUP BY
                         ITEMAUTF.CDFILDEST,
                         ITEMAUTF.DTENTRITMSOL,
                         ITEMAUTF.CDPRODUTO;
                    END IF;
                  EXCEPTION
                    WHEN OTHERS THEN
                      V_QTDECOMP := 0;
                  END;
                  V_QTACOMPRAR := V_QTACOMPRAR - V_QTDECOMP;

                  IF TRUNC(V_QTACOMPRAR,3) > 0 THEN
              --      DBMS_OUTPUT.PUT_LINE('COLETA');
                     NOVO_CODIGO('LISTA', V_LISTA_PRODUTO, 1);
                     V_LISTA_PRODUTO := SUBSTR(V_LISTA_PRODUTO, 11, 10);
                     IF V_IDUTLPRCMPATIVO = 'N' THEN
                        INSERT
                          INTO LISTA
                               (NRLISTA, CDLISTA)
                        SELECT V_LISTA_PRODUTO, CDPRODUTO
                          FROM PRODUTO
                         WHERE CDPRODUTO = C_ITEMSOLI.CDPRODUTO;
                     ELSE
                        INSERT
                          INTO LISTA
                               (NRLISTA, CDLISTA)
                        SELECT V_LISTA_PRODUTO, CDPRODUTO
                          FROM PRODUTO
                         WHERE CDPRODESTO = C_ITEMSOLI.CDPRODUTO;
                     END IF;
                     FOR C_GRAVA IN (
                     SELECT
                        ITEMCOLE.CDFILIAL,
                        ITEMCOLE.CDPRODUTO,
                        PRODUTO.VRFATOCONV,
                        ITEMCOLE.NRCOLEPRECO,
                        ITEMCOLE.CDFORNECED,
                        ITEMCOLE.CDREGIAO,
                        ITEMCOLE.CDMARCA,
                        ITEMCOLE.CDTIPCOB,
                        ITEMCOLE.CDFORMPGTO,
                        ITEMCOLE.IDUTDIAPGCOL,
                        ITEMCOLE.IDTPFOPGTCOL,
                        ITEMCOLE.IDTIPFREITM,
                        ITEMCOLE.NRPARCPGTCOL,
                        ITEMCOLE.CDSEGMARCCOL,
                        ITEMCOLE.VRPRECUNIITM,
                        ITEMCOLE.VRPERDESITM,
                        ITEMCOLE.NRDIAPGFXCOL,
                        ITEMCOLE.VRPRECECOITM,
                        ITEMCOLE.VRPRECOITMPI,
                        ITEMCOLE.IDITMLISPREC,
                        ITEMCOLE.NRSEQPRELIST,
                        ITEMCOLE.QTACMPITMCOL,
                        ITEMCOLE.VRINDICEITMCOL,
                        COLETAPR.CDTPINDICECOL,
                        COLETAPR.IDPERVALORCOL,
                        COLETAPR.CDINDICECOL,
                        COLETAPR.DTREFINDCOL
                      FROM COLETAPR
                     INNER JOIN ITEMCOLE
                             ON COLETAPR.CDFILIAL     = ITEMCOLE.CDFILIAL
                            AND COLETAPR.NRCOLEPRECO  = ITEMCOLE.NRCOLEPRECO
                     INNER JOIN PRODUTO
                             ON ITEMCOLE.CDPRODUTO    = PRODUTO.CDPRODUTO
                     INNER JOIN LISTA
                             ON LISTA.CDLISTA         = PRODUTO.CDPRODUTO
                      LEFT JOIN PRMARCPEDCOL
                             ON PRMARCPEDCOL.CDFILIAL    = ITEMCOLE.CDFILIAL
                            AND PRMARCPEDCOL.NRPEDIDOCOL = ITEMCOLE.NRPEDIDOCOL
                            AND PRMARCPEDCOL.CDPRODUTO   = ITEMCOLE.CDPRODUTO
                            AND PRMARCPEDCOL.CDMARCA     = ITEMCOLE.CDMARCA
                     INNER JOIN FORNECEDOR
                             ON FORNECEDOR.CDFORNECED    = ITEMCOLE.CDFORNECED
                      WHERE
                        COLETAPR.CDFILIAL     = P_CDCENTCMP                 AND
                        COLETAPR.CDOPERADOR BETWEEN V_CDOPERINI AND V_CDOPERFIN  AND  --OR P_CDOPERADOR = 'T' AND
                        NRLISTA = V_LISTA_PRODUTO   AND
                        ((NVL(PRODUTO.IDPRCMPATIVO, 'S') = 'S') OR (C_FILGRUPFILI.IDFUNCAOFILI <> 'O') OR (V_IDUTLPRCMPATIVO = 'S')) AND
                        ((V_IDUTQTDISPGERAL = 'N') OR
                         (NVL(FORNECEDOR.IDUTQTDISPFORN, 'N') = 'N') OR
                         (NVL(PRMARCPEDCOL.QTDISPPRODMARC, 1) > 0  )
                        )                                                  AND
                        ((ITEMCOLE.IDITMLISPREC = V_ITEM AND DECODE(ITEMCOLE.IDPRECALT, NULL, 'S', ITEMCOLE.IDPRECALT) = 'S') OR V_ITEM = 'T') AND
                        ITEMCOLE.VRPRECUNIITM <> 0 AND
                        ITEMCOLE.CDREGIAO     = C_ITEMSOLI.CDREGIAO AND
                        (C_ITEMSOLI.DTPROGENTR BETWEEN ITEMCOLE.DTINIVALITM AND ITEMCOLE.DTFINVALITM) AND
                        FORNECEDOR.IDSITUCADA = 'A'                 AND
                        FORNECEDOR.IDTIPOFORN <> 'A'                AND
                        COLETAPR.NRCOMPRA IS NULL                   AND
                        ((C_ITEMSOLI.CDMARCA IS NULL) OR (ITEMCOLE.CDMARCA = CASE V_CORTE_OL
                                                                                WHEN 'S'
                                                                                THEN NVL(C_ITEMSOLI.CDMARCA, ITEMCOLE.CDMARCA)
                                                                                ELSE C_ITEMSOLI.CDMARCA
                                                                             END)) AND
                        ((V_IDUTISTATCOT = 'N') OR (NVL(COLETAPR.IDSITUCOLETA, 'C') = 'C')) AND

                        NOT EXISTS
                         (SELECT
                            REFOREG.CDREGIAO
                          FROM
                            REFOREG
                          WHERE
                            REFOREG.CDREGIAO   = C_ITEMSOLI.CDREGIAO  AND
                            REFOREG.CDFORNECED = ITEMCOLE.CDFORNECED) AND

                        NOT EXISTS
                        (SELECT
                            QFOPRODFORN.CDPRODUTO
                         FROM
                            QFOPRODFORN,
                            PARASUPRI
                         WHERE
                           PARASUPRI.CDFILIAL = P_CDCENTCMP  AND
                           (QFOPRODFORN.CDPRODUTO = PRODUTO.CDPRODUTO) AND
                           (QFOPRODFORN.CDFORNECED= ITEMCOLE.CDFORNECED) AND
                           ((QFOPRODFORN.IDFORNAPROV = 'N' AND QFOPRODFORN.IDFORNAUTOR = 'N') OR
                            ((QFOPRODFORN.IDFORNAPROV = 'S') AND
                               ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                 COLETAPR.DTCOLEPREC > LAST_DAY(QFOPRODFORN.DTVALPRFORN)) OR
                                (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                 COLETAPR.DTCOLEPREC > QFOPRODFORN.DTVALPRFORN)) ) )) AND

                        NOT EXISTS
                          (SELECT
                             QFOMARPROD.CDMARCA
                           FROM
                             QFOMARPROD, PARASUPRI
                           WHERE
                            (PARASUPRI.CDFILIAL = P_CDCENTCMP)            AND
                            (QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO) AND
                            (QFOMARPROD.CDMARCA   = ITEMCOLE.CDMARCA)     AND
                            ((QFOMARPROD.IDAPRMARPRO = 'N' AND QFOMARPROD.IDAUTMARPRO = 'N') OR
                             ((QFOMARPROD.IDAPRMARPRO = 'S') AND
                                ((PARASUPRI.IDULTIDTVALQ = 'M' AND
                                  COLETAPR.DTCOLEPREC > LAST_DAY(QFOMARPROD.DTVALAPROVA)) OR
                                 (PARASUPRI.IDULTIDTVALQ = 'D' AND
                                  COLETAPR.DTCOLEPREC > QFOMARPROD.DTVALAPROVA)) ) )) AND

                        EXISTS
                          (SELECT
                             QFOMARPROD.CDMARCA
                           FROM
                             QFOMARPROD
                           WHERE
                             QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO AND
                             QFOMARPROD.CDMARCA   = ITEMCOLE.CDMARCA

                           UNION ALL

                           SELECT
                             PARASUPRI.CDMARCA
                           FROM
                             PARASUPRI
                           WHERE
                             PARASUPRI.CDFILIAL     = P_CDCENTCMP AND
                             (PARASUPRI.IDMARSEMQUA = 'N' OR PARASUPRI.IDMARSEMQUA IS NULL)) AND

                        NOT EXISTS
                          (SELECT QUALIFICACAO.CDQUALIF
                           FROM QUALIFICACAO, PARASUPRI
                           WHERE (FORNECEDOR.CDQUALIF       = QUALIFICACAO.CDQUALIF) AND
                                 (PARASUPRI.CDFILIAL        = P_CDCENTCMP)           AND
                                 (FORNECEDOR.IDFORNAUTO     = 'N')                   AND
                                 ((QUALIFICACAO.IDPERCOTCMP = '2')                   OR
                                  ((PARASUPRI.IDULTIDTVALQ  = 'D'                    AND
                                    COLETAPR.DTCOLEPREC > FORNECEDOR.DTVALQUALIF)    OR
                                  (PARASUPRI.IDULTIDTVALQ = 'M'                      AND
                                   COLETAPR.DTCOLEPREC > LAST_DAY(FORNECEDOR.DTVALQUALIF))))) AND

                        NOT EXISTS /* Tirando fornecedores que nao atendam as filiais */
                         (SELECT
                            REFORFIL.CDFILIAL
                          FROM
                            REFORFIL
                          WHERE
                            REFORFIL.CDFILIAL   = C_ITEMSOLI.CDFILSOLI AND
                            REFORFIL.CDPERIENTR IS NULL AND
                            REFORFIL.CDFORNECED = ITEMCOLE.CDFORNECED ))
                       LOOP
                         V_CTIMPOSTO := NULL;
                         V_CONCKEY   := NULL;

                         IF V_IDSEPAFIMP = 'S' THEN
                            SELECT
                               COUNT(*)
                            INTO
                               V_CTIMPOSTO
                            FROM
                               IMPCOLET
                            WHERE
                               CDFILIAL    = C_GRAVA.CDFILIAL    AND
                               NRCOLEPRECO = C_GRAVA.NRCOLEPRECO AND
                               CDMARCA     = C_GRAVA.CDMARCA     AND
                               CDREGIAO    = C_GRAVA.CDREGIAO    AND
                               CDFORNECED  = C_GRAVA.CDFORNECED  AND
                               CDPRODUTO   = C_GRAVA.CDPRODUTO;
                            IF V_CTIMPOSTO = 0 THEN
                               V_CONCKEY := '';
                            ELSE
                               IF V_CTIMPOSTO = 1 THEN
                                  SELECT DISTINCT
                                     CDIMPOSTO
                                  INTO
                                     V_CONCKEY
                                  FROM
                                     IMPCOLET
                                  WHERE
                                     CDFILIAL    = C_GRAVA.CDFILIAL    AND
                                     NRCOLEPRECO = C_GRAVA.NRCOLEPRECO AND
                                     CDMARCA     = C_GRAVA.CDMARCA     AND
                                     CDREGIAO    = C_GRAVA.CDREGIAO    AND
                                     CDFORNECED  = C_GRAVA.CDFORNECED  AND
                                     CDPRODUTO   = C_GRAVA.CDPRODUTO;
                               ELSE
                                  IF V_CTIMPOSTO > 1 THEN
                                     V_CONCKEY := '*';
                                  END IF;
                               END IF;
                            END IF;
                         END IF;
                         V_EMITENTE  := EMITENTE(C_ITEMSOLI.CDFILSOLI, C_GRAVA.CDPRODUTO, C_GRAVA.CDFORNECED);
                         V_CDEMPRESA := SUBSTR(V_EMITENTE, 3, 2);
                         IF V_IDSEPAFIMP = 'S'  THEN
                            /*Alteracao atraves da solicitacao 190776 para resolver problema causado pela solicitacao 182945*/
                            SELECT NVL(MAX(PROD.CDTPCTPAGAR), '1')
                              INTO V_CDTPCTPAGAR
                              FROM PRODUTO P, PRODUTO PROD
                             WHERE P.CDPRODUTO  = C_GRAVA.CDPRODUTO
                               AND P.CDARVPROD LIKE PROD.CDARVPROD||'%'
                               AND PROD.CDTPCTPAGAR IS NOT NULL;
                         END IF;
                         V_CONCKEY   := V_CONCKEY||C_GRAVA.CDFILIAL || C_GRAVA.CDFORNECED ||SUBSTR(V_EMITENTE, 3, 2)||
                                        C_GRAVA.IDTPFOPGTCOL ||
                                        C_GRAVA.CDTIPCOB     || C_GRAVA.IDTIPFREITM  ||
                                        C_GRAVA.CDFORMPGTO   || C_GRAVA.NRPARCPGTCOL ||
                                        C_GRAVA.NRDIAPGFXCOL || C_GRAVA.IDUTDIAPGCOL ||SUBSTR(V_EMITENTE, 1, 1)||V_CDTPCTPAGAR;
                         V_IDTIPEMIT := SUBSTR(V_EMITENTE, 1, 1);
                         V_DSPZOPGTCONC := CONCAT_PZO_PAGTO (C_GRAVA.CDFILIAL,   C_GRAVA.NRCOLEPRECO,
                                                             C_GRAVA.CDFORNECED, C_GRAVA.CDPRODUTO,
                                                             C_GRAVA.CDMARCA,    C_GRAVA.CDREGIAO);
                         SELECT
                            DECODE(MAX(VRARREDCMP), NULL, 0, MAX(VRARREDCMP)) INTO V_VRARREDCMP
                         FROM
                            PRODUTO
                         WHERE
                            CDPRODUTO = C_GRAVA.CDPRODUTO;

                         IF V_IDUTLPRCMPATIVO = 'S' THEN
                            V_QTACOMPRAR_AUX := V_QTACOMPRAR / C_GRAVA.VRFATOCONV; /* CONVERTE PARA UNIDADE DE COMPRA */
                         ELSE
                            V_QTACOMPRAR_AUX := V_QTACOMPRAR; /* CONVERTE PARA UNIDADE DE COMPRA */
                         END IF;

                         IF (MOD(V_QTACOMPRAR_AUX, V_VRARREDCMP) <> 0) AND V_VRARREDCMP > 0 THEN
                            V_QTACOMPRAR_AUX := CEIL(V_QTACOMPRAR_AUX / V_VRARREDCMP) * V_VRARREDCMP;
                         END IF;

                         V_IDAFOPERLOG  := 'X';
                         V_CDFILIOPELOG := NULL;

                         IF (V_IDUTILCONSSOLIOL = 'N') THEN
                            SELECT
                              DECODE(MAX('2'), NULL, 'X', MAX('2')) INTO V_IDAFOPERLOG
                            FROM
                              PARAMPRODSUP
                            WHERE
                               CDFILIAL     = C_ITEMSOLI.CDFILSOLI AND
                               CDPRODUTO    = C_GRAVA.CDPRODUTO    AND
                               CDFILIOPELOG IS NOT NULL;

                            SELECT
                               MAX(CDFILIOPELOG) INTO V_CDFILIOPELOG
                            FROM
                              PARAMPRODSUP
                            WHERE
                               CDFILIAL  = C_ITEMSOLI.CDFILSOLI AND
                               CDPRODUTO = C_GRAVA.CDPRODUTO;
                         END IF;

                         V_IDPRODWEB := 'N';
                         SELECT
                           DECODE(MAX(PARAMPRODSUP.IDPRODWEB), NULL, 'N', MAX(PARAMPRODSUP.IDPRODWEB)) INTO V_IDPRODWEB
                         FROM
                           PARAMPRODSUP
                         WHERE
                            CDFILIAL   = C_ITEMSOLI.CDFILSOLI AND
                            CDPRODUTO  = C_GRAVA.CDPRODUTO    AND
                            CDFORNECED = C_GRAVA.CDFORNECED;

                         IF V_CDFILIOPELOG IS NULL THEN
                            V_CDFILIOPELOG := 'OL_NULL';
                         END IF;
                         IF C_FILGRUPFILI.IDFUNCAOFILI = 'O' THEN
                            BEGIN
                               INSERT INTO ITMAPURPREC
                               (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
                                DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                                CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
                                QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                                CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
                                CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                                IDTIPOFRETAP, NRPARCPGTOAP, CDSEGMARCCOL,
                                VRPRECUNIAP,  VRPERDESIAP,  NRDIAPGFIAP,
                                DSPZOPGTCOAP, VRPRECECOAP,  VRPRECONPIAP,
                                IDITMLISPRAP, NRLISTAITMAP, QTDISPPRODMARC,
                                CDTPINDICEAPU, IDPERVALORAPU, CDINDICEAPU, DTREFINDAPU, VRINDICEAPU)
                               VALUES(P_CDCENTCMP,
                                      P_NRSEQAPUR,
                                      C_ITEMSOLI.CDFILSOLI,
                                      C_ITEMSOLI.DTPROGENTR,
                                      C_GRAVA.CDPRODUTO,
                                      C_GRAVA.NRCOLEPRECO,
                                      C_GRAVA.CDFORNECED,
                                      C_GRAVA.CDREGIAO,
                                      C_GRAVA.CDMARCA,
                                      V_QTACOMPRAR_AUX,
                                      V_QTACOMPRAR_AUX,
                                      C_GRAVA.CDTIPCOB,
                                      V_CDEMPRESA,
                                      C_GRAVA.CDFORMPGTO,
                                      C_GRAVA.IDUTDIAPGCOL,
                                      V_CONCKEY||V_CDFILIOPELOG||V_IDPRODWEB||V_IDAFOPERLOG,
                                      C_GRAVA.IDTPFOPGTCOL,
                                      V_IDTIPEMIT,
                                      C_GRAVA.IDTIPFREITM,
                                      C_GRAVA.NRPARCPGTCOL,
                                      C_GRAVA.CDSEGMARCCOL,
                                      C_GRAVA.VRPRECUNIITM,
                                      C_GRAVA.VRPERDESITM,
                                      C_GRAVA.NRDIAPGFXCOL,
                                      V_DSPZOPGTCONC,
                                      C_GRAVA.VRPRECECOITM,
                                      C_GRAVA.VRPRECOITMPI,
                                      C_GRAVA.IDITMLISPREC,
                                      C_GRAVA.NRSEQPRELIST,
                                      C_GRAVA.QTACMPITMCOL,
                                      C_GRAVA.CDTPINDICECOL, C_GRAVA.IDPERVALORCOL, C_GRAVA.CDINDICECOL, C_GRAVA.DTREFINDCOL, C_GRAVA.VRINDICEITMCOL);
                            EXCEPTION
                               WHEN OTHERS THEN BEGIN
                                  UPDATE ITMAPURPREC
                                    SET QTSOLACOMP = QTSOLACOMP+V_QTACOMPRAR_AUX,   QTACOMP = QTACOMP+V_QTACOMPRAR_AUX
                                   WHERE CDCENTITMAP = P_CDCENTCMP
                                     AND NRSEQITMAP = P_NRSEQAPUR
                                     AND CDFILIAP = C_ITEMSOLI.CDFILSOLI
                                     AND DTENTRAPUT = C_ITEMSOLI.DTPROGENTR
                                     AND CDPRODITMAP = C_GRAVA.CDPRODUTO
                                     AND NRCOLEITMAP = C_GRAVA.NRCOLEPRECO
                                     AND CDFORNITMAP = C_GRAVA.CDFORNECED
                                     AND CDREGITMAP = C_GRAVA.CDREGIAO
                                     AND CDMARCITMAP  =  C_GRAVA.CDMARCA;

                               END;
                            END;
                         ELSE
                         INSERT INTO ITMAPURPREC
                         (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
                          DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                          CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
                          QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                          CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
                          CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                          IDTIPOFRETAP, NRPARCPGTOAP, CDSEGMARCCOL,
                          VRPRECUNIAP,  VRPERDESIAP,  NRDIAPGFIAP,
                          DSPZOPGTCOAP, VRPRECECOAP,  VRPRECONPIAP,
                          IDITMLISPRAP, NRLISTAITMAP, QTDISPPRODMARC,
                          CDTPINDICEAPU, IDPERVALORAPU, CDINDICEAPU, DTREFINDAPU, VRINDICEAPU)
                            VALUES(P_CDCENTCMP,
                                   P_NRSEQAPUR,
                                   C_ITEMSOLI.CDFILSOLI,
                                   C_ITEMSOLI.DTPROGENTR,
                                   C_GRAVA.CDPRODUTO,
                                   C_GRAVA.NRCOLEPRECO,
                                   C_GRAVA.CDFORNECED,
                                   C_GRAVA.CDREGIAO,
                                   C_GRAVA.CDMARCA,
                                   V_QTACOMPRAR_AUX,
                                   V_QTACOMPRAR_AUX,
                                   C_GRAVA.CDTIPCOB,
                                   V_CDEMPRESA,
                                   C_GRAVA.CDFORMPGTO,
                                   C_GRAVA.IDUTDIAPGCOL,
                                   V_CONCKEY||V_CDFILIOPELOG||V_IDPRODWEB||V_IDAFOPERLOG,
                                   C_GRAVA.IDTPFOPGTCOL,
                                   V_IDTIPEMIT,
                                   C_GRAVA.IDTIPFREITM,
                                   C_GRAVA.NRPARCPGTCOL,
                                   C_GRAVA.CDSEGMARCCOL,
                                   C_GRAVA.VRPRECUNIITM,
                                   C_GRAVA.VRPERDESITM,
                                   C_GRAVA.NRDIAPGFXCOL,
                                   V_DSPZOPGTCONC,
                                   C_GRAVA.VRPRECECOITM,
                                   C_GRAVA.VRPRECOITMPI,
                                   C_GRAVA.IDITMLISPREC,
                                   C_GRAVA.NRSEQPRELIST,
                                   C_GRAVA.QTACMPITMCOL,
                                   C_GRAVA.CDTPINDICECOL, C_GRAVA.IDPERVALORCOL, C_GRAVA.CDINDICECOL, C_GRAVA.DTREFINDCOL, C_GRAVA.VRINDICEITMCOL);
                         END IF;
                         IF SQL%ROWCOUNT > 0 THEN
                          P_ROWSAFFECT := 'S';
                         END IF;
                       END LOOP;
                       DELETE
                         FROM LISTA
                        WHERE NRLISTA = V_LISTA_PRODUTO;
                  END IF;
                  COMMIT;
                  V_QTACOMPRAR := 0;
                END IF;
             END IF;
           END LOOP;
        END IF;
        DELETE PRODCMPFILI_TMP WHERE NRSEQAPUR = P_NRSEQAPUR;
     END LOOP;

     FOR C_ACORDO IN
        (
         SELECT /*+ ORDERED*/
            I.ROWID,
            I.CDFILIAP,
            I.CDPRODITMAP,
            I.CDCENTITMAP,
            I.NRCOLEITMAP
         FROM
            ITMAPURPREC I, COLETAPR C
         WHERE
            I.CDCENTITMAP  = P_CDCENTCMP   AND
            I.NRSEQITMAP   = P_NRSEQAPUR   AND
            C.CDFILIAL     = I.CDCENTITMAP AND
            C.NRCOLEPRECO  = I.NRCOLEITMAP AND
            C.IDDISMONTLIS = 'N'
        )
     LOOP
        V_COUNT := 0;
        SELECT
           COUNT(*)
        INTO
           V_COUNT
        FROM
           PARTFILI P
        WHERE
           C_ACORDO.CDCENTITMAP = P.CDFILCOTA    AND
           C_ACORDO.NRCOLEITMAP = P.NRCOLEPRECO  AND
           C_ACORDO.CDFILIAP   <> P.CDFILIAL     AND
           C_ACORDO.CDPRODITMAP = P.CDPRODUTO    AND
                           '4'  = P.CDTIPPART;
        IF V_COUNT > 0 THEN
           V_COUNT := 0;
           SELECT
              COUNT(*)
           INTO
              V_COUNT
           FROM
              PARTFILI P
           WHERE
              C_ACORDO.CDCENTITMAP = P.CDFILCOTA    AND
              C_ACORDO.NRCOLEITMAP = P.NRCOLEPRECO  AND
              C_ACORDO.CDFILIAP    = P.CDFILIAL     AND
              C_ACORDO.CDPRODITMAP = P.CDPRODUTO    AND
                              '4'  = P.CDTIPPART;
           IF V_COUNT <= 0 THEN
              DELETE
              FROM
                 ITMAPURPREC
              WHERE
                 ITMAPURPREC.ROWID = C_ACORDO.ROWID;
           END IF;
        END IF;
     END LOOP;

     V_COUNT := 0;
     SELECT
        COUNT(*)
     INTO
        V_COUNT
     FROM
        ITMAPURPREC
     WHERE
        ITMAPURPREC.CDCENTITMAP = P_CDCENTCMP  AND
        ITMAPURPREC.NRSEQITMAP  = P_NRSEQAPUR;

     IF V_COUNT > 0 THEN
        P_ROWSAFFECT := 'S';
     ELSE
        P_ROWSAFFECT := 'N';
     END IF;

     IF (P_ROWSAFFECT <> 'S') AND (NVL(P_IDQTFRAC, 'N') = 'N') THEN
        DELETE
        FROM
           APURPRECO
        WHERE
            (CDFILCENTCMP = P_CDCENTCMP) AND
            (NRAPURPREC   = P_NRSEQAPUR);
     END IF;

     DELETE FROM LISTA WHERE NRLISTA IN (V_LISTA_GRUPFILI, V_LISTA_REGIAO, V_LISTA_FILIAL);

     IF P_NRLOGCORTEOL IS NOT NULL THEN
        DELETE FROM SOLICITA WHERE CDFILSOLI = SUBSTR(P_LISTAFILIAL, 2, 4) AND NRLOGCORTEOL = P_NRLOGCORTEOL;
     END IF;
     IF V_IDCONSDESTITEMCOL = 'S' THEN
        PREV_IMPOSTO(P_CDCENTCMP, P_NRSEQAPUR, 'E');
        PRECO_ECON_ITMAPURPREC(P_CDCENTCMP, P_NRSEQAPUR);
     END IF;
  EXCEPTION
     WHEN OTHERS THEN BEGIN
        IF P_NRLOGCORTEOL IS NOT NULL THEN
           DELETE FROM SOLICITA WHERE CDFILSOLI = SUBSTR(P_LISTAFILIAL, 2, 4) AND NRLOGCORTEOL = P_NRLOGCORTEOL;
           COMMIT;
        END IF;
        V_ERROR:= SQLERRM(SQLCODE);
        RAISE_APPLICATION_ERROR(-20501, V_ERROR, TRUE);
     END;
  END;
  COMMIT;
END;
/