CREATE OR REPLACE PROCEDURE GERA_AF_POR_PREVISAO_COMPRA
                     (P_CDFILCENTCMP   IN ITMAPURPREC.CDCENTITMAP%TYPE,         /*Central de Compras da Unidade de Processamento*/
                      P_NRAPURPREC     IN ITMAPURPREC.NRSEQITMAP%TYPE,          /*Número sequencial da Apuração*/
                      P_CDFORNERELACAF IN FORNECEDOR.CDFORNERELACAF%TYPE,       /*Fornecedor Principal filtrado*/
                      P_CDFORNECED     IN VARCHAR2,                             /*Fornecedor Filtrado*/
                      P_CDFILIAL       IN VARCHAR2,                             /*Unidade Filtrada*/
                      P_CDCOMPRADOR    IN VARCHAR2,                             /*Comprador Filrado*/
                      P_TIPOPREVISAO   IN VARCHAR2,                             /*Tipo de Previsão de Compra Filtrada*/
                      P_CDSUBGRUPPROD  IN VARCHAR2,                             /*Subgrupo Filtrado*/
                      P_CDPRODINI      IN PRODUTO.CDARVPROD%TYPE,               /*Produto Inicial filtrado*/
                      P_CDPRODFIN      IN PRODUTO.CDARVPROD%TYPE,               /*Produto Final Filtrado*/
                      P_CDMARCA        IN VARCHAR2,                             /*Marca Filtrada*/
                      P_DTINICIAL      IN DATE,                                 /*Período Inicial filtrado*/
                      P_DTFINAL        IN DATE,                                 /*Período Final filtrado*/
                      P_DTENTREGA      IN ITMAPURPREC.DTENTRAPUT%TYPE,          /*Data de entrega filtrada*/
                      P_CDTIPOCUSTO    IN TIPOCUSTO.CDTIPOCUSTO%TYPE,           /*Tipo de Custo filtrado*/
                      P_QTDIAESTOQUE   IN NUMERIC,                              /*Quantidade de dias de Estoque filtrada*/
                      P_CDOPERADOR     IN VARCHAR2,                             /*Operador logado no sistema*/
                      P_ROWSAFFECT     OUT VARCHAR2,                            /*Parâmetro de retorno S = Sucesso*/
                      P_QTSOLACOMP     IN FLOAT DEFAULT NULL,
                      P_VRPRECUNIAP    IN FLOAT DEFAULT NULL,
                      P_CDFILLANC      IN VARCHAR2 DEFAULT NULL)
