CREATE OR REPLACE
PROCEDURE VERIFICA_CONS_OL(
    P_CDFILIOPELOG            IN  ITEMSOLI.CDFILIOPELOG%TYPE,
    P_DTINICIAL               IN  DATE,
    P_DTFINAL                 IN  DATE,
    P_CDPRODINI               IN  PRODUTO.CDARVPROD%TYPE,
    P_CDPRODFIN               IN  PRODUTO.CDARVPROD%TYPE,
    P_CDGRUPPROD              IN  VARCHAR2 DEFAULT NULL,
    P_CDSUBGRUPO              IN  VARCHAR2 DEFAULT NULL,
    P_CDGRUPFILI              IN  GRUPFILI.CDGRUPFILI%TYPE,
    P_ROWSAFFECT              OUT VARCHAR2,
    P_EXTRA                   IN  VARCHAR2 DEFAULT 'T',
    P_IDPRIORIZA              IN  VARCHAR2 DEFAULT NULL)
IS
   V_CDPRODINI         VARCHAR2(20);
   V_CDPRODFIN         VARCHAR2(20);
   V_CDFILSOLI         ITEMSOLI.CDFILSOLI%TYPE := 'X';
   V_PARAMPRODSUP      PARAMPRODSUP.CDPRODUTO%TYPE;
   V_N_PARAMPRODSUP    PARAMGERAL.CDFILIAL%TYPE;
   V_IDUTLMARPREFOL    PARASUPRI.IDUTLMARPREFOL%TYPE;
   V_IDUTPRODPREF      PARCMPSUP.IDUTPRODPREF%TYPE;
   V_CDGRUPPROD        PARASUPRI.CDGRUPPROD%TYPE;
   V_CDSUBGRARVOR      PARASUPRI.CDSUBGRARVOR%TYPE;
   V_CDPRODARVOL       RELACPRODOL.CDPRODARVOL%TYPE;
   V_CDPRODFILI        PRODFILI.CDPRODUTO%TYPE;
   V_CDPRODPERI        PRODUTO.CDARVPROD%TYPE;
   V_CDPRODPATIVO      PRODUTO.CDARVPROD%TYPE;
   V_NRSEQUCONSOL      CONSSOLOL.NRSEQUCONSOL%TYPE;
   V_CDMARCA           VARCHAR2(10);
   V_IDUTLPRARVOLCMP   PARASUPRI.IDUTLPRARVOLCMP%TYPE;
   V_CDPRARVOLCMPATV   PRODUTO.CDPRODUTO%TYPE;
   V_IDEMBCONSPRECONECOL PARASUPRI.IDEMBCONSPRECONECOL%TYPE;
   V_ITEMCOLE          NUMBER;
   V_NRDIASEG          NUMBER;
   V_NOVADATA          ITEMSOLI.DTPROGENTR%TYPE;
   V_DTMESENTREGA      ITEMSOLI.DTPROGENTR%TYPE;
   V_CDPERIENTR        PERFILPROD.CDPERIENTR%TYPE;
   V_DTPROGENTR        ITEMSOLI.DTPROGENTR%TYPE;
   V_CDFORNOPELOG      FILIAL.CDFORNOPELOG%TYPE;
   V_IDUTEMPENCONSOL   PARASUPRI.IDUTEMPENCONSOL%TYPE;
   V_VRARREDEMPE       PRODFORNCOMP.VRARREDEMPE%TYPE;
   V_VRARREDEMPPR      PRODUTO.VRARREDEMPPR%TYPE;
   V_CDTIPPART         PARTFILI.CDTIPPART%TYPE;
   V_COUNTPROD         FLOAT;

