CREATE OR REPLACE PROCEDURE EFETIVAR_AF
                     (P_CDOPERADOR  IN VARCHAR2,
                      P_DTAUTOFORN  IN ITMAPURPREC.DTENTRAPUT%TYPE,
                      P_CDCENTCMP   IN ITMAPURPREC.CDCENTITMAP%TYPE,
                      P_NRSEQAPUR   IN ITMAPURPREC.NRSEQITMAP%TYPE,
                      P_CDFILLANC   IN AUTOFORNE.CDFILLANC%TYPE)
IS
   V_NRITEMAF NUMBER;
   V_CODIGO VARCHAR2(20);
   V_CODIGO_AUX VARCHAR2(20);
   V_CONT INT;
   V_OBSSOL VARCHAR2(2000);
   V_CDINSCESTA VARCHAR2(16);
   V_DTPROGENTAF DATE;
   V_VRPRODUTO NUMBER;
   V_VRDESCONTO NUMBER;
   V_VRIMPOSTO NUMBER;
   V_VRDESCITMAF NUMBER(15,5);
   V_NRLOTEESTQ VARCHAR2(20);
   V_NRSUBLOTE VARCHAR2(4);
   V_CDPRODPROD VARCHAR2(10);
   V_NMPRODPROD VARCHAR2(50);

   V_DIAPGTO VARCHAR2(3);
   V_DSPGTO VARCHAR2(1000);
   V_VRPGTO VARCHAR2(20);

   V_DSANTERIOR VARCHAR2(10000);
   V_DSANTERIOR_AUX VARCHAR2(10000);
   V_DSATUAL    VARCHAR2(10000);

   V_ANTCODIGO       VARCHAR2(10);
   V_ANTCDFILDEST    VARCHAR2(4);
   V_ANTCDFILLANC    VARCHAR2(4);
   V_ANTCDFORNECED   VARCHAR2(21);
   V_ANTIDTPFORPGTAF VARCHAR2(1);
   V_ANTCDTIPCOB     VARCHAR2(2);
   V_ANTIDTIPOEMITAF VARCHAR2(1);
   V_ANTCDEMPRESA    VARCHAR2(2);
   V_ANTIDTIPOFRETAF VARCHAR2(1);
   V_ANTCDFORMPGTO   VARCHAR2(2);
   V_ANTNRPARCPGTOAF VARCHAR2(3);
   V_ANTNRDIAPGFIXAF VARCHAR2(3);
   V_ANTIDUTDIAPGTAF VARCHAR2(1);
   V_ANTDSPZOPGTCONC VARCHAR2(1000);
   V_ANTCONC_KEY     VARCHAR2(1000);

   V_IDCOMPRA        VARCHAR2(1);
   V_IDGERAAF        VARCHAR2(1);
   V_DIENTREGA       VARCHAR2(3);

   V_NOVOCODIGO  VARCHAR2(20);
   V_REGANTERIOR VARCHAR2(255);
   V_ITEMAUTF_ANTERIOR VARCHAR2(255);
   V_AFANTERIOR  VARCHAR2(255);
   V_SUMPERCPZO  PRAZOPGTAF.VRPERCPGTOAF%TYPE;

   V_COUNT_AUX    NUMBER;
   V_VRPRECUNIITM NUMBER;

   V_IDUTQTDEVOLU VARCHAR2(1);
   V_QTVOLUITEMSO NUMBER;

   V_NRSOLCOMP    VARCHAR2(200);
   V_QTSOLIPROD   FLOAT;
   V_DTAUX        DATE;

   V_VRFATOCONV   FLOAT;

   V_DTENTRITMSOL DATE;
   V_ANTQTSOLIPROD FLOAT;
   V_VRARREDEMPE  PRODFORNCOMP.VRARREDEMPE%TYPE;
   V_QTPROGENTAF  ITEMAUTF.QTPROGENTAF%TYPE;
   V_IDUTEMPENHAF PARASUPRI.IDUTEMPENHAF%TYPE;
   V_IDUTILCONSSOLIOL PARASUPRI.IDUTILCONSSOLIOL%TYPE;
   V_EMPRESA      AUTOFORNE.CDEMPRESA%TYPE;
   V_CDTPCTPAGAR  AUTOFORNE.CDTPCTPAGAR%TYPE;
   V_MARCAPADRAO  PARASUPRI.CDMARCA%TYPE;
   V_MARCAITEM    MARCA.CDMARCA%TYPE;
   V_PRODUTOOL    PRODUTO.CDPRODUTO%TYPE;
   V_IDUTQTDISPGERAL PARASUPRI.IDUTQTDISPGERAL%TYPE;
   V_NRPEDIDOCOL  PEDCOLGERAL.NRPEDIDOCOL%TYPE;

   V_IDCONSOLAPUEFET  APURPRECO.IDCONSOLAPUEFET%TYPE;
   V_EXTRA            AUTOFORNE.IDAUTOFORNEX%TYPE;

   V_VRPERAJFORNFIL  AJUSTEPRFORNFIL.VRPERAJFORNFIL%TYPE;
   V_IDCONSPERPIAJPR  AJUSTEPRFORNFIL.IDCONSPERPIAJPR%TYPE;
   V_PIDSV            FORNECEDOR.VRPERPIFORN%TYPE;
   V_CDFILIOPELOG     FILIAL.CDFILIAL%TYPE;
   V_IDAFOPERLOG      PARASUPRI.IDUTQTDISPGERAL%TYPE;
   V_IDSISDOS         PARAMGERAL.IDSISDOS%TYPE;
   V_NRLOGCORTEOL     LOGCORTEOL.NRLOGCORTEOL%TYPE;
   V_QTEMPENHADA      FLOAT;
   V_IDUTLPRCMPATIVO  PARASUPRI.IDUTLPRCMPATIVO%TYPE;

   V_IDARREDCMPAMENOS PARASUPRI.IDARREDCMPAMENOS%TYPE;
   V_IDQTFRACIONADO   APURPRECO.IDQTFRACIONADO%TYPE;
   V_CONTADOR         FLOAT := 0;
   V_CONTADOR_AUX     VARCHAR2(1);
   V_IDUTLPRARVOLCMP  PARASUPRI.IDUTLPRARVOLCMP%TYPE;
   V_CDPRARVORIG      RELACPRODOL.CDPRARVORIG%TYPE;
   V_IDDESCONSILIMCALCMP   PARASUPRI.IDDESCONSILIMCALCMP%TYPE;
   V_ERRO             VARCHAR2(10);
   TYPE CURTYPE   IS REF CURSOR;
   C_ITEMSOL      CURTYPE;
   V_ITEMSOLI_CDFILSOLI  ITEMSOLI.CDFILSOLI%TYPE;
   V_ITEMSOLI_CDFILLAN   ITEMSOLI.CDFILLAN%TYPE;
   V_ITEMSOLI_NRSOLICMP  ITEMSOLI.NRSOLICMP%TYPE;
   V_ITEMSOLI_CDPRODUTO  ITEMSOLI.CDPRODUTO%TYPE;
   V_ITEMSOLI_DTPROGENTR ITEMSOLI.DTPROGENTR%TYPE;
   V_ITEMSOLI_QTSOLIPROD ITEMSOLI.QTSOLIPROD%TYPE;
   V_ITEMSOLI_VRFATOCONV PRODUTO.VRFATOCONV%TYPE;
   V_CONTA_ITEMSOL       NUMBER;