IS
 TYPE CURTYPE         IS REF CURSOR;
 C_FORNECEDOR        CURTYPE;
 C_ITLANCTOEST       CURTYPE;
 V_EMITENTE          VARCHAR2(4);
 V_CDEMPRESA         EMPRESA.CDEMPRESA%TYPE;
 V_CONCKEY           VARCHAR2(200);
 V_IDTIPEMIT         VARCHAR2(1);
 V_DSPZOPGTCONC      VARCHAR2(2000);
 V_IDPRODWEB         AUTOFORNE.IDAFPRODWEB%TYPE;
 V_CDFILIOPELOG      VARCHAR2(1);
 V_VRCUSTO           FLOAT;
 V_CONTAITEM         NUMERIC := 0;
 V_DTPOSIESTQ         DATE;
 V_QTESTOQDIA         FLOAT;
 V_QTENTRADAS         FLOAT;
 V_DTPROCESS          DATE;
 V_QTSAIDAS           FLOAT;
 V_DIASMES            FLOAT;
 V_CDGRUPPROD         PARASUPRI.CDGRUPPROD%TYPE;
 V_QTITEMPED          FLOAT;
 V_QTPROGENTAF        FLOAT;
 V_QTMEDIA            FLOAT;
 V_QTMEDIATOTAL       FLOAT;
 V_QTDURACAEST        FLOAT;
 V_QTSOLACOMP         FLOAT;
 V_QTPROGENTAF1       FLOAT;
 V_QTITEMPED1         FLOAT;
 V_QTESTOQDIA1        FLOAT;
 V_CDFORNECED         FORNECEDOR.CDFORNECED%TYPE;
 V_CDPRODUTO          PRODUTO.CDPRODUTO%TYPE;
 V_CDMARCA            MARCA.CDMARCA%TYPE;
 V_DTENTRSAID         DATE;
 V_CDFORNECEDNF       FORNECEDOR.CDFORNECED%TYPE;
 V_CDPRODUTONF        PRODUTO.CDPRODUTO%TYPE;
 V_CDMARCANF          MARCA.CDMARCA%TYPE;
 V_CDMARCAPADRAO      MARCA.CDMARCA%TYPE;
 V_CDEXPRODFORN       PRODFORNCOMP.CDEXPRODFORN%TYPE;
 V_QTMESES            FLOAT;
 V_QTLANCTOEST        FLOAT;
 V_CDPRODMOVI         PRODUTO.CDPRODUTO%TYPE;
 V_CDFILIMOVI         FILIAL.CDFILIAL%TYPE;
 V_NMFILIAL           FILIAL.NMFILIAL%TYPE;
 V_CDARVPROD          PRODUTO.CDARVPROD%TYPE;
 V_NMPRODUTO          PRODUTO.NMPRODUTO%TYPE;
 V_SGUNIDADE          PRODUTO.SGUNIDADE%TYPE;
 V_PRODCOMP           NUMERIC;
 V_IDRESTRFILIOPER    PARAMGERAL.IDRESTRFILIOPER%TYPE;
 V_DTINICIAL          DATE;
 V_DTFINAL            DATE;
 V_DTENTREGA          DATE;
 V_QTDIAESTOQUE       NUMERIC;
 V_TIPOPREVISAO       VARCHAR2(1);
 V_CONTADOR           NUMERIC;
 V_CDPRODARVOL        RELACPRODOL.CDPRODARVOL%TYPE;
 V_CDMARCAOL          MARCA.CDMARCA%TYPE;
 V_CDFORNECED1        FORNECEDOR.CDFORNECED%TYPE;
 V_CDPRODINI          PRODUTO.CDARVPROD%TYPE;
 V_CDPRODFIN          PRODUTO.CDARVPROD%TYPE;
 V_CDPRODUTOFIN       PRODUTO.CDPRODUTO%TYPE := '0';
 BEGIN
   V_TIPOPREVISAO  := P_TIPOPREVISAO;
   IF NVL(P_DTINICIAL||P_DTFINAL||P_DTENTREGA, '0') = '0' THEN
      SELECT MAX(DTINIAPUPREC), MAX(DTFINAPUPREC), MAX(DTENTREGA), MAX(QTDIAESTOQUE)
        INTO V_DTINICIAL, V_DTFINAL, V_DTENTREGA, V_QTDIAESTOQUE
        FROM APURPRECO
       WHERE CDFILCENTCMP = P_CDFILCENTCMP
         AND NRAPURPREC   = P_NRAPURPREC;
      V_TIPOPREVISAO := 'N';
   ELSE
      V_DTINICIAL     := P_DTINICIAL;
      V_DTFINAL       := P_DTFINAL;
      V_DTENTREGA     := P_DTENTREGA;
      V_QTDIAESTOQUE  := P_QTDIAESTOQUE;
   END IF;
   IF (NVL(V_DTINICIAL, '01/01/1000') = '01/01/1000') OR (NVL(V_DTFINAL, '01/01/1000') = '01/01/1000') THEN
      SELECT MAX(DTINIAPUPREC), MAX(DTFINAPUPREC)
        INTO V_DTINICIAL, V_DTFINAL
        FROM APURPRECO
       WHERE CDFILCENTCMP = P_CDFILCENTCMP
         AND NRAPURPREC   = P_NRAPURPREC;
   END IF;
   P_ROWSAFFECT := 'N';
   SELECT
      NVL(MAX(CDGRUPPROD), 'N'),
      NVL(MAX(CDMARCA), 'N')
   INTO
      V_CDGRUPPROD,
      V_CDMARCAPADRAO
   FROM
      PARASUPRI
   WHERE
      CDFILIAL = P_CDFILCENTCMP;
   SELECT NVL(MAX(CASE
                     WHEN NVL(PARAMGERAL.IDUTILDTPROC, 'N') = 'N'
                     THEN TO_DATE(TRUNC(SYSDATE))
                     ELSE NVL(PARAMFILIAL.DTPROCESSA, TO_DATE(TRUNC(SYSDATE)))
                  END), TO_DATE(TRUNC(SYSDATE))), NVL(MAX(PARAMGERAL.IDRESTRFILIOPER), 'N')
     INTO V_DTPROCESS, V_IDRESTRFILIOPER
     FROM PARAMGERAL, PARAMFILIAL
    WHERE PARAMFILIAL.CDFILIAL = P_CDFILCENTCMP;
   V_DIASMES := 1;
   IF V_TIPOPREVISAO <> 'N' THEN
      SELECT FLOOR(COUNT(1)/COUNT(DISTINCT TO_CHAR(DTDATA, 'MM/YYYY')))
        INTO V_DIASMES
        FROM DATA
       WHERE DTDATA BETWEEN V_DTINICIAL AND LAST_DAY(V_DTFINAL)
      HAVING COUNT(DISTINCT TO_CHAR(DTDATA, 'MM/YYYY')) > 0;
   END IF;
   IF V_TIPOPREVISAO = 'R' THEN
      OPEN C_ITLANCTOEST FOR
         SELECT COUNT(DISTINCT TO_CHAR(ITLANCTOEST.DTLANCMOVI, 'MM/YYYY')) QTMESES, SUM(ITLANCTOEST.QTTOTLANCTO) QTLANCTOEST, ITLANCTOEST.CDPRODMOVI, ITLANCTOEST.CDFILIMOVI,
                FILIAL.NMFILIAL, PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE, V_DIASMES DIASMES, NULL, NULL
           FROM ITLANCTOEST, PRODUTO, FILIAL, PRODFILI
          WHERE ITLANCTOEST.CDPRODMOVI = PRODUTO.CDPRODUTO
            AND ITLANCTOEST.CDFILIMOVI = FILIAL.CDFILIAL
            AND ITLANCTOEST.CDPRODMOVI = PRODFILI.CDPRODUTO
            AND ITLANCTOEST.CDFILIMOVI = PRODFILI.CDFILIAL
            AND NVL(FILIAL.IDCNTRRESC, 'S') = 'N'
            AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
            AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
            AND ((INSTR(P_CDFILIAL, ITLANCTOEST.CDFILIMOVI) > 0 ) OR (P_CDFILIAL = 'T'))
            AND ITLANCTOEST.IDTIPOMOVI IN ('3', '4')
            AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIN, 20, 'Z')
            AND ITLANCTOEST.DTLANCMOVI BETWEEN V_DTINICIAL AND LAST_DAY(V_DTFINAL)
            AND ((NVL(P_CDSUBGRUPPROD, 'T') =  'T')
             OR (EXISTS (SELECT 1
                           FROM PRSUBGRPROD
                          WHERE PRSUBGRPROD.CDGRUPPROD  = V_CDGRUPPROD
                            AND (INSTR(P_CDSUBGRUPPROD, PRSUBGRPROD.CDSUBGRPROD) > 0 )
                            AND PRSUBGRPROD.CDPRODUTO   = ITLANCTOEST.CDPRODMOVI
                            AND PRSUBGRPROD.CDFILISUBGR = 'P')))
            AND (((V_IDRESTRFILIOPER = 'N' ))
             OR EXISTS (SELECT 1
                           FROM FILIOPER
                          WHERE FILIOPER.CDOPERADOR = P_CDOPERADOR
                            AND FILIOPER.CDFILIAL = FILIAL.CDFILIAL))
          GROUP BY ITLANCTOEST.CDPRODMOVI, ITLANCTOEST.CDFILIMOVI,
                FILIAL.NMFILIAL, PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.CDPRODUTO,
                PRODUTO.SGUNIDADE
          ORDER BY PRODUTO.CDARVPROD, ITLANCTOEST.CDFILIMOVI;
   ELSIF V_TIPOPREVISAO = 'O' THEN
      OPEN C_ITLANCTOEST FOR
         SELECT COUNT(DISTINCT TO_CHAR(NOTAFISCAL.DTENTRSAID, 'MM/YYYY')) QTMESES, SUM(ITEMPRODUTO.QTITEMPROD*PRODUTO.VRFATOCONV) QTLANCTOEST, PRODUTO.CDPRODESTO CDPRODMOVI, FILIAL.CDFILIAL CDFILIMOVI,
                FILIAL.NMFILIAL, PRODESTO.CDARVPROD, PRODESTO.NMPRODUTO, PRODESTO.SGUNIDADE, V_DIASMES DIASMES, RELACPRODOL.CDPRODARVOL, RELACPRODOL.CDMARCA
           FROM NOTAFISCAL, ITEMPRODUTO, PRODUTO, FILIAL, PRODUTO PRODESTO, RELACPRODOL, PRODUTO PRODUTOOL
          WHERE NOTAFISCAL.CDFILIEMIT   = FILIAL.CDFILIAL
            AND NOTAFISCAL.CDFILIAL     = ITEMPRODUTO.CDFILIAL
            AND NOTAFISCAL.NRLANCTONF   = ITEMPRODUTO.NRLANCTONF
            AND ITEMPRODUTO.CDPRODUTO   = RELACPRODOL.CDPRODARVOL
            AND RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
            AND PRODUTO.CDPRODESTO      = PRODESTO.CDPRODUTO
            AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
            AND PRODUTOOL.CDPRODUTO     = PRODUTOOL.CDPRODESTO
            AND NOTAFISCAL.IDENTRSAIDOP = 'S'
            AND NVL(FILIAL.IDFUNCAOFILI, 'F') = 'O'
            AND ((NOTAFISCAL.IDSTATUS   = 'A') OR (NOTAFISCAL.IDSTATUSNFE = 'A'))
            AND ((INSTR(P_CDFILIAL, FILIAL.CDFILIAL) > 0 ) OR (P_CDFILIAL = 'T'))
            AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIN, 20, 'Z')
            AND NOTAFISCAL.DTENTRSAID BETWEEN V_DTINICIAL AND LAST_DAY(V_DTFINAL)
            AND ((NVL(P_CDSUBGRUPPROD, 'T') =  'T')
             OR (EXISTS (SELECT 1
                           FROM PRSUBGRPROD
                          WHERE PRSUBGRPROD.CDGRUPPROD  = V_CDGRUPPROD
                            AND (INSTR(P_CDSUBGRUPPROD, PRSUBGRPROD.CDSUBGRPROD) > 0 )
                            AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO
                            AND PRSUBGRPROD.CDFILISUBGR = 'P')))
            AND (((V_IDRESTRFILIOPER = 'N' ))
             OR EXISTS (SELECT 1
                           FROM FILIOPER
                          WHERE FILIOPER.CDOPERADOR = P_CDOPERADOR
                            AND FILIOPER.CDFILIAL   = FILIAL.CDFILIAL))
          GROUP BY PRODUTO.CDPRODESTO, FILIAL.CDFILIAL, FILIAL.NMFILIAL, PRODESTO.CDARVPROD,
                   PRODESTO.NMPRODUTO, PRODESTO.SGUNIDADE, RELACPRODOL.CDPRODARVOL, RELACPRODOL.CDMARCA
          ORDER BY PRODESTO.CDARVPROD, FILIAL.CDFILIAL;
   ELSE
      OPEN C_ITLANCTOEST FOR
         SELECT DISTINCT 1 QTMESES, 0 QTLANCTOEST, PRODFILI.CDPRODUTO, PRODFILI.CDFILIAL,
                FILIAL.NMFILIAL, PRODUTO.CDARVPROD, PRODUTO.NMPRODUTO, PRODUTO.SGUNIDADE, V_DIASMES DIASMES, NULL, NULL
           FROM PRODUTO, FILIAL, PRODFILI, PRODUTO PR
          WHERE PRODFILI.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODFILI.CDFILIAL = FILIAL.CDFILIAL
            AND PRODUTO.CDPRODUTO = PRODUTO.CDPRODESTO
            AND NVL(FILIAL.IDCNTRRESC, 'S') = 'N'
            AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
            AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
            AND PRODUTO.CDPRODESTO = PRODUTO.CDPRODUTO
            AND PRODUTO.CDPRODESTO = PR.CDPRODESTO
            AND ((INSTR(P_CDFILIAL, PRODFILI.CDFILIAL) > 0 ) OR (P_CDFILIAL = 'T'))
            AND PR.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIN, 20, 'Z')
            AND ((NVL(P_CDSUBGRUPPROD, 'T') =  'T')
             OR (EXISTS (SELECT 1
                           FROM PRSUBGRPROD
                          WHERE PRSUBGRPROD.CDGRUPPROD  = V_CDGRUPPROD
                            AND (INSTR(P_CDSUBGRUPPROD, PRSUBGRPROD.CDSUBGRPROD) > 0 )
                            AND PRSUBGRPROD.CDPRODUTO   = PRODFILI.CDPRODUTO
                            AND PRSUBGRPROD.CDFILISUBGR = 'P')))
            AND (((V_IDRESTRFILIOPER = 'N' ))
             OR EXISTS (SELECT 1
                           FROM FILIOPER
                          WHERE FILIOPER.CDOPERADOR = P_CDOPERADOR
                            AND FILIOPER.CDFILIAL = FILIAL.CDFILIAL))
          ORDER BY PRODUTO.CDARVPROD, PRODFILI.CDFILIAL;
   END IF;
   LOOP
   FETCH C_ITLANCTOEST INTO V_QTMESES, V_QTLANCTOEST, V_CDPRODMOVI, V_CDFILIMOVI,
                            V_NMFILIAL, V_CDARVPROD, V_NMPRODUTO, V_SGUNIDADE, V_DIASMES,
                            V_CDPRODARVOL, V_CDMARCAOL ;
   EXIT WHEN C_ITLANCTOEST%NOTFOUND;
      SELECT COUNT(1)
        INTO V_PRODCOMP
        FROM PRODCOMP, PRODUTO PR
       WHERE PRODCOMP.CDPRODUTO  = PR.CDPRODUTO
         AND PRODCOMP.CDOPERADOR = P_CDCOMPRADOR
         AND V_CDARVPROD LIKE PR.CDARVPROD || '%';
      IF V_PRODCOMP > 0 THEN
         V_QTITEMPED     := 0;
         V_QTPROGENTAF   := 0;
         V_QTESTOQDIA    := 0;

         /*Posição de Estoque*/
         SELECT NVL(MAX(POSESTCONS.DTPOSESTCON), SYSDATE)
           INTO V_DTPOSIESTQ
           FROM POSESTCONS
          WHERE POSESTCONS.CDFILIAL      = V_CDFILIMOVI
            AND POSESTCONS.CDPRODUTO     = NVL(V_CDPRODARVOL, V_CDPRODMOVI);
         SELECT NVL(CALC_ESTOQ_CONS(V_CDFILIMOVI, NVL(V_CDPRODARVOL, V_CDPRODMOVI), V_DTPOSIESTQ+1), 0)
           INTO V_QTESTOQDIA
           FROM DUAL;
         /*AF´s em Aberto*/
         IF V_TIPOPREVISAO <> 'N' THEN
            SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0) ) * PRODUTO.VRFATOCONV), 0)
              INTO V_QTPROGENTAF
              FROM AUTOFORNE, ITEMAUTF, PRODUTO
             WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
               AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
               AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
               AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
               AND ITEMAUTF.CDFILDEST  = V_CDFILIMOVI
               AND PRODUTO.CDPRODESTO  = NVL(V_CDPRODARVOL, V_CDPRODMOVI)
               AND NVL(ITEMAUTF.IDBAIXITMAF, '1') = '1'
               AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
               AND NVL(AUTOFORNE.IDBAIXAAF, '0') NOT IN ('4', '5', '6')
               AND AUTOFORNE.IDAFFORALIM = 'N'
               AND AUTOFORNE.IDSITUATUAAF IS NULL
               AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS-365 AND V_DTPROCESS + 999999
               AND NVL(AUTOFORNE.IDAFEXPIRADA, 'N') = 'N';
            /*Pedidos de Expedição em Aberto*/
            SELECT NVL(SUM(NVL(ITEMPEDIDO.QTITEMPED, 0) - NVL(ITEMPEDIDO.QTEXPITEMPED, 0)*PRODUTO.VRFATOCONV), 0)
              INTO V_QTITEMPED
              FROM PEDIDO, ITEMPEDIDO, PRODUTO
             WHERE PEDIDO.CDFILIAL = ITEMPEDIDO.CDFILIAL
               AND PEDIDO.NRPEDIDO = ITEMPEDIDO.NRPEDIDO
               AND PEDIDO.CDFILIAL = V_CDFILIMOVI
               AND PEDIDO.DTENTPED BETWEEN V_DTPROCESS-365 AND V_DTPROCESS + 999999
               AND NVL(ITEMPEDIDO.IDSITITEMPED, '1') IN ('1', '2', '3', '7')
               AND NVL(PEDIDO.IDSITPEDIDO, '1') IN ('1', '2', '6')
               AND ITEMPEDIDO.CDPRODUTO = PRODUTO.CDPRODUTO
               AND PRODUTO.CDPRODESTO   = NVL(V_CDPRODARVOL, V_CDPRODMOVI);
         END IF;
         IF LENGTH(P_CDFORNERELACAF||P_CDFORNECED) > 5 THEN
            OPEN C_FORNECEDOR FOR
               SELECT FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCPRODCOMP.CDMARCA, PRODFORNCOMP.CDEXPRODFORN
                 FROM FORNECEDOR, PRODFORNCOMP, PRODUTO, MARCPRODCOMP, PRODFILI
                WHERE FORNECEDOR.CDFORNECED     = PRODFORNCOMP.CDFORNECED
                  AND PRODFORNCOMP.CDPRODCOMPL  = PRODUTO.CDPRODUTO
                  AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                  AND PRODFILI.CDPRODUTO     = PRODUTO.CDPRODUTO
                  AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                  AND PRODUTO.CDPRODUTO      = MARCPRODCOMP.CDPRMARCOMPL
                  AND PRODUTO.CDPRODESTO     = V_CDPRODMOVI
                  AND PRODUTO.CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIN, 20, 'Z')
                  AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                  AND ((INSTR(P_CDMARCA, MARCPRODCOMP.CDMARCA) > 0) OR (NVL(P_CDMARCA, 'T') = 'T'))
                  AND ((NVL(FORNECEDOR.CDFORNERELACAF, FORNECEDOR.CDFORNECED) = P_CDFORNERELACAF) OR (P_CDFORNERELACAF = 'T'))
                  AND ((INSTR(P_CDFORNECED, FORNECEDOR.CDFORNECED) > 0 ) OR (P_CDFORNECED = 'T'));
         ELSE
            V_DTENTRSAID := '01/01/0001';
            IF V_TIPOPREVISAO <> 'N' THEN
               BEGIN
                  SELECT DTENTRSAID
                    INTO V_DTENTRSAID
                    FROM (SELECT NOTAFISCAL.DTENTRSAID
                            FROM ITEMPRODUTO, NOTAFISCAL, PRODFORNCOMP, PRODUTO, PRODFILI
                           WHERE ITEMPRODUTO.CDFILIAL    =  NOTAFISCAL.CDFILIAL
                             AND ITEMPRODUTO.NRLANCTONF  =  NOTAFISCAL.NRLANCTONF
                             AND NOTAFISCAL.IDENTRSAIDOP = 'E'
                             AND NVL(NOTAFISCAL.CDFORNECED, 'W') <> 'W'
                             AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                             AND PRODUTO.CDPRODUTO = ITEMPRODUTO.CDPRODUTO
                             AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                             AND PRODFILI.CDPRODUTO     = PRODUTO.CDPRODUTO
                             AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                             AND PRODFORNCOMP.CDFORNECED = NOTAFISCAL.CDFORNECED
                             AND PRODFORNCOMP.CDPRODCOMPL  = ITEMPRODUTO.CDPRODUTO
                             AND NOTAFISCAL.CDFILIRECE   = V_CDFILIMOVI
                             AND ITEMPRODUTO.CDPRODMOVI  = NVL(V_CDPRODARVOL, V_CDPRODMOVI)
                             AND NOTAFISCAL.DTENTRSAID BETWEEN '01/01/2020' AND '01/01/9999'
                           ORDER BY NOTAFISCAL.DTENTRSAID DESC)
                   WHERE ROWNUM = 1;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_DTENTRSAID := '01/01/0001';
               END;
            END IF;
            IF V_DTENTRSAID = '01/01/0001' THEN
               BEGIN
                  SELECT FORNECEDOR.CDFORNECED
                    INTO V_CDFORNECED1
                    FROM FORNECEDOR, PRODFORNCOMP, PRODUTO, MARCPRODCOMP, PRODFILI
                   WHERE FORNECEDOR.CDFORNECED     = PRODFORNCOMP.CDFORNECED
                     AND PRODFORNCOMP.CDPRODCOMPL  = PRODUTO.CDPRODUTO
                     AND PRODUTO.CDPRODUTO         = MARCPRODCOMP.CDPRMARCOMPL
                     AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                     AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                     AND PRODFILI.CDPRODUTO     = PRODUTO.CDPRODUTO
                     AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                     AND PRODUTO.CDPRODESTO        = V_CDPRODMOVI
                     AND ((INSTR(P_CDMARCA, MARCPRODCOMP.CDMARCA) > 0) OR (NVL(P_CDMARCA, 'T') = 'T'))
                     AND ((NVL(FORNECEDOR.CDFORNERELACAF, FORNECEDOR.CDFORNECED) = P_CDFORNERELACAF) OR (P_CDFORNERELACAF = 'T'))
                     AND ((INSTR(P_CDFORNECED, FORNECEDOR.CDFORNECED) > 0 ) OR (P_CDFORNECED = 'T'))
                     AND ROWNUM = 1;
               EXCEPTION
                  WHEN NO_DATA_FOUND THEN
                     V_CDFORNECED1 := 'W';
               END;
               IF V_CDFORNECED1 = 'W' THEN
                  OPEN C_FORNECEDOR FOR
                     SELECT FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCPRODCOMP.CDMARCA, PRODFORNCOMP.CDEXPRODFORN
                       FROM FORNECEDOR, PRODFORNCOMP, PRODUTO, MARCPRODCOMP, PRODFILI
                      WHERE FORNECEDOR.CDFORNECED     = PRODFORNCOMP.CDFORNECED
                        AND PRODFORNCOMP.CDPRODCOMPL  = PRODUTO.CDPRODUTO
                        AND PRODUTO.CDPRODUTO         = MARCPRODCOMP.CDPRMARCOMPL
                        AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                        AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                        AND PRODFILI.CDPRODUTO        = PRODUTO.CDPRODUTO
                        AND PRODFILI.CDFILIAL         = V_CDFILIMOVI
                        AND PRODUTO.CDPRODESTO        = V_CDPRODMOVI
                        AND ((INSTR(P_CDMARCA, MARCPRODCOMP.CDMARCA) > 0) OR (NVL(P_CDMARCA, 'T') = 'T'))
                        AND ((NVL(FORNECEDOR.CDFORNERELACAF, FORNECEDOR.CDFORNECED) = P_CDFORNERELACAF) OR (P_CDFORNERELACAF = 'T'))
                        AND ((INSTR(P_CDFORNECED, FORNECEDOR.CDFORNECED) > 0 ) OR (P_CDFORNECED = 'T'))
                        AND ROWNUM = 1;
               ELSE
                  OPEN C_FORNECEDOR FOR
                     SELECT FORNECEDOR.CDFORNECED, PRODUTO.CDPRODUTO, MARCPRODCOMP.CDMARCA, PRODFORNCOMP.CDEXPRODFORN
                       FROM FORNECEDOR, PRODFORNCOMP, PRODUTO, MARCPRODCOMP, PRODFILI
                      WHERE FORNECEDOR.CDFORNECED     = PRODFORNCOMP.CDFORNECED
                        AND PRODFORNCOMP.CDPRODCOMPL  = PRODUTO.CDPRODUTO
                        AND PRODUTO.CDPRODUTO         = MARCPRODCOMP.CDPRMARCOMPL
                        AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                        AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                        AND PRODFILI.CDPRODUTO        = PRODUTO.CDPRODUTO
                        AND PRODFILI.CDFILIAL         = V_CDFILIMOVI
                        AND PRODUTO.CDPRODESTO        = V_CDPRODMOVI
                        AND ((INSTR(P_CDMARCA, MARCPRODCOMP.CDMARCA) > 0) OR (NVL(P_CDMARCA, 'T') = 'T'))
                        AND ((NVL(FORNECEDOR.CDFORNERELACAF, FORNECEDOR.CDFORNECED) = P_CDFORNERELACAF) OR (P_CDFORNERELACAF = 'T'))
                        AND ((INSTR(V_CDFORNECED1, FORNECEDOR.CDFORNECED) > 0 ) OR (V_CDFORNECED1 = 'T'));
               END IF;
            ELSE
               SELECT NVL(MAX(MARCPRODCOMP.CDMARCA), NVL(V_CDMARCAOL, V_CDMARCAPADRAO))
                 INTO V_CDMARCANF
                 FROM MARCPRODCOMP, PRODUTO, PRODFILI
                WHERE MARCPRODCOMP.CDPRMARCOMPL = PRODUTO.CDPRODUTO
                  AND PRODUTO.CDPRODESTO       = V_CDPRODMOVI
                  AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                  AND PRODFILI.CDPRODUTO     = PRODUTO.CDPRODUTO
                  AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                  AND ((INSTR(P_CDMARCA, MARCPRODCOMP.CDMARCA) > 0) OR (NVL(P_CDMARCA, 'T') = 'T'));

                  IF V_TIPOPREVISAO <> 'O' THEN
                     OPEN C_FORNECEDOR FOR
                        SELECT MAX(NOTAFISCAL.CDFORNECED), MAX(ITEMPRODUTO.CDPRODUTO), V_CDMARCANF, MAX(PRODFORNCOMP.CDEXPRODFORN) CDEXPRODFORN
                          FROM ITEMPRODUTO, NOTAFISCAL, PRODFORNCOMP, PRODUTO, PRODFILI
                         WHERE ITEMPRODUTO.CDFILIAL    =  NOTAFISCAL.CDFILIAL
                           AND ITEMPRODUTO.NRLANCTONF  =  NOTAFISCAL.NRLANCTONF
                           AND PRODFORNCOMP.CDFORNECED = NOTAFISCAL.CDFORNECED
                           AND PRODFORNCOMP.CDPRODCOMPL  = ITEMPRODUTO.CDPRODUTO
                           AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                           AND PRODFILI.CDPRODUTO     = PRODUTO.CDPRODUTO
                           AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                           AND NOTAFISCAL.IDENTRSAIDOP = 'E'
                           AND NVL(NOTAFISCAL.CDFORNECED, 'W') <> 'W'
                           AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                           AND PRODUTO.CDPRODUTO = ITEMPRODUTO.CDPRODUTO
                           AND NOTAFISCAL.CDFILIRECE   = V_CDFILIMOVI
                           AND ITEMPRODUTO.CDPRODMOVI  = V_CDPRODMOVI
                           AND NOTAFISCAL.DTENTRSAID   = V_DTENTRSAID;
                  ELSE
                     OPEN C_FORNECEDOR FOR
                        SELECT MAX(NOTAFISCAL.CDFORNECED), MAX(PRODUTO.CDPRODUTO), V_CDMARCANF, MAX(PRODFORNCOMP.CDEXPRODFORN) CDEXPRODFORN
                          FROM ITEMPRODUTO, NOTAFISCAL, PRODFORNCOMP, PRODUTO, PRODFILI, RELACPRODOL, PRODUTO PRODUTOOL
                         WHERE ITEMPRODUTO.CDFILIAL    =  NOTAFISCAL.CDFILIAL
                           AND ITEMPRODUTO.NRLANCTONF  =  NOTAFISCAL.NRLANCTONF
                           AND PRODFORNCOMP.CDFORNECED = NOTAFISCAL.CDFORNECED
                           AND ITEMPRODUTO.CDPRODUTO   = RELACPRODOL.CDPRODARVOL
                           AND RELACPRODOL.CDPRARVORIG = PRODFORNCOMP.CDPRODCOMPL
                           AND RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
                           AND PRODUTOOL.CDPRODUTO     = PRODUTOOL.CDPRODESTO
                           AND NVL(PRODFILI.IDPRODATIV, 'I') = 'A'
                           AND PRODFILI.CDPRODUTO     = RELACPRODOL.CDPRODARVOL
                           AND PRODFILI.CDFILIAL      = V_CDFILIMOVI
                           AND NOTAFISCAL.IDENTRSAIDOP = 'E'
                           AND NVL(NOTAFISCAL.CDFORNECED, 'W') <> 'W'
                           AND NVL(PRODUTO.IDPRODATIVPR, 'N')  = 'S'
                           AND PRODUTO.CDPRODUTO = RELACPRODOL.CDPRARVORIG
                           AND NOTAFISCAL.CDFILIRECE   = V_CDFILIMOVI
                           AND ITEMPRODUTO.CDPRODMOVI  = NVL(V_CDPRODARVOL, V_CDPRODMOVI)
                           AND NOTAFISCAL.DTENTRSAID   = V_DTENTRSAID;
                  END IF;
            END IF;
         END IF;
         LOOP
         FETCH C_FORNECEDOR INTO V_CDFORNECED, V_CDPRODUTO, V_CDMARCA, V_CDEXPRODFORN;
         EXIT WHEN C_FORNECEDOR%NOTFOUND;
            FOR C_GRAVA IN (SELECT CDFILIAL, CDREGIAO, CDPRODUTO, DTPROGENTR, QTSOLIPROD,
                                   CDMARCA, VRCUSTO, NRAPURPREC, NRCOLEPRECO, VRFATOCONV, VRARREDCMP, CDFORNECED,
                                   CDTIPCOB, CDFORMPGTO, IDUTDIAPGTFO, IDTPFORPGTFO, IDTPFRETFORN,
                                   NRPARCPGTOFO, VRPEDESCFORN, NRDIAPGFIXFO
                              FROM (SELECT I.CDFILIAL, FILIAL.NMFILIAL,
                                           FILIAL.CDREGIAO, PRODUTO.CDPRODUTO, TO_DATE(TRUNC(V_DTENTREGA)) DTPROGENTR,
                                           0 QTSOLIPROD, PRODUTO.NMPRODUTO, PRODUTO.CDARVPROD, PRODUTO.SGUNIDADE, V_CDMARCA CDMARCA,
                                           CASE
                                              WHEN V_TIPOPREVISAO = 'N'
                                              THEN 0
                                              ELSE (CUSTO_PRODUTO(I.CDFILIAL, PRODUTO.CDPRODESTO, P_CDTIPOCUSTO, SYSDATE, SYSDATE))*PRODUTO.VRFATOCONV
                                           END AS VRCUSTO,
                                           P_NRAPURPREC NRAPURPREC, '9999999999' NRCOLEPRECO,
                                           PRODUTO.VRFATOCONV, CASE
                                                                  WHEN NVL(PRODUTO.VRARREDCMP, 0) = 0
                                                                  THEN 1
                                                                  ELSE NVL(PRODUTO.VRARREDCMP, 0)
                                                               END VRARREDCMP, PF.CDFORNECED, CDTIPCOB, CDFORMPGTO, IDUTDIAPGTFO,
                                           IDTPFORPGTFO, IDTPFRETFORN, NRPARCPGTOFO, VRPEDESCFORN, NRDIAPGFIXFO
                                      FROM PRODFILI I, PRODUTO, FILIAL,
                                           (SELECT CDFORNECED, CDTIPCOB, CDFORMPGTO,
                                                   IDUTDIAPGTFO, IDTPFORPGTFO, IDTPFRETFORN, NRPARCPGTOFO,
                                                   VRPEDESCFORN, NRDIAPGFIXFO, CDQUALIF, DTVALQUALIF, IDFORNAUTO
                                              FROM FORNECEDOR
                                             WHERE FORNECEDOR.CDFORNECED  = V_CDFORNECED
                                               AND FORNECEDOR.IDSITUCADA  = 'A'
                                               AND FORNECEDOR.IDTIPOFORN  <> 'A') PF, PARASUPRI
                             WHERE I.CDFILIAL          = V_CDFILIMOVI
                               AND PRODUTO.CDPRODUTO   = V_CDPRODUTO
                               AND I.CDPRODUTO         = PRODUTO.CDPRODUTO
                               AND NVL(I.IDPRODATIV, 'I') = 'A'
                               AND (FILIAL.CDFILIAL = I.CDFILIAL)
                               AND NVL(FILIAL.IDCNTRRESC, 'S') = 'N'
                               AND FILIAL.CDREGIAO IS NOT NULL
                               AND NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)  = P_CDFILCENTCMP
                               AND (PARASUPRI.CDFILIAL = P_CDFILCENTCMP)
                               AND NOT EXISTS (SELECT REFOREG.CDREGIAO
                                                 FROM REFOREG
                                                WHERE REFOREG.CDREGIAO   = FILIAL.CDREGIAO
                                                  AND REFOREG.CDFORNECED = V_CDFORNECED)
                               AND NOT EXISTS (SELECT REFORFIL.CDFILIAL
                                                 FROM REFORFIL
                                                WHERE REFORFIL.CDFILIAL   = FILIAL.CDFILIAL
                                                  AND REFORFIL.CDPERIENTR IS NULL
                                                  AND REFORFIL.CDFORNECED = V_CDFORNECED )
                               AND NOT EXISTS (SELECT QFOPRODFORN.CDPRODUTO
                                                 FROM QFOPRODFORN
                                                WHERE PARASUPRI.CDFILIAL     = P_CDFILCENTCMP
                                                  AND (QFOPRODFORN.CDPRODUTO = PRODUTO.CDPRODUTO)
                                                  AND (QFOPRODFORN.CDFORNECED = V_CDFORNECED)
                                                  AND ((QFOPRODFORN.IDFORNAPROV = 'N'
                                                  AND QFOPRODFORN.IDFORNAUTOR = 'N')
                                                   OR ((QFOPRODFORN.IDFORNAPROV = 'S')
                                                  AND ((PARASUPRI.IDULTIDTVALQ = 'M'
                                                  AND V_DTENTREGA > LAST_DAY(QFOPRODFORN.DTVALPRFORN))
                                                   OR (PARASUPRI.IDULTIDTVALQ = 'D'
                                                   AND V_DTENTREGA > QFOPRODFORN.DTVALPRFORN)) ) ))
                               AND NOT EXISTS (SELECT QFOMARPROD.CDMARCA
                                                 FROM QFOMARPROD
                                                WHERE (PARASUPRI.CDFILIAL = P_CDFILCENTCMP)
                                                  AND (QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO)
                                                  AND (QFOMARPROD.CDMARCA   = V_CDMARCA)
                                                  AND ((QFOMARPROD.IDAPRMARPRO = 'N'
                                                  AND QFOMARPROD.IDAUTMARPRO = 'N')
                                                   OR ((QFOMARPROD.IDAPRMARPRO = 'S')
                                                  AND ((PARASUPRI.IDULTIDTVALQ = 'M'
                                                  AND V_DTENTREGA > LAST_DAY(QFOMARPROD.DTVALAPROVA))
                                                   OR (PARASUPRI.IDULTIDTVALQ = 'D'
                                                  AND V_DTENTREGA > QFOMARPROD.DTVALAPROVA)) ) ))
                               AND EXISTS (SELECT QFOMARPROD.CDMARCA
                                             FROM QFOMARPROD
                                            WHERE QFOMARPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                              AND QFOMARPROD.CDMARCA   = V_CDMARCA
                                            UNION
                                           SELECT PARASUPRI.CDMARCA
                                             FROM PARASUPRI
                                            WHERE PARASUPRI.CDFILIAL     = P_CDFILCENTCMP
                                              AND (PARASUPRI.IDMARSEMQUA = 'N' OR PARASUPRI.IDMARSEMQUA IS NULL))
                               AND NOT EXISTS (SELECT QUALIFICACAO.CDQUALIF
                                                 FROM QUALIFICACAO
                                                WHERE (PF.CDQUALIF       = QUALIFICACAO.CDQUALIF)
                                                  AND (PARASUPRI.CDFILIAL        = P_CDFILCENTCMP)
                                                  AND (PF.IDFORNAUTO     = 'N')
                                                  AND ((QUALIFICACAO.IDPERCOTCMP = '2')
                                                   OR ((PARASUPRI.IDULTIDTVALQ  = 'D'
                                                  AND V_DTENTREGA > PF.DTVALQUALIF)
                                                   OR (PARASUPRI.IDULTIDTVALQ = 'M'
                                                  AND V_DTENTREGA > LAST_DAY(PF.DTVALQUALIF))))))

                                                  )
            LOOP
               V_CONTAITEM := V_CONTAITEM+1;
               IF V_CDPRODUTOFIN < C_GRAVA.CDPRODUTO THEN
                  V_CDPRODUTOFIN := C_GRAVA.CDPRODUTO;
               END IF;
               IF V_CONTAITEM = 1 THEN
                  SELECT MAX(CDARVPROD)
                    INTO V_CDPRODINI
                    FROM PRODUTO
                   WHERE CDPRODUTO = C_GRAVA.CDPRODUTO;
                  INSERT
                    INTO APURPRECO (CDFILCENTCMP, NRAPURPREC, CDCOMPRADOR, DTINIAPUPREC,
                         DTFINAPUPREC, IDSITAPUPREC, DTAPURPREC, CDOPERADOR, CDFILLANC,
                         DSGRUPFILIAPUR, CDPRODINICAPUR, CDPRODFINAAPUR, IDCONSOLAPUEFET,
                         CDFORNERELACAF, LISTAFORNECEDOR, LISTAUNIDADE, IDTPPREVISAOCMP,
                         LISTASUBGRUPO, LISTAMARCA, QTDIAESTOQUE, DTENTREGA, CDTIPOCUSTO,
                         IDTIPOPREVISAO)
                  SELECT P_CDFILCENTCMP, P_NRAPURPREC, P_CDCOMPRADOR, V_DTENTREGA,
                          V_DTENTREGA, '1', SYSDATE, P_CDOPERADOR, NVL(P_CDFILLANC, P_CDFILCENTCMP),
                          '', P_CDPRODINI, P_CDPRODFIN, 'N',
                          P_CDFORNERELACAF, SUBSTR(P_CDFORNECED, 1, 2000), P_CDFILIAL, V_TIPOPREVISAO,
                          SUBSTR(P_CDSUBGRUPPROD, 1, 2000), SUBSTR(P_CDMARCA, 1, 2000), V_QTDIAESTOQUE ,
                          V_DTENTREGA, P_CDTIPOCUSTO, P_TIPOPREVISAO
                     FROM DUAL
                    WHERE NOT EXISTS(SELECT 1
                                       FROM APURPRECO A
                                      WHERE A.CDFILCENTCMP = P_CDFILCENTCMP
                                        AND A.NRAPURPREC   = P_NRAPURPREC);
               END IF;
               V_QTPROGENTAF1  := 0;
               V_QTITEMPED1    := 0;
               V_QTESTOQDIA1   := 0;
               V_QTENTRADAS    := 0;
               V_QTSAIDAS      := 0;
               V_QTITEMPED     := 0;
               V_QTMEDIA       := 1;
               V_QTMEDIATOTAL  := 0;
               V_QTDURACAEST   := 0;
               V_QTSOLACOMP    := 0;

               V_EMITENTE  := EMITENTE(C_GRAVA.CDFILIAL, C_GRAVA.CDPRODUTO, C_GRAVA.CDFORNECED);
               V_CDEMPRESA := SUBSTR(V_EMITENTE, 3, 2);
               V_CONCKEY   := V_CONCKEY||C_GRAVA.CDFILIAL|| C_GRAVA.CDFORNECED ||SUBSTR(V_EMITENTE, 3, 2)||
                              C_GRAVA.IDTPFORPGTFO ||
                              C_GRAVA.CDTIPCOB     || C_GRAVA.IDTPFRETFORN  ||
                              C_GRAVA.CDFORMPGTO   || C_GRAVA.NRPARCPGTOFO ||
                              C_GRAVA.NRDIAPGFIXFO || C_GRAVA.IDUTDIAPGTFO ||SUBSTR(V_EMITENTE, 1, 1);
               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);


               V_IDPRODWEB     := 'N';
               V_CDFILIOPELOG  := 'X';
               V_VRCUSTO       := C_GRAVA.VRCUSTO;
               V_QTMESES       := CASE
                                     WHEN V_QTMESES = 0
                                     THEN 1
                                     ELSE V_QTMESES
                                  END;
               V_QTMEDIA       := ((V_QTLANCTOEST/C_GRAVA.VRFATOCONV) / V_QTMESES)/V_QTMESES;
               V_QTMEDIA       := CASE
                                     WHEN V_QTMEDIA = 0
                                     THEN 1
                                     ELSE V_QTMEDIA
                                  END;
               V_QTMEDIATOTAL  := V_QTMEDIA*NVL(V_QTDIAESTOQUE, 1);


               V_QTENTRADAS    := (V_QTESTOQDIA+V_QTPROGENTAF)/C_GRAVA.VRFATOCONV;
               V_QTSAIDAS      := (V_QTITEMPED/C_GRAVA.VRFATOCONV) + V_QTMEDIATOTAL;
               V_QTPROGENTAF1  := (V_QTPROGENTAF)/C_GRAVA.VRFATOCONV;
               V_QTITEMPED1    := (V_QTITEMPED)/C_GRAVA.VRFATOCONV;
               V_QTESTOQDIA1   := (V_QTESTOQDIA)/C_GRAVA.VRFATOCONV;
               V_QTDURACAEST   := V_QTESTOQDIA1/V_QTMEDIA;


               V_QTSOLACOMP    := V_QTENTRADAS - V_QTSAIDAS;
               IF V_QTSOLACOMP < 0 THEN
                  V_QTSOLACOMP := ABS(V_QTSOLACOMP);
                  IF (MOD(V_QTSOLACOMP, C_GRAVA.VRARREDCMP) <> 0) THEN
                     V_QTSOLACOMP := CEIL(V_QTSOLACOMP/C_GRAVA.VRARREDCMP) * C_GRAVA.VRARREDCMP;
                  END IF;
               ELSE
                  V_QTSOLACOMP := 0;
               END IF;
               IF V_TIPOPREVISAO = 'N' THEN
                  V_QTSOLACOMP   := 0;
               END IF;
               IF (NVL(P_QTSOLACOMP, 0) > 0 ) THEN
                  V_QTSOLACOMP := P_QTSOLACOMP;
               END IF;
               SELECT COUNT(1)
                 INTO V_CONTADOR
                 FROM ITMAPURPREC I
                WHERE I.CDCENTITMAP  = P_CDFILCENTCMP
                  AND I.NRSEQITMAP   = P_NRAPURPREC
                  AND I.CDFILIAP     = C_GRAVA.CDFILIAL
                  AND I.DTENTRAPUT   = C_GRAVA.DTPROGENTR
                  AND I.CDPRODITMAP  = C_GRAVA.CDPRODUTO
                  AND I.NRCOLEITMAP  = C_GRAVA.NRCOLEPRECO
                  AND I.CDFORNITMAP  = C_GRAVA.CDFORNECED
                  AND I.CDREGITMAP   = C_GRAVA.CDREGIAO
                  AND I.CDMARCITMAP  = C_GRAVA.CDMARCA;
               IF V_CONTADOR = 0 THEN
                  IF (((NVL(P_QTSOLACOMP, 0) > 0 ) OR (NVL(P_VRPRECUNIAP, 0) > 0) ) AND (V_TIPOPREVISAO = 'N')) THEN
                     DELETE
                       FROM ITMAPURPREC I
                      WHERE I.CDCENTITMAP  = P_CDFILCENTCMP
                        AND I.NRSEQITMAP   = P_NRAPURPREC
                        AND I.CDFILIAP     = C_GRAVA.CDFILIAL
                        AND I.DTENTRAPUT   = C_GRAVA.DTPROGENTR
                        AND I.CDPRODITMAP  = C_GRAVA.CDPRODUTO
                        AND I.NRCOLEITMAP  = C_GRAVA.NRCOLEPRECO
                        AND I.CDREGITMAP   = C_GRAVA.CDREGIAO
                        AND I.CDMARCITMAP  = C_GRAVA.CDMARCA;
                  END IF;
                  INSERT INTO ITMAPURPREC
                  (CDCENTITMAP,  NRSEQITMAP,   CDFILIAP,
                   DTENTRAPUT,   CDPRODITMAP,  NRCOLEITMAP,
                   CDFORNITMAP,  CDREGITMAP,   CDMARCITMAP,
                   QTSOLACOMP,   QTACOMP,      CDTIPCOBAP,
                   CDEMPRESAAP,  CDFORMPGTOAP, IDULTDIAPGTAF,
                   CONCKEYAP,    IDTPFORPGTAP, IDTIPOEMITAP,
                   IDTIPOFRETAP, NRPARCPGTOAP, VRPRECUNIAP,
                   VRPERDESIAP,  NRDIAPGFIAP, DSPZOPGTCOAP,
                   VRPRECECOAP,  VRPRECONPIAP, IDITMLISPRAP,
                   QTCONSUMODIA, QTESTOQUE, QTDURACAEST,
                   QTCONSUMODIASEST, QTITEMPED, QTPROGENTAF,
                   QTENTRADAS, QTSAIDAS, CDEXPRODFORN)
                  VALUES(P_CDFILCENTCMP, P_NRAPURPREC, C_GRAVA.CDFILIAL,
                         C_GRAVA.DTPROGENTR, C_GRAVA.CDPRODUTO, C_GRAVA.NRCOLEPRECO,
                         C_GRAVA.CDFORNECED, C_GRAVA.CDREGIAO, C_GRAVA.CDMARCA,
                         V_QTSOLACOMP, V_QTSOLACOMP, C_GRAVA.CDTIPCOB,
                         V_CDEMPRESA, C_GRAVA.CDFORMPGTO, C_GRAVA.IDUTDIAPGTFO,
                         V_CONCKEY||V_IDPRODWEB||V_CDFILIOPELOG, C_GRAVA.IDTPFORPGTFO, V_IDTIPEMIT,
                         C_GRAVA.IDTPFRETFORN, C_GRAVA.NRPARCPGTOFO, NVL(P_VRPRECUNIAP, V_VRCUSTO),
                         C_GRAVA.VRPEDESCFORN, C_GRAVA.NRDIAPGFIXFO, V_DSPZOPGTCONC,
                         NVL(P_VRPRECUNIAP, V_VRCUSTO), NVL(P_VRPRECUNIAP, V_VRCUSTO), 'N',
                         V_QTMEDIA, V_QTESTOQDIA1, V_QTDURACAEST,
                         V_QTMEDIATOTAL, V_QTITEMPED1, V_QTPROGENTAF1,
                         V_QTENTRADAS, V_QTSAIDAS, V_CDEXPRODFORN);
                  IF SQL%ROWCOUNT > 0 THEN
                     P_ROWSAFFECT := 'S';
                  END IF;
               ELSE
                  UPDATE ITMAPURPREC
                     SET QTSOLACOMP    = V_QTSOLACOMP,
                         QTACOMP       = V_QTSOLACOMP,
                         VRPRECUNIAP   = NVL(P_VRPRECUNIAP, V_VRCUSTO),
                         VRPRECECOAP   = NVL(P_VRPRECUNIAP, V_VRCUSTO),
                         VRPRECONPIAP  = NVL(P_VRPRECUNIAP, V_VRCUSTO)
                   WHERE CDCENTITMAP  = P_CDFILCENTCMP
                     AND NRSEQITMAP   = P_NRAPURPREC
                     AND CDFILIAP     = C_GRAVA.CDFILIAL
                     AND DTENTRAPUT   = C_GRAVA.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
                     AND CDPRODITMAP  IN (SELECT CDPRODUTO
                                            FROM PRODUTO
                                           WHERE CDARVPROD BETWEEN P_CDPRODINI AND RPAD(P_CDPRODFIN, 20, 'Z'));
                  IF SQL%ROWCOUNT > 0 THEN
                     P_ROWSAFFECT := 'S';
                  END IF;
               END IF;
               V_CONCKEY := '';
            END LOOP;
         END LOOP;
      END IF;
      IF ((P_ROWSAFFECT = 'S') AND ((NVL(P_CDPRODINI, '0') = '0') OR (NVL(P_CDPRODFIN, 'Z') = 'Z'))) THEN
         SELECT MAX(CDARVPROD)
           INTO V_CDPRODFIN
           FROM PRODUTO
          WHERE CDPRODUTO = V_CDPRODUTOFIN;
         UPDATE APURPRECO
            SET CDPRODINICAPUR = V_CDPRODINI, CDPRODFINAAPUR = V_CDPRODFIN
          WHERE CDFILCENTCMP   = P_CDFILCENTCMP
            AND NRAPURPREC     = P_NRAPURPREC;
      END IF;
   END LOOP;
END;
/