BEGIN
   P_ROWSAFFECT := 'S';
   V_CDPRODINI  := P_CDPRODINI;
   V_CDPRODFIN  := RPAD(P_CDPRODFIN, 20, 'Z');
   DELETE
     FROM VERIFCONSSOLOL
    WHERE CDFILIOPELOG = P_CDFILIOPELOG
      AND DTINICIAL    >= P_DTINICIAL
      AND DTFINAL      <= P_DTFINAL
      AND CDPRODINI   >= P_CDPRODINI
      AND CDPRODFIN   <= V_CDPRODFIN;
   SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(MAX(NRSEQUCONSOL), '0'))+1), 10, '0')
     INTO V_NRSEQUCONSOL
     FROM CONSSOLOL;
   FOR C_ITEMSOLI IN(SELECT
                        ITEMSOLI.NRSEQUCONSOL,
                        ITEMSOLI.NRSOLICMP,
                        ITEMSOLI.CDFILSOLI,
                        ITEMSOLI.CDFILLAN,
                        PRODESTO.CDPRODUTO,
                        PRODESTO.CDARVPROD,
                        ITEMSOLI.DTPROGENTR,
                        NVL(ITEMSOLI.IDSOLIAPROV, 'S') IDSOLIAPROV,
                        NVL(ITEMSOLI.IDITMCONS, 'N') IDITMCONS,
                        NVL(ITEMSOLI.CDFILIOPELOG, 'XXXX') CDFILIOPELOG,
                        NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL) CDFILCENTCMP
                     FROM ITEMSOLI, PRODUTO, PRODUTO PRODESTO, FILIAL
                     WHERE PRODUTO.CDPRODUTO      = ITEMSOLI.CDPRODUTO
                       AND PRODUTO.CDPRODESTO     = PRODESTO.CDPRODUTO
                       AND ITEMSOLI.CDFILSOLI     = FILIAL.CDFILIAL
                       AND ITEMSOLI.DTPROGENTR BETWEEN P_DTINICIAL AND P_DTFINAL
                       AND PRODESTO.CDARVPROD  BETWEEN V_CDPRODINI AND V_CDPRODFIN
                       AND ((P_CDSUBGRUPO IS NULL)  OR  (EXISTS(SELECT 1
                                                                  FROM PRSUBGRPROD
                                                                 WHERE PRSUBGRPROD.CDGRUPPROD  = P_CDGRUPPROD
                                                                   AND INSTR(P_CDSUBGRUPO, PRSUBGRPROD.CDSUBGRPROD) > 0
                                                                   AND PRSUBGRPROD.CDFILISUBGR = 'P'
                                                                   AND PRSUBGRPROD.CDPRODUTO   = PRODESTO.CDPRODUTO)))
                       AND ITEMSOLI.CDFILSOLI <> P_CDFILIOPELOG
                       AND NVL(ITEMSOLI.CDFILIOPELOG, 'W') = P_CDFILIOPELOG
                       AND NOT EXISTS(SELECT 1
                                        FROM ITEMCONSSOLOL, PRODUTO
                                       WHERE ITEMCONSSOLOL.NRSEQUCONSOL  = ITEMSOLI.NRSEQUCONSOL
                                         AND ITEMCONSSOLOL.CDFILSOLI     = ITEMSOLI.CDFILSOLI
                                         AND ITEMCONSSOLOL.CDFILLAN      = ITEMSOLI.CDFILLAN
                                         AND ITEMCONSSOLOL.CDPRODUTO     = PRODUTO.CDPRODUTO
                                         AND PRODUTO.CDPRODESTO          = ITEMSOLI.CDPRODUTO
                                         AND ITEMCONSSOLOL.DTENTRCONSOL  = ITEMSOLI.DTPROGENTR)
                       AND ((P_CDGRUPFILI IS NULL)
                        OR (EXISTS (SELECT 1
                                      FROM FILGRUPFILI
                                     WHERE FILGRUPFILI.CDGRUPFILI  = P_CDGRUPFILI
                                       AND FILGRUPFILI.CDFILIAL    = ITEMSOLI.CDFILSOLI)))
                       AND ((NVL(ITEMSOLI.IDITMSOLEXTRA, 'N') = NVL(P_EXTRA, 'T'))  OR (NVL(P_EXTRA, 'T') = 'T'))
                     ORDER BY
                        ITEMSOLI.CDFILSOLI,
                        PRODESTO.CDPRODUTO,
                        ITEMSOLI.DTPROGENTR)
   LOOP
      V_CDFILSOLI       := NULL;
      V_PARAMPRODSUP    := NULL;
      V_N_PARAMPRODSUP  := NULL;
      V_CDPRODFILI      := NULL;
      V_CDPRODARVOL     := NULL;
      V_CDPRODPERI      := NULL;
      V_CDPRODPATIVO    := NULL;
      V_CDPRARVOLCMPATV := NULL;
      
      IF NVL(V_CDFILSOLI, '¿¿¿¿') <> C_ITEMSOLI.CDFILSOLI THEN
         V_CDFILSOLI         := C_ITEMSOLI.CDFILSOLI;
         V_IDUTLMARPREFOL    := NULL;
         V_IDUTPRODPREF      := NULL;
         V_CDGRUPPROD        := NULL;
         V_CDSUBGRARVOR      := NULL;
         SELECT NVL(MAX(IDUTLMARPREFOL), 'N'),
                MAX(PARASUPRI.CDGRUPPROD),
                MAX(PARASUPRI.CDSUBGRARVOR),
                NVL(MAX(PARASUPRI.CDMARCA), 'N'),
                NVL(MAX(IDUTLPRARVOLCMP), 'N'),
                NVL(MAX(IDEMBCONSPRECONECOL), 'N'),
                NVL(MAX(IDUTEMPENCONSOL), 'N')
           INTO V_IDUTLMARPREFOL,
                V_CDGRUPPROD,
                V_CDSUBGRARVOR,
                V_CDMARCA,
                V_IDUTLPRARVOLCMP,
                V_IDEMBCONSPRECONECOL,
                V_IDUTEMPENCONSOL
           FROM PARASUPRI
          WHERE PARASUPRI.CDFILIAL  = C_ITEMSOLI.CDFILCENTCMP;
         SELECT NVL(MAX(IDUTPRODPREF), 'N')
           INTO V_IDUTPRODPREF
           FROM PARCMPSUP
          WHERE CDFILIAL           = V_CDFILSOLI;
         IF V_IDUTEMPENCONSOL = 'S' THEN
            SELECT MAX(CDFORNOPELOG) 
              INTO V_CDFORNOPELOG 
              FROM FILIAL 
             WHERE FILIAL.CDFILIAL = P_CDFILIOPELOG;
         END IF; 
      END IF;
      IF C_ITEMSOLI.CDFILIOPELOG = P_CDFILIOPELOG THEN
         
         IF C_ITEMSOLI.IDSOLIAPROV = 'N' THEN
            INSERT
              INTO VERIFCONSSOLOL
                   (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
              SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '1', P_CDFILIOPELOG
                FROM DUAL
               WHERE NOT EXISTS(SELECT 1
                                  FROM VERIFCONSSOLOL V
                                 WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                   AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                   AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                   AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                   AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                   AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                   AND V.IDVERIFCONSOL = '1');
            P_ROWSAFFECT := 'N';
         END IF;
         
         IF C_ITEMSOLI.IDITMCONS = 'S' THEN
            INSERT
              INTO VERIFCONSSOLOL
                   (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
              SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '2', P_CDFILIOPELOG
                FROM DUAL
               WHERE NOT EXISTS(SELECT 1
                                  FROM VERIFCONSSOLOL V
                                 WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                   AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                   AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                   AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                   AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                   AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                   AND V.IDVERIFCONSOL = '2');
            P_ROWSAFFECT := 'N';
         END IF;
         IF (LENGTH(C_ITEMSOLI.CDFILIOPELOG) > 0) THEN
            
            SELECT NVL(MAX(PRODUTO.CDPRODUTO), 'N')
              INTO V_PARAMPRODSUP
              FROM PARAMPRODSUP, PRODUTO
             WHERE PARAMPRODSUP.CDFILIOPELOG = C_ITEMSOLI.CDFILIOPELOG
               AND PARAMPRODSUP.CDFILIAL     = C_ITEMSOLI.CDFILSOLI
               AND PRODUTO.CDPRODESTO        = C_ITEMSOLI.CDPRODUTO
               AND PARAMPRODSUP.CDPRODUTO    = PRODUTO.CDPRODESTO
               AND PARAMPRODSUP.NRCOLEPRECO  IS NULL
               AND PARAMPRODSUP.CDFILIOPELOG IS NOT NULL
               AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
               AND NVL(PARAMPRODSUP.CDFILISUBGR, 'X') = 'P';
            IF V_PARAMPRODSUP = 'N' THEN
               INSERT
                 INTO VERIFCONSSOLOL
                      (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                      DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
                 SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                       C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '3', P_CDFILIOPELOG
                   FROM DUAL
                  WHERE NOT EXISTS(SELECT 1
                                     FROM VERIFCONSSOLOL V
                                    WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                      AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                      AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                      AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                      AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                      AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                      AND V.IDVERIFCONSOL = '3');
               P_ROWSAFFECT := 'N';
            END IF;
            
            SELECT NVL(MAX(PRODFILI.CDPRODUTO), 'N')
              INTO V_CDPRODFILI
              FROM PRODFILI, PRODUTO
             WHERE PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
               AND PRODFILI.CDFILIAL  = C_ITEMSOLI.CDFILIOPELOG
               AND PRODFILI.CDPRODUTO = PRODUTO.CDPRODUTO
               AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
               AND NVL(PRODFILI.IDPRODATIV, 'X')  = 'A';
            IF V_CDPRODFILI = 'N' THEN
               INSERT
                 INTO VERIFCONSSOLOL
                      (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                      DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
                 SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                       C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '4', P_CDFILIOPELOG
                   FROM DUAL
                  WHERE NOT EXISTS(SELECT 1
                                     FROM VERIFCONSSOLOL V
                                    WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                      AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                      AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                      AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                      AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                      AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                      AND V.IDVERIFCONSOL = '4');
               P_ROWSAFFECT := 'N';
            END IF;
         ELSE
            
            SELECT NVL(MAX(PARAMGERAL.CDFILIAL), 'N')
              INTO V_N_PARAMPRODSUP
              FROM PARAMGERAL
             WHERE EXISTS (SELECT 1
                             FROM PARAMPRODSUP
                            WHERE PARAMPRODSUP.CDFILIAL     = C_ITEMSOLI.CDFILSOLI
                              AND PARAMPRODSUP.CDFILIOPELOG = C_ITEMSOLI.CDFILIOPELOG
                              AND PARAMPRODSUP.CDGRUPPROD   = V_CDGRUPPROD
                              AND PARAMPRODSUP.CDSUBGRPROD  = V_CDSUBGRARVOR
                              AND PARAMPRODSUP.NRCOLEPRECO  IS NULL
                              AND PARAMPRODSUP.CDFILIOPELOG IS NOT NULL
                              AND NVL(PARAMPRODSUP.CDFILISUBGR, 'X') = 'P');
            IF V_N_PARAMPRODSUP = 'N' THEN
               INSERT
                 INTO VERIFCONSSOLOL
                      (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                      DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
                 SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                       C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '5', P_CDFILIOPELOG
                   FROM DUAL
                  WHERE NOT EXISTS(SELECT 1
                                     FROM VERIFCONSSOLOL V
                                    WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                      AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                      AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                      AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                      AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                      AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                      AND V.IDVERIFCONSOL = '5');
               P_ROWSAFFECT := 'N';
            END IF;
         END IF;
      END IF;
      
      SELECT NVL(MAX(RELACPRODOL.CDPRODARVOL), 'N')
        INTO V_CDPRODARVOL
        FROM RELACPRODOL, PRODUTO
       WHERE RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
         AND PRODUTO.CDPRODESTO      = C_ITEMSOLI.CDPRODUTO
         AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S';
      IF V_CDPRODARVOL = 'N' THEN
         INSERT
           INTO VERIFCONSSOLOL
                (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
           SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                 C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '6', P_CDFILIOPELOG
             FROM DUAL
            WHERE NOT EXISTS(SELECT 1
                               FROM VERIFCONSSOLOL V
                              WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                AND V.IDVERIFCONSOL = '6');
         P_ROWSAFFECT := 'N';
      END IF;
      
      SELECT NVL(MAX(B.CDARVPROD), 'N')
        INTO V_CDPRODPERI
        FROM PERFILPROD A, PRODUTO B
       WHERE A.CDPRODUTO = B.CDPRODUTO
         AND  A.CDFILIAL  = P_CDFILIOPELOG
         AND  INSTR(C_ITEMSOLI.CDARVPROD, B.CDARVPROD) = 1;
      IF V_CDPRODPERI = 'N' THEN
         INSERT
           INTO VERIFCONSSOLOL
                (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
           SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                 C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '7', P_CDFILIOPELOG
             FROM DUAL
            WHERE NOT EXISTS(SELECT 1
                               FROM VERIFCONSSOLOL V
                              WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                AND V.IDVERIFCONSOL = '7');
         P_ROWSAFFECT := 'N';
      END IF;
      
      SELECT NVL(MAX(CDARVPROD), 'N')
        INTO V_CDPRODPATIVO
        FROM PRODUTO
       WHERE CDPRODESTO = C_ITEMSOLI.CDPRODUTO
         AND NVL(IDPRCMPATIVO, 'N') = 'S';
      IF V_CDPRODPATIVO = 'N' THEN
         INSERT
           INTO VERIFCONSSOLOL
                (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
           SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                 C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '8', P_CDFILIOPELOG
             FROM DUAL
            WHERE NOT EXISTS(SELECT 1
                               FROM VERIFCONSSOLOL V
                              WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                AND V.IDVERIFCONSOL = '8');
         P_ROWSAFFECT := 'N';
      END IF;
      
      IF V_CDMARCA <> 'N' THEN
         SELECT NVL(MAX(RELACPRODOL.CDPRODARVOL), 'N')
           INTO V_CDMARCA
           FROM RELACPRODOL, PRODUTO
          WHERE RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
            AND PRODUTO.CDPRODESTO      = C_ITEMSOLI.CDPRODUTO
            AND RELACPRODOL.CDMARCA     = V_CDMARCA;
         IF V_CDMARCA = 'N' THEN
            
            INSERT
              INTO VERIFCONSSOLOL
                   (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
              SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '9', P_CDFILIOPELOG
                FROM DUAL
               WHERE NOT EXISTS(SELECT 1
                                  FROM VERIFCONSSOLOL V
                                 WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                   AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                   AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                   AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                   AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                   AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                   AND V.IDVERIFCONSOL = '9');
            P_ROWSAFFECT := 'N';
         END IF;
      END IF;
      
      IF V_IDUTLPRARVOLCMP = 'N' THEN
         SELECT MAX(PRODUTOOL.CDPRODESTO)
           INTO V_CDPRARVOLCMPATV
           FROM RELACPRODOL, PRODUTO, PRODUTO PRODUTOOL, PRODUTO P
          WHERE RELACPRODOL.CDPRODARVOL = PRODUTOOL.CDPRODUTO
            AND RELACPRODOL.CDPRARVORIG = PRODUTO.CDPRODUTO
            AND PRODUTO.CDPRODESTO      = P.CDPRODESTO
            AND P.CDPRODUTO             = C_ITEMSOLI.CDPRODUTO
            AND PRODUTOOL.CDPRODUTO <> PRODUTOOL.CDPRODESTO
            AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
            AND NOT EXISTS(SELECT 1
                             FROM PRSUBGRPROD
                            WHERE PRSUBGRPROD.CDGRUPPROD    = V_CDGRUPPROD
                              AND PRSUBGRPROD.CDSUBGRPROD   = V_CDSUBGRARVOR
                              AND PRSUBGRPROD.CDPRODUTO     = PRODUTOOL.CDPRODUTO
                              AND PRSUBGRPROD.CDFILISUBGR   = 'P');
         IF V_CDPRARVOLCMPATV IS NOT NULL THEN
            INSERT
              INTO VERIFCONSSOLOL
                   (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
              SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, '0', P_CDFILIOPELOG
                FROM DUAL
               WHERE NOT EXISTS(SELECT 1
                                  FROM VERIFCONSSOLOL V
                                 WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                   AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                   AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                   AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                   AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                   AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                   AND V.IDVERIFCONSOL = '0');
            P_ROWSAFFECT := 'N';
         END IF;
      END IF;
      
      IF V_IDEMBCONSPRECONECOL = 'S' THEN

         V_NRDIASEG := 0;
         SELECT NVL(MAX(NRLIMISEGU), 0)
           INTO V_NRDIASEG
           FROM LIMISEGPROD, PRODUTO, PRODUTO PRODNIVELCOMPL
          WHERE CDFILIAL = P_CDFILIOPELOG
            AND LIMISEGPROD.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODNIVELCOMPL.CDPRODUTO = C_ITEMSOLI.CDPRODUTO
            AND PRODNIVELCOMPL.CDARVPROD LIKE PRODUTO.CDARVPROD||'%'
            AND PRODUTO.CDARVPROD = (SELECT MAX(B.CDARVPROD)
                                       FROM LIMISEGPROD A, PRODUTO B
                                      WHERE A.CDPRODUTO = B.CDPRODUTO
                                        AND A.CDFILIAL  = P_CDFILIOPELOG
                                        AND INSTR(PRODNIVELCOMPL.CDARVPROD, B.CDARVPROD) = 1);
         IF V_NRDIASEG IS NULL THEN
            V_NRDIASEG := 0;
         END IF;

         V_NOVADATA := C_ITEMSOLI.DTPROGENTR - V_NRDIASEG;
         SELECT TO_DATE('01/'||TO_CHAR(V_NOVADATA,'MM/YYYY'), 'DD/MM/YYYY')
           INTO V_DTMESENTREGA
           FROM DUAL;

         SELECT MAX(PERFILPROD.CDPERIENTR)
           INTO V_CDPERIENTR
           FROM PERFILPROD, PRODUTO
          WHERE PERFILPROD.CDFILIAL  = P_CDFILIOPELOG
            AND PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODUTO.CDARVPROD    = (SELECT MAX(B.CDARVPROD)
                                          FROM PERFILPROD A, PRODUTO B
                                         WHERE A.CDPRODUTO = B.CDPRODUTO
                                           AND A.CDFILIAL  = P_CDFILIOPELOG
                                           AND INSTR(C_ITEMSOLI.CDARVPROD, B.CDARVPROD) = 1);


         SELECT NVL(MAX(CALECOMP.DTENTREGA), V_NOVADATA)
           INTO V_DTPROGENTR
           FROM CALECOMP
          WHERE CALECOMP.CDFILIAL    = P_CDFILIOPELOG
            AND CALECOMP.CDPERIENTR  = V_CDPERIENTR
            AND CALECOMP.DTENTREGA  >= V_DTMESENTREGA
            AND CALECOMP.DTENTREGA  <= V_NOVADATA;

         SELECT COUNT(1)
           INTO V_ITEMCOLE
           FROM ITEMCOLE, FILIAL, PRODUTO, RELACPRODOL
          WHERE ITEMCOLE.CDFILIAL  = C_ITEMSOLI.CDFILCENTCMP
            AND ITEMCOLE.CDREGIAO  = FILIAL.CDREGIAO
            AND FILIAL.CDFILIAL    = P_CDFILIOPELOG
            AND ITEMCOLE.CDPRODUTO = PRODUTO.CDPRODUTO
            AND PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
            AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
            AND RELACPRODOL.CDPRARVORIG = ITEMCOLE.CDPRODUTO
            AND RELACPRODOL.CDMARCA     = ITEMCOLE.CDMARCA
            AND V_DTPROGENTR BETWEEN DTINIVALITM AND DTFINVALITM
            AND EXISTS (SELECT 1
                          FROM PRODFILI
                         WHERE PRODFILI.CDFILIAL  = P_CDFILIOPELOG
                           AND PRODFILI.CDPRODUTO = PRODUTO.CDPRODUTO
                           AND NVL(PRODFILI.IDPRODATIV, 'X')  = 'A');
         IF V_ITEMCOLE = 0 THEN
            INSERT
              INTO VERIFCONSSOLOL
                   (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
              SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, 'I', P_CDFILIOPELOG
                FROM DUAL
               WHERE NOT EXISTS(SELECT 1
                                  FROM VERIFCONSSOLOL V
                                 WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                   AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                   AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                   AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                   AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                   AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                   AND V.IDVERIFCONSOL = 'I');
            P_ROWSAFFECT := 'N';
         END IF;
         IF V_CDFORNOPELOG IS NOT NULL THEN
            SELECT MAX(PRODUTO.VRARREDEMPPR)
              INTO V_VRARREDEMPPR
              FROM PRODUTO, PRODUTO PRODESTO
             WHERE PRODESTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
               AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
               AND NVL(PRODUTO.VRARREDEMPPR, 0)>0
               AND PRODESTO.CDPRODESTO = PRODUTO.CDPRODESTO;
            IF V_VRARREDEMPPR IS NOT NULL THEN
               SELECT MAX(VRARREDEMPE) 
                 INTO V_VRARREDEMPE 
                 FROM PRODFORNCOMP, PRODUTO 
                WHERE CDFORNECED  = V_CDFORNOPELOG
                  AND CDPRODCOMPL = PRODUTO.CDPRODUTO
                  AND PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
                  AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
                  AND NVL(PRODUTO.VRARREDEMPPR, 0)>0;
               IF  V_VRARREDEMPE IS NULL THEN
                  INSERT
                    INTO VERIFCONSSOLOL
                         (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                         DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
                    SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                          C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, 'A', P_CDFILIOPELOG
                      FROM DUAL
                     WHERE NOT EXISTS(SELECT 1
                                        FROM VERIFCONSSOLOL V
                                       WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                         AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                         AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                         AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                         AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                         AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                         AND V.IDVERIFCONSOL = 'A');
                  P_ROWSAFFECT := 'N';
               END IF;
            END IF;
         END IF;
      END IF;
      IF V_IDUTLMARPREFOL = 'S' AND NVL(P_IDPRIORIZA, 'N') = 'S' THEN
         SELECT COUNT(*)
           INTO V_COUNTPROD
           FROM (SELECT 1
                   FROM PARTFILI, PRODUTO
                  WHERE PARTFILI.CDFILIAL  = C_ITEMSOLI.CDFILSOLI
                    AND PARTFILI.CDPRODUTO = PRODUTO.CDPRODUTO
                    AND PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
                    AND NVL(CDTIPPART, 'X') IN ('1', '2', '7', '8')
                  UNION
                 SELECT 1
                   FROM PRODPREFMED
                  WHERE PRODPREFMED.CDFILIAL  = C_ITEMSOLI.CDFILSOLI
                    AND PRODPREFMED.CDPRODUTO = C_ITEMSOLI.CDPRODUTO);
         IF V_COUNTPROD > 0 THEN
            SELECT NVL(MAX(CDTIPPART), 'N')
              INTO V_CDTIPPART
              FROM (SELECT PARTFILI.CDTIPPART
                      FROM PARTFILI, PRODUTO
                     WHERE PARTFILI.CDFILIAL  = C_ITEMSOLI.CDFILSOLI
                       AND PARTFILI.CDPRODUTO = PRODUTO.CDPRODUTO
                       AND PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
                       AND NVL(CDTIPPART, 'X') IN ('1', '2', '7', '8')
                       AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
                       AND EXISTS (SELECT 1
                                     FROM RELACPRODOL
                                    WHERE RELACPRODOL.CDPRARVORIG = PARTFILI.CDPRODUTO
                                      AND RELACPRODOL.CDMARCA     = PARTFILI.CDMARCA)
                     UNION
                    SELECT '1' CDTIPPART
                      FROM PRODPREFMED, PRODUTO
                     WHERE PRODPREFMED.CDFILIAL   = C_ITEMSOLI.CDFILSOLI
                       AND PRODPREFMED.CDPRODPREF = PRODUTO.CDPRODUTO
                       AND PRODUTO.CDPRODESTO = C_ITEMSOLI.CDPRODUTO
                       AND NVL(PRODUTO.IDPRCMPATIVO, 'N') = 'S'
                       AND EXISTS (SELECT 1
                                     FROM RELACPRODOL
                                    WHERE RELACPRODOL.CDPRARVORIG = PRODPREFMED.CDPRODPREF));
            IF V_CDTIPPART = 'N' THEN
               INSERT
                       INTO VERIFCONSSOLOL
                            (NRSEQUCONSOL, CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                            DTPROGENTR, DTINICIAL, DTFINAL, CDPRODINI, CDPRODFIN, IDVERIFCONSOL, CDFILIOPELOG)
                       SELECT V_NRSEQUCONSOL, C_ITEMSOLI.CDFILSOLI, C_ITEMSOLI.CDFILLAN, C_ITEMSOLI.NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                             C_ITEMSOLI.DTPROGENTR, P_DTINICIAL, P_DTFINAL, P_CDPRODINI, P_CDPRODFIN, 'B', P_CDFILIOPELOG
                         FROM DUAL
                        WHERE NOT EXISTS(SELECT 1
                                           FROM VERIFCONSSOLOL V
                                          WHERE V.NRSEQUCONSOL  = V_NRSEQUCONSOL
                                            AND V.CDFILSOLI     = C_ITEMSOLI.CDFILSOLI
                                            AND V.CDFILLAN      = C_ITEMSOLI.CDFILLAN
                                            AND V.NRSOLICMP     = C_ITEMSOLI.NRSOLICMP
                                            AND V.CDPRODUTO     = C_ITEMSOLI.CDPRODUTO
                                            AND V.DTPROGENTR    = C_ITEMSOLI.DTPROGENTR
                                            AND V.IDVERIFCONSOL = 'B');
                     P_ROWSAFFECT := 'N';
            END IF;
         END IF;
      END IF;
   END LOOP;
END;
/