BEGIN
   INSERT INTO USR_NRSEQAPUR_TMP (NRSEQAPUR) VALUES (P_NRSEQAPUR);
   SELECT
      MAX(IDCONSOLAPUEFET)
   INTO V_IDCONSOLAPUEFET
   FROM APURPRECO
   WHERE CDFILCENTCMP = P_CDCENTCMP
     AND NRAPURPREC = P_NRSEQAPUR;

   IF V_IDCONSOLAPUEFET = 'S' THEN
      V_EXTRA := 'S';
   ELSE
      V_EXTRA := 'N';
   END IF;

   V_QTSOLIPROD := 0;

   V_DSANTERIOR := NULL;

   V_ANTCODIGO       := NULL;
   V_ANTCDFILDEST    := NULL;
   V_ANTCDFILLANC    := NULL;
   V_ANTCDFORNECED   := NULL;
   V_ANTIDTPFORPGTAF := NULL;
   V_ANTCDTIPCOB     := NULL;
   V_ANTIDTIPOEMITAF := NULL;
   V_ANTCDEMPRESA    := NULL;
   V_ANTIDTIPOFRETAF := NULL;
   V_ANTCDFORMPGTO   := NULL;
   V_ANTNRPARCPGTOAF := NULL;
   V_ANTNRDIAPGFIXAF := NULL;
   V_ANTIDUTDIAPGTAF := NULL;
   V_ANTDSPZOPGTCONC := NULL;
   V_ANTCONC_KEY     := NULL;
   V_CONTADOR_AUX    := 'N';

   SELECT
      MAX(IDUTQTDEVOLU),
      MAX(IDUTEMPENHAF),
      NVL(MAX(IDUTILCONSSOLIOL), 'N'),
      MAX(CDMARCA),
      NVL(MAX(IDUTQTDISPGERAL), 'N'),
      NVL(MAX(IDUTLPRCMPATIVO), 'N'),
      NVL(MAX(IDARREDCMPAMENOS), 'N'),
      NVL(MAX(IDUTLPRARVOLCMP), 'N'),
      NVL(MAX(IDDESCONSILIMCALCMP), 'N')
   INTO
      V_IDUTQTDEVOLU,
      V_IDUTEMPENHAF,
      V_IDUTILCONSSOLIOL,
      V_MARCAPADRAO,
      V_IDUTQTDISPGERAL,
      V_IDUTLPRCMPATIVO,
      V_IDARREDCMPAMENOS,  /* Grava quantidade a comprar com valor arredondado para menos */
      V_IDUTLPRARVOLCMP,
      V_IDDESCONSILIMCALCMP  /*Realiza o Cálculo da Necessidade de Compras Desconsiderando o Limite de Segurança e o Calendário de Compras da Filial*/
   FROM
      PARASUPRI
   WHERE
      CDFILIAL = P_CDCENTCMP;

   V_EMPRESA      := NULL;
   V_CDTPCTPAGAR  := NULL;

   SELECT
      MAX(CDEMPRESA),
      MAX(CDTPCTPAGAR)
   INTO
      V_EMPRESA,
      V_CDTPCTPAGAR
   FROM
      COMPRA
   WHERE
      EXISTS (SELECT 1
              FROM ITMAPURPREC
              WHERE ITMAPURPREC.CDCENTITMAP = P_CDCENTCMP AND
                    ITMAPURPREC.NRSEQITMAP  = P_NRSEQAPUR AND
                    ITMAPURPREC.NRCOMPRA    = COMPRA.NRCOMPRA);

   IF V_EMPRESA IS NOT NULL THEN
      V_IDCOMPRA := 'S';
   ELSE
      V_IDCOMPRA := 'N';
   END IF;
   SELECT NVL(MAX(IDSISDOS), '1')
     INTO V_IDSISDOS
     FROM PARAMGERAL;

   SELECT NVL(MAX(NRLOGCORTEOL), 0)
     INTO V_NRLOGCORTEOL
     FROM APURPRECO
    WHERE CDFILCENTCMP = P_CDCENTCMP
      AND NRAPURPREC   = P_NRSEQAPUR;

   IF V_NRLOGCORTEOL <> 0 THEN
      V_IDUTILCONSSOLIOL := 'S';
   END IF;

   IF V_IDARREDCMPAMENOS = 'S' THEN
      UPDATE ITEMAUTF
         SET QTPROGENTAF = CASE FLOOR(QTPROGENTAF)
                              WHEN 0
                              THEN 1
                              ELSE FLOOR(QTPROGENTAF)
                           END
       WHERE EXISTS(SELECT 1
                      FROM AUTOFORNE, APURPRECO, ITMAPURPREC
                     WHERE ITMAPURPREC.CDCENTITMAP     = P_CDCENTCMP
                       AND ITMAPURPREC.NRSEQITMAP      = P_NRSEQAPUR
                       AND ITMAPURPREC.CDCENTITMAP     = APURPRECO.CDFILCENTCMP
                       AND ITMAPURPREC.NRSEQITMAP      = APURPRECO.NRAPURPREC
                       AND AUTOFORNE.CDFILDEST         = ITMAPURPREC.CDFILIAP
                       AND AUTOFORNE.CDFILLANC         = APURPRECO.CDFILLANC
                       AND AUTOFORNE.NRSEQAPURAF       = APURPRECO.NRAPURPREC
                       AND AUTOFORNE.CDOPERADOR        = APURPRECO.CDCOMPRADOR
                       AND AUTOFORNE.CDFORNECED        = ITMAPURPREC.CDFORNITMAP
                       AND ITMAPURPREC.CDFILIAP        = ITEMAUTF.CDFILDEST
                       AND ITMAPURPREC.DTENTRAPUT      = ITEMAUTF.DTPROGENTAF
                       AND ITMAPURPREC.CDPRODITMAP     = ITEMAUTF.CDPRODUTO
                       AND ITMAPURPREC.CDMARCITMAP     = ITEMAUTF.CDMARCA
                       AND APURPRECO.IDQTFRACIONADO    = 'S'
                       AND NVL(AUTOFORNE.IDBAIXAAF, 0) = '6'
                       AND ITEMAUTF.QTPROGENTAF <> FLOOR(ITEMAUTF.QTPROGENTAF));

      SELECT IDQTFRACIONADO
        INTO V_CONTADOR_AUX
        FROM APURPRECO
       WHERE CDFILCENTCMP = P_CDCENTCMP
         AND NRAPURPREC   = P_NRSEQAPUR;
   END IF;

   FOR C_AUTOFORN IN (
      SELECT
         DECODE(FORNECEDOR.IDGERAFDTENT,
                'S', CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD),
                NULL) AS DTENTRAPUT,
         CASE V_IDSISDOS
            WHEN '3'
            THEN CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD)
            ELSE NVL(ITMAPURPREC.DTPROGENTRAP, CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD))
         END AS DTNEWENTAF,
         SUM(QTSOLACOMP) OVER (PARTITION BY CDFORNITMAP,
                                            CDFILIAP,
                                            CDPRODITMAP,
                                            CASE FORNECEDOR.IDGERAFDTENT
                                               WHEN 'S'
                                               THEN CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD)
                                               ELSE NULL
                                            END,
                                            CASE '1'
                                               WHEN '3'
                                               THEN CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD)
                                               ELSE NVL(ITMAPURPREC.DTPROGENTRAP, CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD))
                                            END) QTEMPENHADA,
         ITMAPURPREC.CDMARCITMAP   AS CDMARCA,
         ITMAPURPREC.CDSEGMARCCOL  AS CDSEGMARCA,
         ITMAPURPREC.CDFILIAP      AS CDFILDEST,
         NVL(FILIAL.IDFUNCAOFILI, 'NULL') AS IDFUNCAOFILI,
         P_CDFILLANC               AS CDFILLANC,
         ITMAPURPREC.CDFORNITMAP   AS CDFORNECED,
         ITMAPURPREC.IDTPFORPGTAP,
         FORNECEDOR.CDTIPCOB,
         ITMAPURPREC.DTENTRAPUT    AS DTPROGENTAF,
         ITMAPURPREC.QTSOLACOMP    AS QTSOLIPROD,
         ITMAPURPREC.QTACOMP       AS QTPROGENTAF,
         ITMAPURPREC.VRPRECUNIAP   AS VRPREUNIAF,
         ITMAPURPREC.QTDISPPRODMARC,
         ITMAPURPREC.VRPERDESIAP   AS VRPERDESAF,
         ITMAPURPREC.CDPRODITMAP   AS CDPRODUTO,
         ITMAPURPREC.IDTIPOEMITAP,
         ITMAPURPREC.CDEMPRESAAP   AS CDEMPRESA,
         ITMAPURPREC.IDTIPOFRETAP ,
         ITMAPURPREC.CDFORMPGTOAP  AS CDFORMPGTO,
         ITMAPURPREC.NRPARCPGTOAP,
         ITMAPURPREC.NRDIAPGFIAP   AS NRDIAPGFIXAF,
         ITMAPURPREC.IDULTDIAPGTAF AS IDUTDIAPGTAF,
         ITMAPURPREC.DSPZOPGTCOAP,
         ITMAPURPREC.CONCKEYAP     AS CONC_KEY,
         DECODE(SUBSTR(ITMAPURPREC.CONCKEYAP, -1, 1),
               'X', NULL,
               '2') AS IDAFOPERLOG,
         SUBSTR(ITMAPURPREC.CONCKEYAP, -2, 1) AS IDPRODWEB,
         ITMAPURPREC.CDCENTITMAP,
         ITMAPURPREC.CDREGITMAP,
         PRODUTO.VRFATOCONV,
         PRODUTO.CDARVPROD,
         ITMAPURPREC.IDMOTIVPRESC,
         ITMAPURPREC.NRCOLEITMAP,
         ITMAPURPREC.NRLISTAITMAP,
         FORNECEDOR.IDUTQTDISPFORN,
         ITMAPURPREC.NRCOMPRA
      FROM
         ITMAPURPREC, FORNECEDOR, PRODUTO, FILIAL
      WHERE
         ITMAPURPREC.CDFILIAP     = FILIAL.CDFILIAL       AND
         ITMAPURPREC.CDPRODITMAP  = PRODUTO.CDPRODUTO     AND
         ITMAPURPREC.IDITMSELAPUR = 'S'                   AND
         ITMAPURPREC.CDFORNITMAP  = FORNECEDOR.CDFORNECED AND
         ITMAPURPREC.NRSEQITMAP   = P_NRSEQAPUR           AND
         ITMAPURPREC.CDCENTITMAP  = P_CDCENTCMP
      ORDER BY
         ITMAPURPREC.CDFILIAP,   ITMAPURPREC.CDCENTITMAP,
         ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.IDTPFORPGTAP,
         FORNECEDOR.CDTIPCOB,
         DECODE(FORNECEDOR.IDGERAFDTENT,
                'S',  CARREGA_PERIFORN_FUN(ITMAPURPREC.CDFILIAP, ITMAPURPREC.CDFORNITMAP, ITMAPURPREC.DTENTRAPUT, V_IDDESCONSILIMCALCMP, PRODUTO.CDARVPROD),
                NULL),
         ITMAPURPREC.IDTIPOEMITAP, ITMAPURPREC.CDEMPRESAAP,
         ITMAPURPREC.IDTIPOFRETAP,  ITMAPURPREC.CDFORMPGTOAP,
         ITMAPURPREC.NRPARCPGTOAP, ITMAPURPREC.NRDIAPGFIAP,
         ITMAPURPREC.IDULTDIAPGTAF, ITMAPURPREC.DSPZOPGTCOAP,
         ITMAPURPREC.CONCKEYAP,
         ITMAPURPREC.DTENTRAPUT)
   LOOP

      IF V_IDCOMPRA = 'N' THEN
         V_EMPRESA := C_AUTOFORN.CDEMPRESA;
      END IF;
      V_MARCAITEM   := '';
      V_CDPRARVORIG := NULL;
      IF (V_IDUTILCONSSOLIOL = 'S') AND (C_AUTOFORN.IDFUNCAOFILI = 'O') THEN
         --V_MARCAITEM := V_MARCAPADRAO;
         SELECT
            MAX(CDPRODARVOL)
         INTO
            V_PRODUTOOL
         FROM
            RELACPRODOL
         WHERE RELACPRODOL.CDPRARVORIG = C_AUTOFORN.CDPRODUTO
           AND RELACPRODOL.CDMARCA     = C_AUTOFORN.CDMARCA;

         IF ((V_NRLOGCORTEOL <> 0) AND (V_PRODUTOOL IS NULL)) THEN
            SELECT
               MAX(CDPRODARVOL)
            INTO
               V_PRODUTOOL
            FROM
               RELACPRODOL
            WHERE RELACPRODOL.CDPRARVORIG = C_AUTOFORN.CDPRODUTO
              AND RELACPRODOL.CDMARCA     = V_MARCAPADRAO;
         END IF;

         IF V_PRODUTOOL IS NULL THEN
            V_IDGERAAF := 'N';
         ELSE
            V_IDGERAAF := 'S';
         END IF;
         IF V_IDUTLPRARVOLCMP = 'S' THEN
            SELECT NVL(MAX(RELACPRODOL.CDPRARVORIG), C_AUTOFORN.CDPRODUTO)
              INTO V_CDPRARVORIG
              FROM PRODUTO, RELACPRODOL
             WHERE CDPRODUTO = V_PRODUTOOL
               AND RELACPRODOL.CDPRODARVOL = PRODUTO.CDPRODESTO;
         END IF;
      ELSE
         V_MARCAITEM  := NULL;
         V_IDGERAAF   := 'S';
         V_PRODUTOOL  := NULL;
      END IF;

      IF V_IDGERAAF = 'S' THEN
         V_QTPROGENTAF := C_AUTOFORN.QTPROGENTAF;

         IF V_IDUTEMPENHAF = 'S' THEN
            SELECT
               NVL(MAX(VRARREDEMPMAR), 0)
            INTO
               V_VRARREDEMPE /* Arredondamento Marca por Produto (Prioridade sobre o Fornecedor) */
            FROM
               MARCPROD
            WHERE
               (CDMARCA   = C_AUTOFORN.CDMARCA) AND
               (CDPRODUTO IN (SELECT
                                 P.CDPRODUTO
                              FROM
                                 PRODUTO P
                              WHERE
                                 P.CDPRODUTO = MARCPROD.CDPRODUTO AND
                                 C_AUTOFORN.CDARVPROD LIKE P.CDARVPROD || '%') );

            IF V_VRARREDEMPE = 0 THEN
               SELECT
                  DECODE(MAX(VRARREDEMPE), NULL, 0, MAX(VRARREDEMPE)) INTO V_VRARREDEMPE
               FROM
                  PRODFORNCOMP
               WHERE
                  CDPRODCOMPL = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                  CDFORNECED  = C_AUTOFORN.CDFORNECED;
            END IF;

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

         IF C_AUTOFORN.DTENTRAPUT IS NULL THEN
            V_DSATUAL := C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                         C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                         C_AUTOFORN.CDTIPCOB     || NULL                    ||
                         C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                         C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                         C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                         C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                         C_AUTOFORN.CONC_KEY;
         ELSE
            V_DSATUAL := C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                         C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                         C_AUTOFORN.CDTIPCOB     || C_AUTOFORN.DTENTRAPUT   ||
                         C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                         C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                         C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                         C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                         C_AUTOFORN.CONC_KEY;
         END IF;

         IF V_IDARREDCMPAMENOS = 'S' THEN
            SELECT MAX(C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                       C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                       C_AUTOFORN.CDTIPCOB     || C_AUTOFORN.DTENTRAPUT   ||
                       C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                       C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                       C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                       C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                       C_AUTOFORN.CONC_KEY), MAX(AUTOFORNE.NRAUTOFORN)
              INTO V_DSANTERIOR_AUX, V_CODIGO_AUX
              FROM AUTOFORNE, APURPRECO, ITMAPURPREC, ITEMAUTF
             WHERE APURPRECO.CDFILCENTCMP   = ITMAPURPREC.CDCENTITMAP
               AND APURPRECO.NRAPURPREC     = ITMAPURPREC.NRSEQITMAP
               AND APURPRECO.NRAPURPREC     = AUTOFORNE.NRSEQAPURAF
               AND APURPRECO.CDFILLANC      = AUTOFORNE.CDFILLANC
               AND AUTOFORNE.CDFILDEST      = ITMAPURPREC.CDFILIAP
               AND AUTOFORNE.CDFORNECED     = C_AUTOFORN.CDFORNECED
               AND AUTOFORNE.CDFILDEST      = C_AUTOFORN.CDFILDEST

               AND AUTOFORNE.CDFILDEST      = ITEMAUTF.CDFILDEST
               AND AUTOFORNE.CDFILLANC      = ITEMAUTF.CDFILLANC
               AND AUTOFORNE.NRAUTOFORN     = ITEMAUTF.NRAUTOFORN

               AND C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                   C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                   C_AUTOFORN.CDTIPCOB     || C_AUTOFORN.DTENTRAPUT   ||
                   C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                   C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                   C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                   C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                   C_AUTOFORN.CONC_KEY      = V_DSATUAL
               AND ITMAPURPREC.IDITMSELAPUR = 'S'
               AND APURPRECO.CDFILCENTCMP   = P_CDCENTCMP
               AND APURPRECO.NRAPURPREC     = P_NRSEQAPUR
               AND ITEMAUTF.DTENTRITMSOL    = C_AUTOFORN.DTPROGENTAF;

            IF ((V_DSANTERIOR_AUX IS NOT NULL) AND (V_CODIGO_AUX IS NOT NULL)) THEN
               V_DSANTERIOR := V_DSANTERIOR_AUX;
               V_CODIGO     := V_CODIGO_AUX;
            END IF;
         END IF;

         IF (V_DSATUAL <> V_DSANTERIOR) OR (V_DSANTERIOR IS NULL) THEN
            DBMS_OUTPUT.PUT_LINE('ATUAL = ' ||V_DSATUAL||' ANTERIOR = ' ||V_DSANTERIOR);

            SELECT NVL(MAX(NRITEMAF), 0) INTO V_NRITEMAF
            FROM FORNECEDOR
            WHERE CDFORNECED = C_AUTOFORN.CDFORNECED;

            V_CONT := 1;
            NOVO_CODIGO('AUTOFORNE', V_CODIGO, 1);
            V_CODIGO := SUBSTR(V_CODIGO, 11, 10);

            V_CDFILIOPELOG := '';
            V_IDAFOPERLOG  := '';
            IF NVL(C_AUTOFORN.IDAFOPERLOG, '1') = '2' THEN
               SELECT MAX(P.CDFILIOPELOG) CDFILIOPELOG
                 INTO V_CDFILIOPELOG
                 FROM PARAMPRODSUP P
                WHERE P.CDFILIAL     = C_AUTOFORN.CDFILDEST
                  AND P.CDFILIOPELOG IS NOT NULL
                  AND EXISTS (SELECT 1
                                FROM ITMAPURPREC
                               WHERE ITMAPURPREC.CDPRODITMAP  = P.CDPRODUTO
                                 AND ITMAPURPREC.IDITMSELAPUR = 'S'
                                 AND ITMAPURPREC.CDFORNITMAP  = C_AUTOFORN.CDFORNECED
                                 AND ITMAPURPREC.NRSEQITMAP   = P_NRSEQAPUR
                                 AND ITMAPURPREC.CDCENTITMAP  = P_CDCENTCMP
                                 AND ITMAPURPREC.CDFILIAP     = P.CDFILIAL);
               IF NVL(V_CDFILIOPELOG, 'O') = 'O' THEN
                  V_IDAFOPERLOG := '1';
               ELSE
                  V_IDAFOPERLOG := '2';
               END IF;
            END IF;

            INSERT INTO AUTOFORNE
            (CDFILDEST,    CDFILLANC,    NRAUTOFORN,   CDOPERADOR,   DTAUTOFORN,
             IDTPFORPGTAF, IDTIPOEMITAF, IDTIPOFRETAF, NRPARCPGTOAF, NRDIAPGFIXAF,
             IDUTDIAPGTAF, CDTIPCOB,     CDEMPRESA,    CDFORMPGTO,   CDFORNECED,
             NRSEQAPURAF,  IDAFPRODWEB,  IDAFOPERLOG,  IDTIPOLANCAF, IDBAIXAAF, IDAFCONS, DSCONCKEYAF, CDTPCTPAGAR,
             IDAUTOFORNEX, NRCOMPRAF,    CDFILIOPELOG)
            VALUES
            (C_AUTOFORN.CDFILDEST,    C_AUTOFORN.CDFILLANC,    V_CODIGO,
             P_CDOPERADOR,            P_DTAUTOFORN,            C_AUTOFORN.IDTPFORPGTAP,
             C_AUTOFORN.IDTIPOEMITAP, C_AUTOFORN.IDTIPOFRETAP, C_AUTOFORN.NRPARCPGTOAP,
             C_AUTOFORN.NRDIAPGFIXAF, C_AUTOFORN.IDUTDIAPGTAF, C_AUTOFORN.CDTIPCOB,
             V_EMPRESA,               C_AUTOFORN.CDFORMPGTO,   C_AUTOFORN.CDFORNECED,
             P_NRSEQAPUR,             C_AUTOFORN.IDPRODWEB,    V_IDAFOPERLOG, 'A', '6', 'N', C_AUTOFORN.CONC_KEY, V_CDTPCTPAGAR,
             V_EXTRA,                 C_AUTOFORN.NRCOMPRA,     V_CDFILIOPELOG);
         ELSE
            V_CONT := V_CONT + 1;

            IF (V_CONT > V_NRITEMAF) AND (V_NRITEMAF > 0) THEN

               -- GERAR PARA O ANTERIOR
               V_DSPGTO := V_ANTDSPZOPGTCONC;
               WHILE INSTR(V_DSPGTO, '_') > 0 LOOP
                  V_DIAPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '*')-1);
                  V_DSPGTO  := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '*')+1, LENGTH(V_DSPGTO));

                  V_VRPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '_')-1);
                  V_DSPGTO := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '_')+1, LENGTH(V_DSPGTO));

                  INSERT INTO PRAZOPGTAF
                     (CDFILDEST, CDFILLANC, NRAUTOFORN, NRDIASPGTOAF, VRPERCPGTOAF)
                  VALUES
                      (V_ANTCDFILDEST, V_ANTCDFILLANC, V_ANTCODIGO, V_DIAPGTO, V_VRPGTO);
               END LOOP;

               /* SE ALGUM PRODUTO FOR FRACIONADO, UPDATA A APURAÇÃO PARA HABILITAR O BOTÃO DE APURAR NOVAMENTE */
               IF V_IDARREDCMPAMENOS = 'S' THEN
                  SELECT NVL(MAX('S'), 'N')
                    INTO V_IDQTFRACIONADO
                    FROM AUTOFORNE A, ITEMAUTF I, FILIAL F
                   WHERE I.CDFILDEST   = A.CDFILDEST
                     AND I.CDFILLANC   = A.CDFILLANC
                     AND I.NRAUTOFORN  = A.NRAUTOFORN
                     AND A.CDFILDEST   = F.CDFILIAL
                     AND A.NRSEQAPURAF = P_NRSEQAPUR
                     AND DECODE(F.CDFILCENTCMP, NULL, F.CDFILIAL, F.CDFILCENTCMP) = P_CDCENTCMP
                     AND FLOOR(I.QTPROGENTAF) <> I.QTPROGENTAF;

                  IF V_IDQTFRACIONADO = 'S' THEN
                     V_CONTADOR := V_CONTADOR + 1;
                  END IF;
               END IF;

               -- FECHAMENTO_AF;
               -- GERA-PARCELAS

               UPDATE ITEMAUTF
               SET ITEMAUTF.NRPARCITMAF = (SELECT LPAD(TO_CHAR(COUNT(DISTINCT ITEM.DTPROGENTAF)),2,'0')
                                             FROM ITEMAUTF ITEM
                                            WHERE (ITEM.CDFILDEST   = V_ANTCDFILDEST)
                                              AND (ITEM.CDFILLANC   = V_ANTCDFILLANC)
                                              AND (ITEM.NRAUTOFORN  = V_ANTCODIGO)
                                              AND (ITEM.DTPROGENTAF <= ITEMAUTF.DTPROGENTAF))
               WHERE
                  (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
                  (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
                  (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);
                     --------
               SELECT MIN(CDINSCESTA) INTO V_CDINSCESTA
               FROM INSCRESTAD
               WHERE (CDEMPRESA = V_ANTCDEMPRESA);

               SELECT MIN(DTPROGENTAF) INTO V_DTPROGENTAF
               FROM ITEMAUTF
               WHERE (CDFILDEST  = V_ANTCDFILDEST)  AND
                     (CDFILLANC  = V_ANTCDFILLANC)  AND
                     (NRAUTOFORN = V_ANTCODIGO);

               IMPOSTO_ITEMAF(V_ANTCDEMPRESA,
                              V_CDINSCESTA,
                              V_ANTCDFORNECED,
                              V_ANTCDFILDEST,
                              V_ANTCDFILLANC,
                              V_ANTCODIGO,
                              V_DTPROGENTAF);

               -- qryValor_AF

               SELECT
                  SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF),
                  SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * NVL(ITEMAUTF.VRPERDESAF, 0)) / 100)
                  INTO V_VRPRODUTO, V_VRDESCONTO
               FROM
                  ITEMAUTF
               WHERE
                  (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
                  (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
                  (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);

               SELECT
                  NVL(SUM(IMPITMAF.VRADIMPAF), 0) INTO V_VRIMPOSTO
               FROM
                  IMPITMAF,
                  ITEMAUTF,
                  IMPOSTO
               WHERE
                  (IMPITMAF.CDFILDEST   = V_ANTCDFILDEST)       AND
                  (IMPITMAF.CDFILLANC   = V_ANTCDFILLANC)       AND
                  (IMPITMAF.NRAUTOFORN  = V_ANTCODIGO)          AND
                  (IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST)   AND
                  (IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC)   AND
                  (IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN)  AND
                  (IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO)   AND
                  (IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA)     AND
                  (IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF) AND
                  (IMPITMAF.CDIMPOSTO   = IMPOSTO.CDIMPOSTO)    AND
                   NVL(IMPOSTO.IDACRPRODENTRNF, 'N') = 'N';

               UPDATE AUTOFORNE
               SET VRTOTALAF = V_VRPRODUTO - V_VRDESCONTO + V_VRIMPOSTO
               WHERE
                  (CDFILDEST   = V_ANTCDFILDEST) AND
                  (CDFILLANC   = V_ANTCDFILLANC) AND
                  (NRAUTOFORN  = V_ANTCODIGO);

               NOVO_CODIGO('AUTOFORNE', V_CODIGO, 1);
               V_CODIGO := SUBSTR(V_CODIGO, 11, 10);

               V_CDFILIOPELOG := '';
               V_IDAFOPERLOG  := '';

               IF NVL(C_AUTOFORN.IDAFOPERLOG, '1') = '2' THEN
                  SELECT MAX(P.CDFILIOPELOG) CDFILIOPELOG
                    INTO V_CDFILIOPELOG
                    FROM PARAMPRODSUP P
                   WHERE P.CDFILIAL     = C_AUTOFORN.CDFILDEST
                     AND P.CDFILIOPELOG IS NOT NULL
                     AND EXISTS (SELECT 1
                                   FROM ITMAPURPREC
                                  WHERE ITMAPURPREC.CDPRODITMAP  = P.CDPRODUTO
                                    AND ITMAPURPREC.IDITMSELAPUR = 'S'
                                    AND ITMAPURPREC.CDFORNITMAP  = C_AUTOFORN.CDFORNECED
                                    AND ITMAPURPREC.NRSEQITMAP   = P_NRSEQAPUR
                                    AND ITMAPURPREC.CDCENTITMAP  = P_CDCENTCMP
                                    AND ITMAPURPREC.CDFILIAP     = P.CDFILIAL);
                  IF NVL(V_CDFILIOPELOG, 'O') = 'O' THEN
                     V_IDAFOPERLOG := '1';
                  ELSE
                     V_IDAFOPERLOG := '2';
                  END IF;
               END IF;

               INSERT INTO AUTOFORNE
               (CDFILDEST,    CDFILLANC,    NRAUTOFORN,   CDOPERADOR,   DTAUTOFORN,
                IDTPFORPGTAF, IDTIPOEMITAF, IDTIPOFRETAF, NRPARCPGTOAF, NRDIAPGFIXAF,
                IDUTDIAPGTAF, CDTIPCOB,     CDEMPRESA,    CDFORMPGTO,   CDFORNECED,
                NRSEQAPURAF,  IDAFPRODWEB,  IDAFOPERLOG, IDTIPOLANCAF, IDBAIXAAF, IDAFCONS, DSCONCKEYAF, CDTPCTPAGAR,
                IDAUTOFORNEX, CDFILIOPELOG)
               VALUES
               (C_AUTOFORN.CDFILDEST,    C_AUTOFORN.CDFILLANC,    V_CODIGO,
                P_CDOPERADOR,            P_DTAUTOFORN,            C_AUTOFORN.IDTPFORPGTAP,
                C_AUTOFORN.IDTIPOEMITAP, C_AUTOFORN.IDTIPOFRETAP, C_AUTOFORN.NRPARCPGTOAP,
                C_AUTOFORN.NRDIAPGFIXAF, C_AUTOFORN.IDUTDIAPGTAF, C_AUTOFORN.CDTIPCOB,
                V_EMPRESA,    C_AUTOFORN.CDFORMPGTO,   C_AUTOFORN.CDFORNECED,
                P_NRSEQAPUR,             C_AUTOFORN.IDPRODWEB,    V_IDAFOPERLOG, 'A', '6', 'N',C_AUTOFORN.CONC_KEY, V_CDTPCTPAGAR,
                V_EXTRA, V_CDFILIOPELOG);

                V_CONT := 1;
            END IF;
         END IF;

         V_OBSSOL := '';

         FOR C_OBSERVA IN (SELECT ITEMSOLI.TXOBSITMSOL, ITEMSOLI.NRLOTEESTQ,
                                  ITEMSOLI.NRSUBLOTE, ITEMSOLI.CDPRODPROD,
                                  PRODUTO.NMPRODUTO
                            FROM ITEMSOLI, PRODUTO
                           WHERE
                              (ITEMSOLI.CDFILSOLI  = C_AUTOFORN.CDFILDEST) AND
                              (ITEMSOLI.CDPRODUTO  = C_AUTOFORN.CDPRODUTO) AND
                              (ITEMSOLI.DTPROGENTR = C_AUTOFORN.DTPROGENTAF) AND
                              ITEMSOLI.CDPRODPROD  = PRODUTO.CDPRODUTO(+)) LOOP

            V_OBSSOL := V_OBSSOL || C_OBSERVA.TXOBSITMSOL;
            V_NRLOTEESTQ := C_OBSERVA.NRLOTEESTQ;
            V_NRSUBLOTE  := C_OBSERVA.NRSUBLOTE;
            V_CDPRODPROD := C_OBSERVA.CDPRODPROD;
            V_NMPRODPROD := C_OBSERVA.NMPRODUTO;
         END LOOP;

         IF V_NRLOTEESTQ||V_NRSUBLOTE||V_NMPRODPROD IS NOT NULL THEN/*INFORMAÇÕES DO LOTE NA OBSERVAÇÃO*/
            V_OBSSOL := 'Lote: '||V_NRLOTEESTQ||' SubLote: '||V_NRSUBLOTE||' Produto: '||V_NMPRODPROD||CHR(13)||CHR(10)||V_OBSSOL;
         END IF;

         SELECT COUNT(*), MAX(DTENTRITMSOL) INTO V_COUNT_AUX, V_DTENTRITMSOL
         FROM ITEMAUTF
         WHERE CDFILDEST   = C_AUTOFORN.CDFILDEST                   AND
               CDFILLANC   = C_AUTOFORN.CDFILLANC                   AND
               NRAUTOFORN  = V_CODIGO                               AND
               CDPRODUTO   = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
               ((CDMARCA   = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA))  OR
               (VRPREUNIAF = C_AUTOFORN.VRPREUNIAF))                AND
               DTPROGENTAF = C_AUTOFORN.DTNEWENTAF;

         IF (V_COUNT_AUX = 0) OR (V_IDARREDCMPAMENOS = 'S') THEN
            IF C_AUTOFORN.DTPROGENTAF <> C_AUTOFORN.DTNEWENTAF THEN
               SELECT MIN(VRPRECUNIITM) INTO V_VRPRECUNIITM
               FROM ITEMCOLE
               WHERE
                  CDFILIAL     = C_AUTOFORN.CDCENTITMAP AND
                  CDREGIAO     = C_AUTOFORN.CDREGITMAP AND
                  CDFORNECED   = C_AUTOFORN.CDFORNECED AND
                  CDPRODUTO    = C_AUTOFORN.CDPRODUTO AND
                  CDMARCA      = C_AUTOFORN.CDMARCA AND
                  IDITMLISPREC = DECODE(SUBSTR(C_AUTOFORN.IDMOTIVPRESC,5,1), '1', 'S', IDITMLISPREC) AND
                  C_AUTOFORN.DTNEWENTAF BETWEEN DTINIVALITM AND DTFINVALITM;
               IF NVL(V_VRPRECUNIITM, 0) = 0 THEN
                  V_VRPRECUNIITM := C_AUTOFORN.VRPREUNIAF;
               END IF;
            ELSE
               V_VRPRECUNIITM := C_AUTOFORN.VRPREUNIAF;
            END IF;

            V_VRDESCITMAF  := 0;
            V_VRDESCITMAF  := (V_QTPROGENTAF * V_VRPRECUNIITM * C_AUTOFORN.VRPERDESAF)/100;
            V_QTVOLUITEMSO := 0;

            IF V_IDUTQTDEVOLU = 'S' THEN
               SELECT SUM(QTVOLUITEMSO) INTO V_QTVOLUITEMSO
               FROM ITEMSOLI
               WHERE CDFILSOLI  = C_AUTOFORN.CDFILDEST AND
                     DTPROGENTR = C_AUTOFORN.DTPROGENTAF AND
                     CDPRODUTO  = C_AUTOFORN.CDPRODUTO AND
                     IDITMCONS  = 'N';
            END IF;

            V_VRPERAJFORNFIL := NULL;
            V_IDCONSPERPIAJPR := 'N';

            SELECT
               MAX(VRPERAJFORNFIL),
               MAX(IDCONSPERPIAJPR)
            INTO V_VRPERAJFORNFIL, V_IDCONSPERPIAJPR
            FROM AJUSTEPRFORNFIL
            WHERE AJUSTEPRFORNFIL.CDFORNECED = C_AUTOFORN.CDFORNECED
              AND AJUSTEPRFORNFIL.CDFILIAL = C_AUTOFORN.CDFILDEST
              AND AJUSTEPRFORNFIL.DTINIAJPRFORFIL = (SELECT MAX(A.DTINIAJPRFORFIL)
                                                     FROM AJUSTEPRFORNFIL A
                                                     WHERE A.CDFORNECED = C_AUTOFORN.CDFORNECED
                                                       AND A.CDFILIAL = C_AUTOFORN.CDFILDEST
                                                       AND TRUNC(SYSDATE) BETWEEN A.DTINIAJPRFORFIL AND NVL(A.DTFINAJPRFORFIL, TRUNC(SYSDATE)));

            V_PIDSV := NULL;

            IF V_IDCONSPERPIAJPR = 'S' THEN
               SELECT
                  MAX(VRPERPIPRFO)
               INTO V_PIDSV
               FROM PRODFORNCOMP
               WHERE PRODFORNCOMP.CDFORNECED  = C_AUTOFORN.CDFORNECED
                 AND PRODFORNCOMP.CDPRODCOMPL = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO);

               IF V_PIDSV IS NULL THEN
                  SELECT MAX(VRPERPIFORN)
                  INTO V_PIDSV
                  FROM FORNECEDOR
                  WHERE FORNECEDOR.CDFORNECED = C_AUTOFORN.CDFORNECED;
               END IF;
            END IF;

            IF V_PIDSV IS NULL THEN
               V_PIDSV := 0;
            END IF;
            IF V_VRPERAJFORNFIL IS NULL THEN
               V_VRPERAJFORNFIL := 0;
            END IF;

            V_VRPRECUNIITM := V_VRPRECUNIITM - (V_VRPRECUNIITM * V_PIDSV/100) + (V_VRPRECUNIITM * V_VRPERAJFORNFIL/100);

            INSERT
              INTO ITEMAUTF_CLONE (CDFILDEST,   CDFILLANC,  CDMARCA, CDPRODUTO,
                                   DTPROGENTAF, CDFORNECED, QTPROGENTAF,
                                   NRSEQAPURAF, DTAUTOFORN, NRAUTOFORN, DTNEWENTAF, DTENTRAPUT)
            VALUES (C_AUTOFORN.CDFILDEST, C_AUTOFORN.CDFILLANC, NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA),
                    NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO),
                    C_AUTOFORN.DTPROGENTAF, C_AUTOFORN.CDFORNECED, V_QTPROGENTAF,
                    P_NRSEQAPUR, TRUNC(P_DTAUTOFORN), V_CODIGO, C_AUTOFORN.DTNEWENTAF, C_AUTOFORN.DTNEWENTAF);

            IF V_IDARREDCMPAMENOS = 'N' THEN
               INSERT INTO ITEMAUTF
                  (CDFILDEST,  CDFILLANC,   NRAUTOFORN, CDPRODUTO,
                   CDMARCA,    DTPROGENTAF, CDSEGMARCA, QTPROGENTAF,
                   VRPREUNIAF, VRPERDESAF,  TXOBSITMAF, VRDESCITMAF,
                   NRLOTEESTQ, NRSUBLOTE,   CDPRODPRODAF, DTENTRITMSOL,
                   QTVOLUITEMAF, IDMOTPRESCAF, IDTPLANITEAF, CDFILCOTITAF,
                   NRCOTPREITAF, CDMARCOTITAF, CDREGCOTITAF, CDFORCOTITAF,
                   CDPROCOTITAF, NRLISTAITAF, QTDISPPRODMARC)
               SELECT C_AUTOFORN.CDFILDEST, C_AUTOFORN.CDFILLANC,   V_CODIGO, NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO),
                      NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA),   C_AUTOFORN.DTNEWENTAF, C_AUTOFORN.CDSEGMARCA, V_QTPROGENTAF,
                      V_VRPRECUNIITM, C_AUTOFORN.VRPERDESAF,  V_OBSSOL, V_VRDESCITMAF,
                      V_NRLOTEESTQ, V_NRSUBLOTE, V_CDPRODPROD, C_AUTOFORN.DTPROGENTAF,
                      V_QTVOLUITEMSO, C_AUTOFORN.IDMOTIVPRESC, 'A', C_AUTOFORN.CDCENTITMAP,
                      C_AUTOFORN.NRCOLEITMAP, C_AUTOFORN.CDMARCA, C_AUTOFORN.CDREGITMAP,
                      C_AUTOFORN.CDFORNECED, C_AUTOFORN.CDPRODUTO, C_AUTOFORN.NRLISTAITMAP,
                      C_AUTOFORN.QTDISPPRODMARC

                 FROM DUAL
                WHERE NOT EXISTS (SELECT 1
                                    FROM ITEMAUTF, AUTOFORNE
                                   WHERE ITEMAUTF.CDFILDEST    = AUTOFORNE.CDFILDEST
                                     AND ITEMAUTF.CDFILLANC    = AUTOFORNE.CDFILLANC
                                     AND ITEMAUTF.NRAUTOFORN   = AUTOFORNE.NRAUTOFORN
                                     AND ITEMAUTF.CDFILDEST    = C_AUTOFORN.CDFILDEST
                                     AND ITEMAUTF.CDFILLANC    = C_AUTOFORN.CDFILLANC
                                     AND ITEMAUTF.CDPRODUTO    = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO)
                                     AND ITEMAUTF.CDMARCA      = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)
                                     AND ITEMAUTF.DTPROGENTAF  = C_AUTOFORN.DTNEWENTAF
                                     AND ITEMAUTF.QTPROGENTAF  = V_QTPROGENTAF
                                     AND AUTOFORNE.CDFORNECED  = C_AUTOFORN.CDFORNECED
                                     AND AUTOFORNE.NRSEQAPURAF = P_NRSEQAPUR);
            ELSE
               BEGIN
                  INSERT INTO ITEMAUTF
                     (CDFILDEST,    CDFILLANC,    NRAUTOFORN, CDPRODUTO,
                      CDMARCA,      DTPROGENTAF,  CDSEGMARCA, QTPROGENTAF,
                      VRPREUNIAF,   VRPERDESAF,   TXOBSITMAF, VRDESCITMAF,
                      NRLOTEESTQ,   NRSUBLOTE,    CDPRODPRODAF, DTENTRITMSOL,
                      QTVOLUITEMAF, IDMOTPRESCAF, IDTPLANITEAF, CDFILCOTITAF,
                      NRCOTPREITAF, CDMARCOTITAF, CDREGCOTITAF, CDFORCOTITAF,
                      CDPROCOTITAF, NRLISTAITAF,  QTDISPPRODMARC)
                  SELECT C_AUTOFORN.CDFILDEST,   C_AUTOFORN.CDFILLANC,    V_CODIGO,              NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO),
                         NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA),            C_AUTOFORN.DTNEWENTAF, C_AUTOFORN.CDSEGMARCA, V_QTPROGENTAF,
                         V_VRPRECUNIITM,         C_AUTOFORN.VRPERDESAF,   V_OBSSOL,              V_VRDESCITMAF,
                         V_NRLOTEESTQ,           V_NRSUBLOTE,             V_CDPRODPROD,          C_AUTOFORN.DTPROGENTAF,
                         V_QTVOLUITEMSO,         C_AUTOFORN.IDMOTIVPRESC, 'A',                   C_AUTOFORN.CDCENTITMAP,
                         C_AUTOFORN.NRCOLEITMAP, C_AUTOFORN.CDMARCA,      C_AUTOFORN.CDREGITMAP, C_AUTOFORN.CDFORNECED,
                         C_AUTOFORN.CDPRODUTO,   C_AUTOFORN.NRLISTAITMAP, C_AUTOFORN.QTDISPPRODMARC
                    FROM DUAL
                   WHERE NOT EXISTS (SELECT 1
                                       FROM ITEMAUTF, AUTOFORNE
                                      WHERE ITEMAUTF.CDFILDEST    = AUTOFORNE.CDFILDEST
                                        AND ITEMAUTF.CDFILLANC    = AUTOFORNE.CDFILLANC
                                        AND ITEMAUTF.NRAUTOFORN   = AUTOFORNE.NRAUTOFORN
                                        AND ITEMAUTF.CDFILDEST    = C_AUTOFORN.CDFILDEST
                                        AND ITEMAUTF.CDFILLANC    = C_AUTOFORN.CDFILLANC
                                        AND ITEMAUTF.CDPRODUTO    = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO)
                                        AND ITEMAUTF.CDMARCA      = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)
                                        AND ITEMAUTF.DTPROGENTAF  = C_AUTOFORN.DTNEWENTAF
                                        AND ITEMAUTF.QTPROGENTAF  = V_QTPROGENTAF
                                        AND AUTOFORNE.CDFORNECED  = C_AUTOFORN.CDFORNECED
                                        AND AUTOFORNE.NRSEQAPURAF = P_NRSEQAPUR);
               EXCEPTION
                  WHEN OTHERS THEN BEGIN
                     UPDATE ITEMAUTF
                        SET ITEMAUTF.QTPROGENTAF = ITEMAUTF.QTPROGENTAF + V_QTPROGENTAF
                      WHERE ITEMAUTF.CDFILDEST   = C_AUTOFORN.CDFILDEST
                        AND ITEMAUTF.CDFILLANC   = C_AUTOFORN.CDFILLANC
                        AND ITEMAUTF.NRAUTOFORN  = V_CODIGO
                        AND ITEMAUTF.CDPRODUTO   = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO)
                        AND ITEMAUTF.CDMARCA     = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)
                        AND ITEMAUTF.DTPROGENTAF = C_AUTOFORN.DTNEWENTAF;
                  END;
               END;
            END IF;
            /*Inicio da implementação da solicitação 166404*/
            FOR C_ITEMSOLI IN (SELECT ITEMSOLI.CDFILSOLI, ITEMSOLI.CDFILLAN, ITEMSOLI.NRSOLICMP, ITEMSOLI.CDPRODUTO,
                                      ITEMSOLI.DTPROGENTR, ITEMSOLI.QTSOLIPROD
                                 FROM ITEMSOLI, SOLICITA, PRODUTO, PRODUTO PRODESTO
                                WHERE ITEMSOLI.CDFILSOLI = SOLICITA.CDFILSOLI
                                  AND ITEMSOLI.CDFILLAN  = SOLICITA.CDFILLANCA
                                  AND ITEMSOLI.NRSOLICMP = SOLICITA.NRSOLICMP
                                  AND ITEMSOLI.IDITMCONS  = 'N'
                                  AND ITEMSOLI.CDFILIOPELOG IS NULL
                                  AND ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
                                  AND NVL(ITEMSOLI.QTSOLIPROD, 0) > 0
                                  AND PRODUTO.CDPRODESTO = PRODESTO.CDPRODESTO
                                  AND ITEMSOLI.CDFILSOLI = C_AUTOFORN.CDFILDEST
                                  AND ITEMSOLI.DTPROGENTR = C_AUTOFORN.DTPROGENTAF
                                  AND PRODESTO.CDPRODUTO = C_AUTOFORN.CDPRODUTO
                                  AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
                                  AND ITEMSOLI.IDITMSOLEXTRA = CASE V_EXTRA
                                                                  WHEN 'S'
                                                                  THEN 'S'
                                                                  ELSE ITEMSOLI.IDITMSOLEXTRA
                                                               END
                                  AND NOT EXISTS(SELECT 1
                                                   FROM ITEMSOLIRELACAF
                                                  WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                                                    AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                                                    AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                                                    AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                                                    AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                                                    AND ITEMSOLIRELACAF.QTSOLIPROD   = ITEMSOLI.QTSOLIPROD))
            LOOP
               BEGIN
                  INSERT
                    INTO ITEMSOLIRELACAF(NRITEMSOLIRELACAF, CDFILSOLI, CDFILLAN, NRSOLICMP,
                                          CDPRODUTO, DTPROGENTR, QTSOLIPROD, CDCENTITMAP, NRSEQITMAP,
                                          CDFILDEST, CDFILLANC, NRAUTOFORN, CDMARCAAF, CDPRODUTOAF, DTPROGENTAF)
                  VALUES (SEQ_NRITEMSOLIRELACAF.NEXTVAL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP,
                         C_ITEMSOLI.CDPRODUTO, C_ITEMSOLI.DTPROGENTR, C_ITEMSOLI.QTSOLIPROD, P_CDCENTCMP, P_NRSEQAPUR,
                         C_AUTOFORN.CDFILDEST, C_AUTOFORN.CDFILLANC, V_CODIGO, NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA),
                         NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO), C_AUTOFORN.DTNEWENTAF);
               EXCEPTION
                  WHEN OTHERS THEN BEGIN
                     V_ERRO := SUBSTR(SQLERRM(SQLCODE), 1,10);
                  END;
               END;
            END LOOP;
            /*Fim da implementação da solicitação 166404*/
            V_NRPEDIDOCOL := NULL;

            SELECT MAX(NRPEDIDOCOL)
            INTO V_NRPEDIDOCOL
            FROM ITEMCOLE
            WHERE ITEMCOLE.CDFILIAL    = C_AUTOFORN.CDCENTITMAP
              AND ITEMCOLE.NRCOLEPRECO = C_AUTOFORN.NRCOLEITMAP
              AND ITEMCOLE.CDMARCA     = C_AUTOFORN.CDMARCA
              AND ITEMCOLE.CDREGIAO    = C_AUTOFORN.CDREGITMAP
              AND ITEMCOLE.CDFORNECED  = C_AUTOFORN.CDFORNECED
              AND ITEMCOLE.CDPRODUTO   = C_AUTOFORN.CDPRODUTO;

            IF V_NRPEDIDOCOL IS NOT NULL THEN
               IF V_IDUTQTDISPGERAL = 'S' AND C_AUTOFORN.IDUTQTDISPFORN = 'S' THEN
                  UPDATE PRMARCPEDCOL
                  SET QTDISPPRODMARC = DECODE(QTDISPPRODMARC - V_QTPROGENTAF,
                                              ABS(QTDISPPRODMARC - V_QTPROGENTAF),
                                              QTDISPPRODMARC - V_QTPROGENTAF,
                                              0)
                  WHERE PRMARCPEDCOL.CDFILIAL       = C_AUTOFORN.CDCENTITMAP
                    AND PRMARCPEDCOL.NRPEDIDOCOL    = V_NRPEDIDOCOL
                    AND PRMARCPEDCOL.CDPRODUTO      = C_AUTOFORN.CDPRODUTO
                    AND PRMARCPEDCOL.CDMARCA        = C_AUTOFORN.CDMARCA
                    AND PRMARCPEDCOL.QTDISPPRODMARC IS NOT NULL;
               END IF;
            END IF;
         ELSE
            V_NRPEDIDOCOL := NULL;
            SELECT MAX(NRPEDIDOCOL)
            INTO V_NRPEDIDOCOL
            FROM ITEMCOLE
            WHERE ITEMCOLE.CDFILIAL    = C_AUTOFORN.CDCENTITMAP
              AND ITEMCOLE.NRCOLEPRECO = C_AUTOFORN.NRCOLEITMAP
              AND ITEMCOLE.CDMARCA     = C_AUTOFORN.CDMARCA
              AND ITEMCOLE.CDREGIAO    = C_AUTOFORN.CDREGITMAP
              AND ITEMCOLE.CDFORNECED  = C_AUTOFORN.CDFORNECED
              AND ITEMCOLE.CDPRODUTO   = C_AUTOFORN.CDPRODUTO;

            IF V_NRPEDIDOCOL IS NOT NULL THEN
               IF V_IDUTQTDISPGERAL = 'S' AND C_AUTOFORN.IDUTQTDISPFORN = 'S' THEN
                  UPDATE PRMARCPEDCOL
                  SET QTDISPPRODMARC = DECODE(QTDISPPRODMARC - V_QTPROGENTAF,
                                              ABS(QTDISPPRODMARC - V_QTPROGENTAF),
                                              QTDISPPRODMARC - V_QTPROGENTAF,
                                              0)
                  WHERE PRMARCPEDCOL.CDFILIAL       = C_AUTOFORN.CDCENTITMAP
                    AND PRMARCPEDCOL.NRPEDIDOCOL    = V_NRPEDIDOCOL
                    AND PRMARCPEDCOL.CDPRODUTO      = C_AUTOFORN.CDPRODUTO
                    AND PRMARCPEDCOL.CDMARCA        = C_AUTOFORN.CDMARCA
                    AND PRMARCPEDCOL.QTDISPPRODMARC IS NOT NULL;
               END IF;
            END IF;
            /*Inicio da implementação da solicitação 166404*/
            FOR C_ITEMSOLI IN (SELECT ITEMSOLI.CDFILSOLI, ITEMSOLI.CDFILLAN, ITEMSOLI.NRSOLICMP, ITEMSOLI.CDPRODUTO,
                                      ITEMSOLI.DTPROGENTR, ITEMSOLI.QTSOLIPROD
                                 FROM ITEMSOLI, SOLICITA, PRODUTO, PRODUTO PRODESTO
                                WHERE ITEMSOLI.CDFILSOLI = SOLICITA.CDFILSOLI
                                  AND ITEMSOLI.CDFILLAN  = SOLICITA.CDFILLANCA
                                  AND ITEMSOLI.NRSOLICMP = SOLICITA.NRSOLICMP
                                  AND ITEMSOLI.IDITMCONS  = 'N'
                                  AND ITEMSOLI.CDFILIOPELOG IS NULL
                                  AND ITEMSOLI.CDPRODUTO = PRODUTO.CDPRODUTO
                                  AND NVL(ITEMSOLI.QTSOLIPROD, 0) > 0
                                  AND PRODUTO.CDPRODESTO = PRODESTO.CDPRODESTO
                                  AND ITEMSOLI.CDFILSOLI = C_AUTOFORN.CDFILDEST
                                  AND ITEMSOLI.DTPROGENTR = C_AUTOFORN.DTPROGENTAF
                                  AND PRODESTO.CDPRODUTO = C_AUTOFORN.CDPRODUTO
                                  AND NVL(ITEMSOLI.IDSOLIAPROV,'S') = 'S'
                                  AND ITEMSOLI.IDITMSOLEXTRA = CASE V_EXTRA
                                                                  WHEN 'S'
                                                                  THEN 'S'
                                                                  ELSE ITEMSOLI.IDITMSOLEXTRA
                                                               END
                                  AND NOT EXISTS(SELECT 1
                                                   FROM ITEMSOLIRELACAF
                                                  WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                                                    AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                                                    AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                                                    AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                                                    AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                                                    AND ITEMSOLIRELACAF.QTSOLIPROD   = ITEMSOLI.QTSOLIPROD))
            LOOP
               BEGIN
                  INSERT
                    INTO ITEMSOLIRELACAF(NRITEMSOLIRELACAF, CDFILSOLI, CDFILLAN, NRSOLICMP,
                                          CDPRODUTO, DTPROGENTR, QTSOLIPROD, CDCENTITMAP, NRSEQITMAP,
                                          CDFILDEST, CDFILLANC, NRAUTOFORN, CDMARCAAF, CDPRODUTOAF, DTPROGENTAF)
                  VALUES (SEQ_NRITEMSOLIRELACAF.NEXTVAL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP,
                         C_ITEMSOLI.CDPRODUTO, C_ITEMSOLI.DTPROGENTR, C_ITEMSOLI.QTSOLIPROD, P_CDCENTCMP, P_NRSEQAPUR,
                         C_AUTOFORN.CDFILDEST, C_AUTOFORN.CDFILLANC, V_CODIGO, NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA),
                         NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO), C_AUTOFORN.DTNEWENTAF);
               EXCEPTION
                  WHEN OTHERS THEN BEGIN
                     V_ERRO := SUBSTR(SQLERRM(SQLCODE), 1,10);
                  END;
               END;
            END LOOP;
            /*Fim da implementação da solicitação 166404*/
            IF C_AUTOFORN.DTPROGENTAF <> V_DTENTRITMSOL THEN
              /* Solicitação de Compras da Entrega não antecipada */
              /*Executa a consulta considerando a implementação da solicitação 166404*/
              SELECT
                MAX(ITEMSOLI.NRSOLICMP||ITEMSOLI.CDFILLAN||ITEMSOLI.CDPRODUTO) INTO V_NRSOLCOMP
              FROM
                ITEMSOLI,
                PRODUTO PRODSOLI,
                PRODUTO
              WHERE
                ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                ITEMSOLI.DTPROGENTR  = C_AUTOFORN.DTPROGENTAF AND
                PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                          WHEN 'O'
                                          THEN CASE V_IDUTLPRCMPATIVO
                                                  WHEN 'S'
                                                  THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                  ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                               END
                                          ELSE ITEMSOLI.CDPRODUTO
                                       END                    AND
              EXISTS (SELECT 1
                        FROM ITEMSOLIRELACAF
                       WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                         AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                         AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                         AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                         AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                         AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                         AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPUR);
              /*Executa a consulta desconsiderando a implementação da solicitação 166404*/
              IF V_NRSOLCOMP IS NULL THEN
                 /* Solicitação de Compras da Entrega não antecipada */
                 SELECT
                   MAX(ITEMSOLI.NRSOLICMP||ITEMSOLI.CDFILLAN||ITEMSOLI.CDPRODUTO) INTO V_NRSOLCOMP
                 FROM
                   ITEMSOLI,
                   PRODUTO PRODSOLI,
                   PRODUTO
                 WHERE
                   ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                   ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                   ITEMSOLI.DTPROGENTR  = C_AUTOFORN.DTPROGENTAF AND
                   PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                   PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                   ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                             WHEN 'O'
                                             THEN CASE V_IDUTLPRCMPATIVO
                                                     WHEN 'S'
                                                     THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                     ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                                  END
                                             ELSE ITEMSOLI.CDPRODUTO
                                          END AND
                   ITEMSOLI.IDITMCONS  = 'N'  AND
                   ITEMSOLI.CDFILIOPELOG IS NULL;
              END IF;
              /*Executa a consulta considerando a implementação da solicitação 166404*/
              SELECT NVL(MAX(QTSOLIPROD),0) INTO V_ANTQTSOLIPROD
              FROM ITEMSOLI
              WHERE
                CDFILSOLI  = C_AUTOFORN.CDFILDEST           AND
                CDFILLAN   = SUBSTR(V_NRSOLCOMP, 11, 4)  AND
                NRSOLICMP  = SUBSTR(V_NRSOLCOMP, 1, 10)  AND
                CDPRODUTO  = SUBSTR(V_NRSOLCOMP, 15, 10) AND
                DTPROGENTR = C_AUTOFORN.DTPROGENTAF         AND
                EXISTS (SELECT 1
                        FROM ITEMSOLIRELACAF
                       WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                         AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                         AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                         AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                         AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                         AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                         AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPUR);
              /*Executa a consulta desconsiderando a implementação da solicitação 166404*/
              IF V_ANTQTSOLIPROD = 0 THEN
                 SELECT NVL(MAX(QTSOLIPROD),0) INTO V_ANTQTSOLIPROD
                 FROM ITEMSOLI
                 WHERE
                   CDFILSOLI  = C_AUTOFORN.CDFILDEST           AND
                   CDFILLAN   = SUBSTR(V_NRSOLCOMP, 11, 4)  AND
                   NRSOLICMP  = SUBSTR(V_NRSOLCOMP, 1, 10)  AND
                   CDPRODUTO  = SUBSTR(V_NRSOLCOMP, 15, 10) AND
                   DTPROGENTR = C_AUTOFORN.DTPROGENTAF;
              END IF;
              /*Executa a consulta considerando a implementação da solicitação 166404*/
              SELECT
                MAX(ITEMSOLI.NRSOLICMP||ITEMSOLI.CDFILLAN||ITEMSOLI.CDPRODUTO) INTO V_NRSOLCOMP
              FROM
                ITEMSOLI,
                PRODUTO PRODSOLI,
                PRODUTO
              WHERE
                ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                ITEMSOLI.DTPROGENTR  = V_DTENTRITMSOL         AND
                PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                          WHEN 'O'
                                          THEN CASE V_IDUTLPRCMPATIVO
                                                  WHEN 'S'
                                                  THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                  ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                               END
                                          ELSE ITEMSOLI.CDPRODUTO
                                       END AND
              EXISTS (SELECT 1
                        FROM ITEMSOLIRELACAF
                       WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                         AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                         AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                         AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                         AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                         AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                         AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPUR);
              /*Executa a consulta desconsiderando a implementação da solicitação 166404*/
              IF V_NRSOLCOMP IS NULL THEN
                 SELECT
                   MAX(ITEMSOLI.NRSOLICMP||ITEMSOLI.CDFILLAN||ITEMSOLI.CDPRODUTO) INTO V_NRSOLCOMP
                 FROM
                   ITEMSOLI,
                   PRODUTO PRODSOLI,
                   PRODUTO
                 WHERE
                   ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                   ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                   ITEMSOLI.DTPROGENTR  = V_DTENTRITMSOL         AND
                   PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                   PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                   ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                             WHEN 'O'
                                             THEN CASE V_IDUTLPRCMPATIVO
                                                     WHEN 'S'
                                                     THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                     ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                                  END
                                             ELSE ITEMSOLI.CDPRODUTO
                                          END AND
                   ITEMSOLI.IDITMCONS  = 'N'  AND
                   ITEMSOLI.CDFILIOPELOG IS NULL;
              END IF;

              /* Log de Alteração */
              INSERT INTO MOVOPSOL
               (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV,
                CDPRODUTO, DTENTROPER, DTOPERSOL,
                CDOPERADOR, QTANTOPER, QTDEPOPER,
                DSJUSTOPER)
              SELECT
                ITEMSOLI.CDFILSOLI, ITEMSOLI.CDFILLAN, ITEMSOLI.NRSOLICMP,
                ITEMSOLI.CDPRODUTO, V_DTENTRITMSOL, SYSDATE,
                P_CDOPERADOR, ITEMSOLI.QTSOLIPROD, ITEMSOLI.QTSOLIPROD + V_ANTQTSOLIPROD,
                'Ef.AF -Entr. Antecipada de '||C_AUTOFORN.DTPROGENTAF
              FROM
                ITEMSOLI
              WHERE
                ITEMSOLI.CDFILSOLI  = C_AUTOFORN.CDFILDEST AND
                ITEMSOLI.CDFILLAN   = SUBSTR(V_NRSOLCOMP, 11, 4)  AND
                ITEMSOLI.NRSOLICMP  = SUBSTR(V_NRSOLCOMP, 1, 10)  AND
                ITEMSOLI.CDPRODUTO  = SUBSTR(V_NRSOLCOMP, 15, 10) AND
                ITEMSOLI.DTPROGENTR = V_DTENTRITMSOL;

              V_DTAUX := SYSDATE;
              WHILE V_DTAUX = SYSDATE LOOP
                 V_DTAUX := V_DTAUX;
              END LOOP;

              UPDATE ITEMSOLI
              SET QTSOLIPROD = QTSOLIPROD + V_ANTQTSOLIPROD
              WHERE
                CDFILSOLI  = C_AUTOFORN.CDFILDEST           AND
                CDFILLAN   = SUBSTR(V_NRSOLCOMP, 11, 4)  AND
                NRSOLICMP  = SUBSTR(V_NRSOLCOMP, 1, 10)  AND
                CDPRODUTO  = SUBSTR(V_NRSOLCOMP, 15, 10) AND
                DTPROGENTR = V_DTENTRITMSOL;

              UPDATE ITEMSOLIRELACAF
              SET QTSOLIPROD = QTSOLIPROD + V_ANTQTSOLIPROD
              WHERE
                CDFILSOLI  = C_AUTOFORN.CDFILDEST           AND
                CDFILLAN   = SUBSTR(V_NRSOLCOMP, 11, 4)  AND
                NRSOLICMP  = SUBSTR(V_NRSOLCOMP, 1, 10)  AND
                CDPRODUTO  = SUBSTR(V_NRSOLCOMP, 15, 10) AND
                DTPROGENTR = V_DTENTRITMSOL              AND
                CDCENTITMAP= P_CDCENTCMP                 AND
                NRSEQITMAP = P_NRSEQAPUR                 AND
                CDFILDEST  = C_AUTOFORN.CDFILDEST        AND
                CDFILLANC  = C_AUTOFORN.CDFILLANC        AND
                NRAUTOFORN = V_CODIGO                    AND
                CDMARCAAF  = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)  AND
                CDPRODUTOAF= NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                DTPROGENTAF= C_AUTOFORN.DTNEWENTAF;

              V_QTSOLIPROD := 0;

              /* Retirar quantidade da antiga solicitação */
              /*Inicio da implementação da solicitação 166404*/
              SELECT
                  COUNT(1)
                INTO
                  V_CONTA_ITEMSOL
                FROM
                  ITEMSOLI,
                  PRODUTO PRODSOLI,
                  PRODUTO
                WHERE
                  ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                  ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                  ITEMSOLI.DTPROGENTR  = C_AUTOFORN.DTPROGENTAF AND
                  PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                  PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                  ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                            WHEN 'O'
                                            THEN CASE V_IDUTLPRCMPATIVO
                                                    WHEN 'S'
                                                    THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                    ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                                 END
                                            ELSE ITEMSOLI.CDPRODUTO
                                         END AND
                  EXISTS (SELECT 1
                        FROM ITEMSOLIRELACAF
                       WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                         AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                         AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                         AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                         AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                         AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                         AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPUR);
              /*O cursor executa desconsiderando a implementação da solicitação 166404*/
              IF V_CONTA_ITEMSOL = 0  THEN
                 OPEN C_ITEMSOL FOR
                   SELECT
                     ITEMSOLI.CDFILSOLI,
                     ITEMSOLI.CDFILLAN,
                     ITEMSOLI.NRSOLICMP,
                     ITEMSOLI.CDPRODUTO,
                     ITEMSOLI.DTPROGENTR,
                     ITEMSOLI.QTSOLIPROD,
                     PRODSOLI.VRFATOCONV
                   FROM
                     ITEMSOLI,
                     PRODUTO PRODSOLI,
                     PRODUTO
                   WHERE
                     ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                     ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                     ITEMSOLI.DTPROGENTR  = C_AUTOFORN.DTPROGENTAF AND
                     PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                     PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                     ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                               WHEN 'O'
                                               THEN CASE V_IDUTLPRCMPATIVO
                                                       WHEN 'S'
                                                       THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                       ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                                    END
                                               ELSE ITEMSOLI.CDPRODUTO
                                            END;
              ELSE
                 OPEN C_ITEMSOL FOR
                   SELECT
                     ITEMSOLI.CDFILSOLI,
                     ITEMSOLI.CDFILLAN,
                     ITEMSOLI.NRSOLICMP,
                     ITEMSOLI.CDPRODUTO,
                     ITEMSOLI.DTPROGENTR,
                     ITEMSOLI.QTSOLIPROD,
                     PRODSOLI.VRFATOCONV
                   FROM
                     ITEMSOLI,
                     PRODUTO PRODSOLI,
                     PRODUTO
                   WHERE
                     ITEMSOLI.CDPRODUTO   = PRODSOLI.CDPRODUTO     AND
                     ITEMSOLI.CDFILSOLI   = C_AUTOFORN.CDFILDEST   AND
                     ITEMSOLI.DTPROGENTR  = C_AUTOFORN.DTPROGENTAF AND
                     PRODUTO.CDPRODUTO    = C_AUTOFORN.CDPRODUTO   AND
                     PRODSOLI.CDPRODESTO  = PRODUTO.CDPRODESTO     AND
                     ITEMSOLI.CDPRODUTO   = CASE C_AUTOFORN.IDFUNCAOFILI
                                               WHEN 'O'
                                               THEN CASE V_IDUTLPRCMPATIVO
                                                       WHEN 'S'
                                                       THEN NVL(V_CDPRARVORIG, ITEMSOLI.CDPRODUTO)
                                                       ELSE NVL(V_CDPRARVORIG, C_AUTOFORN.CDPRODUTO)
                                                    END
                                               ELSE ITEMSOLI.CDPRODUTO
                                            END AND
                     EXISTS (SELECT 1
                           FROM ITEMSOLIRELACAF
                          WHERE ITEMSOLIRELACAF.CDFILSOLI    = ITEMSOLI.CDFILSOLI
                            AND ITEMSOLIRELACAF.CDFILLAN     = ITEMSOLI.CDFILLAN
                            AND ITEMSOLIRELACAF.NRSOLICMP    = ITEMSOLI.NRSOLICMP
                            AND ITEMSOLIRELACAF.CDPRODUTO    = ITEMSOLI.CDPRODUTO
                            AND ITEMSOLIRELACAF.DTPROGENTR   = ITEMSOLI.DTPROGENTR
                            AND ITEMSOLIRELACAF.CDCENTITMAP  = P_CDCENTCMP
                            AND ITEMSOLIRELACAF.NRSEQITMAP   = P_NRSEQAPUR);
                 /*Fim da implementação da solicitação 166404*/
              END IF;
              LOOP
                 FETCH C_ITEMSOL INTO V_ITEMSOLI_CDFILSOLI,
                                      V_ITEMSOLI_CDFILLAN,
                                      V_ITEMSOLI_NRSOLICMP,
                                      V_ITEMSOLI_CDPRODUTO,
                                      V_ITEMSOLI_DTPROGENTR,
                                      V_ITEMSOLI_QTSOLIPROD,
                                      V_ITEMSOLI_VRFATOCONV;
                EXIT WHEN C_ITEMSOL%NOTFOUND;
                IF V_QTSOLIPROD = 0 THEN
                  V_QTSOLIPROD := V_ANTQTSOLIPROD - V_ITEMSOLI_QTSOLIPROD;
                ELSE
                  V_QTSOLIPROD := V_QTSOLIPROD - V_ITEMSOLI_QTSOLIPROD;
                END IF;
                IF V_QTSOLIPROD >= 0 THEN
                   DELETE FROM ITEMSOLI
                   WHERE
                     CDFILSOLI  = V_ITEMSOLI_CDFILSOLI  AND
                     CDFILLAN   = V_ITEMSOLI_CDFILLAN   AND
                     NRSOLICMP  = V_ITEMSOLI_NRSOLICMP  AND
                     CDPRODUTO  = V_ITEMSOLI_CDPRODUTO  AND
                     DTPROGENTR = V_ITEMSOLI_DTPROGENTR;

                   /* LOG DE ALTERAÇÃO */
                   INSERT INTO MOVOPSOL
                    (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV,
                     CDPRODUTO, DTENTROPER, DTOPERSOL,
                     CDOPERADOR, QTANTOPER, QTDEPOPER,
                     DSJUSTOPER)
                   VALUES
                    (V_ITEMSOLI_CDFILSOLI, V_ITEMSOLI_CDFILLAN, V_ITEMSOLI_NRSOLICMP,
                     V_ITEMSOLI_CDPRODUTO, V_ITEMSOLI_DTPROGENTR, SYSDATE,
                     P_CDOPERADOR, V_ITEMSOLI_QTSOLIPROD, 0,
                    'EF.AF -ENTR. ANTECIPADA P/ '||V_DTENTRITMSOL);

                   V_DTAUX := SYSDATE;
                   WHILE V_DTAUX = SYSDATE LOOP
                      V_DTAUX := V_DTAUX;
                   END LOOP;

                   IF V_QTSOLIPROD = 0 THEN
                      EXIT;
                   END IF;
                ELSE
                   IF V_QTSOLIPROD < 0 THEN
                     UPDATE ITEMSOLI
                     SET
                       QTSOLIPROD = ABS(V_QTSOLIPROD)
                     WHERE
                       CDFILSOLI  = V_ITEMSOLI_CDFILSOLI  AND
                       CDFILLAN   = V_ITEMSOLI_CDFILLAN   AND
                       NRSOLICMP  = V_ITEMSOLI_NRSOLICMP  AND
                       CDPRODUTO  = V_ITEMSOLI_CDPRODUTO  AND
                       DTPROGENTR = V_ITEMSOLI_DTPROGENTR;

                     UPDATE ITEMSOLIRELACAF
                     SET
                       QTSOLIPROD = ABS(V_QTSOLIPROD)
                     WHERE
                       CDFILSOLI  = V_ITEMSOLI_CDFILSOLI  AND
                       CDFILLAN   = V_ITEMSOLI_CDFILLAN   AND
                       NRSOLICMP  = V_ITEMSOLI_NRSOLICMP  AND
                       CDPRODUTO  = V_ITEMSOLI_CDPRODUTO  AND
                       DTPROGENTR = V_ITEMSOLI_DTPROGENTR AND
                       CDCENTITMAP= P_CDCENTCMP                 AND
                       NRSEQITMAP = P_NRSEQAPUR                 AND
                       CDFILDEST  = C_AUTOFORN.CDFILDEST        AND
                       CDFILLANC  = C_AUTOFORN.CDFILLANC        AND
                       NRAUTOFORN = V_CODIGO                    AND
                       CDMARCAAF  = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)  AND
                       CDPRODUTOAF= NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                       DTPROGENTAF= C_AUTOFORN.DTNEWENTAF;
                       
                     /* LOG DE ALTERAÇÃO */
                     INSERT INTO MOVOPSOL
                      (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV,
                       CDPRODUTO, DTENTROPER, DTOPERSOL,
                       CDOPERADOR, QTANTOPER, QTDEPOPER,
                       DSJUSTOPER)
                     VALUES
                      (V_ITEMSOLI_CDFILSOLI, V_ITEMSOLI_CDFILLAN, V_ITEMSOLI_NRSOLICMP,
                       V_ITEMSOLI_CDPRODUTO, V_ITEMSOLI_DTPROGENTR, SYSDATE,
                       P_CDOPERADOR, V_ITEMSOLI_QTSOLIPROD, ABS(V_QTSOLIPROD),
                      'EF.AF -ENTR. ANTECIPADA P/ '||V_DTENTRITMSOL);

                     V_DTAUX := SYSDATE;
                     WHILE V_DTAUX = SYSDATE LOOP
                        V_DTAUX := V_DTAUX;
                     END LOOP;

                     EXIT;
                   END IF;
                END IF;
              END LOOP;
              IF V_IDUTEMPENHAF = 'S' THEN
                 SELECT
                    NVL(MAX(VRARREDEMPMAR), 0)
                  INTO
                     V_VRARREDEMPE /* Arredondamento Marca por Produto (Prioridade sobre o Fornecedor) */
                  FROM
                     MARCPROD
                  WHERE
                     (CDMARCA   = C_AUTOFORN.CDMARCA) AND
                     (CDPRODUTO IN (SELECT
                                       P.CDPRODUTO
                                    FROM
                                       PRODUTO P
                                    WHERE
                                       P.CDPRODUTO = MARCPROD.CDPRODUTO AND
                                       C_AUTOFORN.CDARVPROD LIKE P.CDARVPROD || '%') );
                 IF V_VRARREDEMPE = 0 THEN
                    SELECT
                       DECODE(MAX(VRARREDEMPE), NULL, 0, MAX(VRARREDEMPE)) INTO V_VRARREDEMPE
                    FROM
                       PRODFORNCOMP
                    WHERE
                       CDPRODCOMPL = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                       CDFORNECED  = C_AUTOFORN.CDFORNECED;
                  END IF;
                  IF (MOD(V_QTPROGENTAF, V_VRARREDEMPE) <> 0) AND V_VRARREDEMPE > 0 THEN
                     V_QTPROGENTAF := CEIL(V_QTPROGENTAF / V_VRARREDEMPE) * V_VRARREDEMPE;
                  END IF;
              END IF;
              V_QTEMPENHADA := 0;
              IF V_IDUTEMPENHAF = 'S' THEN
                 IF (MOD(C_AUTOFORN.QTEMPENHADA, V_VRARREDEMPE) <> 0) AND V_VRARREDEMPE > 0 THEN
                    V_QTEMPENHADA := NVL(CEIL(C_AUTOFORN.QTEMPENHADA / V_VRARREDEMPE) * V_VRARREDEMPE, 0);
                 END IF;
              END IF;
              IF V_QTEMPENHADA = 0 THEN
              /* E O UPDATE NA ITEMAUTF QUE TEM NO ANTES DESSE IF*/
              /*ALTERAÇÃO PARA ALIBRAS QUANDO FORNECEDOR TEM PERIODICIDADE E ARREDONDAMENTO DE EMPENHO
                MAIOR QUE 1 E O SISTEMA COMPRA PARA MAIS OU PARA MENNOS DO QUE DESEJA DO NO PERIODO*/
                 UPDATE ITEMAUTF
                    SET QTPROGENTAF   = QTPROGENTAF + V_QTPROGENTAF
                  WHERE CDFILDEST     = C_AUTOFORN.CDFILDEST                   AND
                        CDFILLANC     = C_AUTOFORN.CDFILLANC                   AND
                        NRAUTOFORN    = V_CODIGO                               AND
                        CDPRODUTO     = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                        CDMARCA       = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)   AND
                        DTPROGENTAF   = C_AUTOFORN.DTNEWENTAF;
              ELSE
                 UPDATE ITEMAUTF
                    SET QTPROGENTAF   = QTPROGENTAF + V_QTPROGENTAF
                  WHERE CDFILDEST     = C_AUTOFORN.CDFILDEST                   AND
                        CDFILLANC     = C_AUTOFORN.CDFILLANC                   AND
                        NRAUTOFORN    = V_CODIGO                               AND
                        CDPRODUTO     = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                        CDMARCA       = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)   AND
                        DTPROGENTAF   = C_AUTOFORN.DTNEWENTAF                  AND
                        (QTPROGENTAF + V_QTPROGENTAF) <= V_QTEMPENHADA;
                 IF SQL%NOTFOUND THEN
                    UPDATE ITEMAUTF
                       SET QTPROGENTAF   = V_QTEMPENHADA
                     WHERE CDFILDEST     = C_AUTOFORN.CDFILDEST                   AND
                           CDFILLANC     = C_AUTOFORN.CDFILLANC                   AND
                           NRAUTOFORN    = V_CODIGO                               AND
                           CDPRODUTO     = NVL(V_PRODUTOOL, C_AUTOFORN.CDPRODUTO) AND
                           CDMARCA       = NVL(V_MARCAITEM, C_AUTOFORN.CDMARCA)   AND
                           DTPROGENTAF   = C_AUTOFORN.DTNEWENTAF                  AND
                           QTPROGENTAF   < V_QTEMPENHADA;
                 END IF;
              END IF;
            END IF;
         END IF;

         IF (V_DSATUAL <> V_DSANTERIOR) AND (NOT V_DSANTERIOR IS NULL) THEN
            V_DSPGTO := V_ANTDSPZOPGTCONC;
            WHILE INSTR(V_DSPGTO, '_') > 0 LOOP
               V_DIAPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '*')-1);
               V_DSPGTO  := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '*')+1, LENGTH(V_DSPGTO));

               V_VRPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '_')-1);
               V_DSPGTO := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '_')+1, LENGTH(V_DSPGTO));

               INSERT INTO PRAZOPGTAF
                  (CDFILDEST, CDFILLANC, NRAUTOFORN, NRDIASPGTOAF, VRPERCPGTOAF)
               VALUES
                   (V_ANTCDFILDEST, V_ANTCDFILLANC, V_ANTCODIGO, V_DIAPGTO, V_VRPGTO);
            END LOOP;

            /* SE ALGUM PRODUTO FOR FRACIONADO, UPDATA A APURAÇÃO PARA HABILITAR O BOTÃO DE APURAR NOVAMENTE */
            IF V_IDARREDCMPAMENOS = 'S' THEN
               SELECT NVL(MAX('S'), 'N')
                 INTO V_IDQTFRACIONADO
                 FROM AUTOFORNE A, ITEMAUTF I, FILIAL F
                WHERE I.CDFILDEST   = A.CDFILDEST
                  AND I.CDFILLANC   = A.CDFILLANC
                  AND I.NRAUTOFORN  = A.NRAUTOFORN
                  AND A.CDFILDEST   = F.CDFILIAL
                  AND A.NRSEQAPURAF = P_NRSEQAPUR
                  AND DECODE(F.CDFILCENTCMP, NULL, F.CDFILIAL, F.CDFILCENTCMP) = P_CDCENTCMP
                  AND FLOOR(I.QTPROGENTAF) <> I.QTPROGENTAF;

               IF V_IDQTFRACIONADO = 'S' THEN
                  V_CONTADOR := V_CONTADOR + 1;
               END IF;
            END IF;

            -- FECHAMENTO_AF;
            -- GERA-PARCELAS

            UPDATE ITEMAUTF
               SET ITEMAUTF.NRPARCITMAF = (SELECT LPAD(TO_CHAR(COUNT(DISTINCT ITEM.DTPROGENTAF)),2,'0')
                                             FROM ITEMAUTF ITEM
                                            WHERE (ITEM.CDFILDEST   = V_ANTCDFILDEST)
                                              AND (ITEM.CDFILLANC   = V_ANTCDFILLANC)
                                              AND (ITEM.NRAUTOFORN  = V_ANTCODIGO)
                                              AND (ITEM.DTPROGENTAF <= ITEMAUTF.DTPROGENTAF))
            WHERE
               (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
               (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
               (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);
                  --------
            SELECT MIN(CDINSCESTA) INTO V_CDINSCESTA
            FROM INSCRESTAD
            WHERE (CDEMPRESA = V_ANTCDEMPRESA);

            SELECT MIN(DTPROGENTAF) INTO V_DTPROGENTAF
            FROM ITEMAUTF
            WHERE (CDFILDEST  = V_ANTCDFILDEST)  AND
                  (CDFILLANC  = V_ANTCDFILLANC)  AND
                  (NRAUTOFORN = V_ANTCODIGO);

            IMPOSTO_ITEMAF(V_ANTCDEMPRESA,
                           V_CDINSCESTA,
                           V_ANTCDFORNECED,
                           V_ANTCDFILDEST,
                           V_ANTCDFILLANC,
                           V_ANTCODIGO,
                           V_DTPROGENTAF);

            -- qryValor_AF

            SELECT
               SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF),
               SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * NVL(ITEMAUTF.VRPERDESAF, 0)) / 100)
               INTO V_VRPRODUTO, V_VRDESCONTO
            FROM
               ITEMAUTF
            WHERE
               (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
               (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
               (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);

            SELECT
               NVL(SUM(IMPITMAF.VRADIMPAF), 0) INTO V_VRIMPOSTO
            FROM
               IMPITMAF,
               ITEMAUTF,
               IMPOSTO
            WHERE
               (IMPITMAF.CDFILDEST   = V_ANTCDFILDEST)       AND
               (IMPITMAF.CDFILLANC   = V_ANTCDFILLANC)       AND
               (IMPITMAF.NRAUTOFORN  = V_ANTCODIGO)          AND
               (IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST)   AND
               (IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC)   AND
               (IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN)  AND
               (IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO)   AND
               (IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA)     AND
               (IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF) AND
               (IMPITMAF.CDIMPOSTO   = IMPOSTO.CDIMPOSTO)    AND
                NVL(IMPOSTO.IDACRPRODENTRNF, 'N') = 'N';

            UPDATE AUTOFORNE
            SET VRTOTALAF = V_VRPRODUTO - V_VRDESCONTO + V_VRIMPOSTO
            WHERE
               (CDFILDEST   = V_ANTCDFILDEST) AND
               (CDFILLANC   = V_ANTCDFILLANC) AND
               (NRAUTOFORN  = V_ANTCODIGO);
         END IF;

            -- qryLimite_AF
            -- qryConsAF

         IF C_AUTOFORN.DTENTRAPUT IS NULL THEN
            V_DSANTERIOR := C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                            C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                            C_AUTOFORN.CDTIPCOB     || NULL                    ||
                            C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                            C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                            C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                            C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                            C_AUTOFORN.CONC_KEY;
         ELSE
            V_DSANTERIOR := C_AUTOFORN.CDFILDEST    || C_AUTOFORN.CDFILLANC    ||
                            C_AUTOFORN.CDFORNECED   || C_AUTOFORN.IDTPFORPGTAP ||
                            C_AUTOFORN.CDTIPCOB     || C_AUTOFORN.DTENTRAPUT   ||
                            C_AUTOFORN.IDTIPOEMITAP || V_EMPRESA               ||
                            C_AUTOFORN.IDTIPOFRETAP || C_AUTOFORN.CDFORMPGTO   ||
                            C_AUTOFORN.NRPARCPGTOAP || C_AUTOFORN.NRDIAPGFIXAF ||
                            C_AUTOFORN.IDUTDIAPGTAF || C_AUTOFORN.DSPZOPGTCOAP ||
                            C_AUTOFORN.CONC_KEY;
         END IF;

       --  DBMS_OUTPUT.PUT_LINE('CONC_KEY = '||C_AUTOFORN.CONC_KEY);

         V_ANTCODIGO       := V_CODIGO;
         V_ANTCDFILDEST    := C_AUTOFORN.CDFILDEST;
         V_ANTCDFILLANC    := C_AUTOFORN.CDFILLANC;
         V_ANTCDFORNECED   := C_AUTOFORN.CDFORNECED;
         V_ANTIDTPFORPGTAF := C_AUTOFORN.IDTPFORPGTAP;
         V_ANTCDTIPCOB     := C_AUTOFORN.CDTIPCOB;
         V_ANTIDTIPOEMITAF := C_AUTOFORN.IDTIPOEMITAP;
         V_ANTCDEMPRESA    := V_EMPRESA;
         V_ANTIDTIPOFRETAF := C_AUTOFORN.IDTIPOFRETAP;
         V_ANTCDFORMPGTO   := C_AUTOFORN.CDFORMPGTO;
         V_ANTNRPARCPGTOAF := C_AUTOFORN.NRPARCPGTOAP;
         V_ANTNRDIAPGFIXAF := C_AUTOFORN.NRDIAPGFIXAF;
         V_ANTIDUTDIAPGTAF := C_AUTOFORN.IDUTDIAPGTAF;
         V_ANTDSPZOPGTCONC := C_AUTOFORN.DSPZOPGTCOAP;
         V_ANTCONC_KEY     := C_AUTOFORN.CONC_KEY;
      END IF;

   END LOOP;

   -- GERAR PARA O ULTIMO ITEM

   V_DSPGTO := V_ANTDSPZOPGTCONC;

   WHILE INSTR(V_DSPGTO, '_') > 0 LOOP
      V_DIAPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '*')-1);
      V_DSPGTO  := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '*')+1, LENGTH(V_DSPGTO));

      V_VRPGTO := SUBSTR(V_DSPGTO, 1, INSTR(V_DSPGTO, '_')-1);
      V_DSPGTO := SUBSTR(V_DSPGTO, INSTR(V_DSPGTO, '_')+1, LENGTH(V_DSPGTO));

      INSERT INTO PRAZOPGTAF
         (CDFILDEST, CDFILLANC, NRAUTOFORN, NRDIASPGTOAF, VRPERCPGTOAF)
      (SELECT V_ANTCDFILDEST, V_ANTCDFILLANC, V_ANTCODIGO, V_DIAPGTO, V_VRPGTO
         FROM DUAL
        WHERE NOT EXISTS (SELECT 1
                            FROM PRAZOPGTAF
                           WHERE CDFILDEST    = V_ANTCDFILDEST
                             AND CDFILLANC    = V_ANTCDFILLANC
                             AND NRAUTOFORN   = V_ANTCODIGO
                             AND NRDIASPGTOAF = V_DIAPGTO));
   END LOOP;

   /* SE ALGUM PRODUTO FOR FRACIONADO, UPDATA A APURAÇÃO PARA HABILITAR O BOTÃO DE APURAR NOVAMENTE */
   IF V_IDARREDCMPAMENOS = 'S' THEN
      SELECT NVL(MAX('S'), 'N')
        INTO V_IDQTFRACIONADO
        FROM AUTOFORNE A, ITEMAUTF I, FILIAL F
       WHERE I.CDFILDEST   = A.CDFILDEST
         AND I.CDFILLANC   = A.CDFILLANC
         AND I.NRAUTOFORN  = A.NRAUTOFORN
         AND A.CDFILDEST   = F.CDFILIAL
         AND A.NRSEQAPURAF = P_NRSEQAPUR
         AND DECODE(F.CDFILCENTCMP, NULL, F.CDFILIAL, F.CDFILCENTCMP) = P_CDCENTCMP
         AND FLOOR(I.QTPROGENTAF) <> I.QTPROGENTAF;

      IF V_IDQTFRACIONADO = 'S' THEN
         V_CONTADOR := V_CONTADOR + 1;
      END IF;
   END IF;

   -- FECHAMENTO_AF;
   -- GERA-PARCELAS

   UPDATE ITEMAUTF
      SET ITEMAUTF.NRPARCITMAF = (SELECT LPAD(TO_CHAR(COUNT(DISTINCT ITEM.DTPROGENTAF)),2,'0')
                                    FROM ITEMAUTF ITEM
                                   WHERE (ITEM.CDFILDEST   = V_ANTCDFILDEST)
                                     AND (ITEM.CDFILLANC   = V_ANTCDFILLANC)
                                     AND (ITEM.NRAUTOFORN  = V_ANTCODIGO)
                                     AND (ITEM.DTPROGENTAF <= ITEMAUTF.DTPROGENTAF))
   WHERE
      (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
      (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
      (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);

   SELECT MIN(CDINSCESTA) INTO V_CDINSCESTA
   FROM INSCRESTAD
   WHERE (CDEMPRESA = V_ANTCDEMPRESA);

   SELECT MIN(DTPROGENTAF) INTO V_DTPROGENTAF
   FROM ITEMAUTF
   WHERE (CDFILDEST  = V_ANTCDFILDEST)  AND
         (CDFILLANC  = V_ANTCDFILLANC)  AND
         (NRAUTOFORN = V_ANTCODIGO);

   IMPOSTO_ITEMAF(V_ANTCDEMPRESA,
                  V_CDINSCESTA,
                  V_ANTCDFORNECED,
                  V_ANTCDFILDEST,
                  V_ANTCDFILLANC,
                  V_ANTCODIGO,
                  V_DTPROGENTAF);

   -- qryValor_AF

   SELECT
      SUM(ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF),
      SUM((ITEMAUTF.QTPROGENTAF * ITEMAUTF.VRPREUNIAF * NVL(ITEMAUTF.VRPERDESAF, 0)) / 100)
      INTO V_VRPRODUTO, V_VRDESCONTO
   FROM
      ITEMAUTF
   WHERE
      (ITEMAUTF.CDFILDEST  = V_ANTCDFILDEST) AND
      (ITEMAUTF.CDFILLANC  = V_ANTCDFILLANC) AND
      (ITEMAUTF.NRAUTOFORN = V_ANTCODIGO);

   SELECT
      NVL(SUM(IMPITMAF.VRADIMPAF), 0) INTO V_VRIMPOSTO
   FROM
      IMPITMAF,
      ITEMAUTF,
      IMPOSTO
   WHERE
      (IMPITMAF.CDFILDEST   = V_ANTCDFILDEST)       AND
      (IMPITMAF.CDFILLANC   = V_ANTCDFILLANC)       AND
      (IMPITMAF.NRAUTOFORN  = V_ANTCODIGO)          AND
      (IMPITMAF.CDFILDEST   = ITEMAUTF.CDFILDEST)   AND
      (IMPITMAF.CDFILLANC   = ITEMAUTF.CDFILLANC)   AND
      (IMPITMAF.NRAUTOFORN  = ITEMAUTF.NRAUTOFORN)  AND
      (IMPITMAF.CDPRODUTO   = ITEMAUTF.CDPRODUTO)   AND
      (IMPITMAF.CDMARCA     = ITEMAUTF.CDMARCA)     AND
      (IMPITMAF.DTPROGENTAF = ITEMAUTF.DTPROGENTAF) AND
      (IMPITMAF.CDIMPOSTO   = IMPOSTO.CDIMPOSTO)    AND
       NVL(IMPOSTO.IDACRPRODENTRNF, 'N') = 'N';

   UPDATE AUTOFORNE
   SET VRTOTALAF = V_VRPRODUTO - V_VRDESCONTO + V_VRIMPOSTO
   WHERE
      (CDFILDEST   = V_ANTCDFILDEST) AND
      (CDFILLANC   = V_ANTCDFILLANC) AND
      (NRAUTOFORN  = V_ANTCODIGO);

   /* SE ALGUM PRODUTO FOR FRACIONADO, UPDATA A APURAÇÃO PARA HABILITAR O BOTÃO DE APURAR NOVAMENTE */
   IF V_IDARREDCMPAMENOS = 'S' THEN
      IF V_CONTADOR_AUX = 'S' THEN
         UPDATE APURPRECO
            SET IDQTFRACIONADO = 'N'
          WHERE APURPRECO.CDFILCENTCMP = P_CDCENTCMP
            AND APURPRECO.NRAPURPREC   = P_NRSEQAPUR;
      ELSE
         IF V_CONTADOR = 0 THEN
            UPDATE APURPRECO
               SET IDQTFRACIONADO = 'N'
             WHERE APURPRECO.CDFILCENTCMP = P_CDCENTCMP
               AND APURPRECO.NRAPURPREC   = P_NRSEQAPUR;
         ELSE
            UPDATE APURPRECO
               SET IDQTFRACIONADO = 'S'
             WHERE APURPRECO.CDFILCENTCMP = P_CDCENTCMP
               AND APURPRECO.NRAPURPREC   = P_NRSEQAPUR;
         END IF;
      END IF;
   END IF;

   UPDATE APURPRECO
      SET CDCOMPRADOR = P_CDOPERADOR
    WHERE APURPRECO.CDFILCENTCMP = P_CDCENTCMP
      AND APURPRECO.NRAPURPREC   = P_NRSEQAPUR
      AND CDCOMPRADOR IS NULL;

   DELETE FROM USR_NRSEQAPUR_TMP
    WHERE NRSEQAPUR = P_NRSEQAPUR;
END;