/* Sistemas Integrados TECNISA
   Compras e Suprimentos

Nome: 8951_SUPSTPO_GERA_SOLICITA_OL.sql

Descrição:
Gera solicitação a partir da consolidação do operador logístico.

P_CDFILIOPELOG - Operador Logístico.
P_NRSEQUCONSOL - Nº da Consolidação
P_CDFILLANC    - Filial de Lançamento

Criação:
16/02/2007 Marcelo Alexsandro Souza Silva
*/

CREATE OR REPLACE
PROCEDURE GERA_SOLICITA_OL
  (P_CDFILIOPELOG IN FILIAL.CDFILIAL%TYPE,
   P_NRSEQUCONSOL IN TRABNECECOMP.NRNECECOMP%TYPE,
   P_CDFILLANC    IN FILIAL.CDFILIAL%TYPE,
   P_CDOPERLANC   IN OPERADOR.CDOPERADOR%TYPE,
   P_ROWSAFFECT   OUT VARCHAR2)
IS
   V_PRXSOLICMP   VARCHAR2(20);
   V_CDFILCENT    VARCHAR2(4);
   V_ESTOQUERESTANTE FLOAT;
   V_QTDEITEMSOLI    FLOAT;
   V_PRODUTO      VARCHAR2(15);
   V_IDUTAPROVSOL CHAR(1);
   V_IDSOLIAPROV  CHAR(1);
   V_IDPERALTSAPR CHAR(1);
   W_A            CHAR(1) := 'A';
   W_S            CHAR(1) := 'S';
   W_N            CHAR(1) := 'N';
   W_C            CHAR(1) := 'C';
   W_ZERO         INT     := 0;
   W_UM           INT     := 1;
   W_ONZE         INT     := 11;
   W_DEZ          INT     := 10;
   W_TRES         INT     := 3;
   V_IDUTLMARPREFOL     PARASUPRI.IDUTLMARPREFOL%TYPE;
   V_NRSOLICMP    VARCHAR2(20);
   V_DTPROCESS    DATE;
   V_CDMARCA      VARCHAR2(5) := NULL;
   V_CDMARCA_PADRAO  VARCHAR2(5);
   V_CONTADOR     INT     := 0;
   V_CONTADORITEM INT     := 0;
BEGIN
   V_IDUTAPROVSOL := '';
   V_PRXSOLICMP   := '';
   V_CDFILCENT    := '';
   V_IDSOLIAPROV  := '';
   V_IDPERALTSAPR := '';
   NOVO_CODIGO('SOLICOMP'||P_CDFILIOPELOG||P_CDFILLANC, V_PRXSOLICMP);
   V_PRXSOLICMP := SUBSTR(V_PRXSOLICMP,W_ONZE,W_DEZ);
   SELECT MAX(CDMARCA)
     INTO V_CDMARCA_PADRAO
     FROM MARCA;
   SELECT
      NVL(MAX(CDMARCA), V_CDMARCA_PADRAO)
   INTO
      V_CDMARCA_PADRAO
   FROM
      FILIAL, PARASUPRI
   WHERE PARASUPRI.CDFILIAL = NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL)
     AND FILIAL.CDFILIAL    = P_CDFILIOPELOG;
   SELECT
      MAX(IDUTAPROVSOL),
      MAX(SUBSTR(NVL(IDPERALTSAPR, W_N||W_N||W_N), W_TRES, W_UM))
   INTO
      V_IDUTAPROVSOL,
      V_IDPERALTSAPR
   FROM
      PARCMPSUP
   WHERE
      CDFILIAL = P_CDFILIOPELOG;
   SELECT
      DECODE(NVL(MAX(P.IDUTILDTPROC), W_N), W_S, NVL(MAX(PF.DTPROCESSA), TRUNC(SYSDATE)), TRUNC(SYSDATE)) DTPROCESS
   INTO
      V_DTPROCESS
   FROM
      PARAMFILIAL PF, PARAMGERAL P
   WHERE PF.CDFILIAL = P_CDFILIOPELOG;
   IF V_IDUTAPROVSOL = W_S THEN
      IF V_IDPERALTSAPR = W_S THEN
         V_IDSOLIAPROV := W_S;
      ELSE
         V_IDSOLIAPROV := W_N;
      END IF;
   ELSE
      V_IDSOLIAPROV := W_S;
   END IF;
   SELECT
      MAX(NVL(FILIAL.CDFILCENTCMP, FILIAL.CDFILIAL))
   INTO
      V_CDFILCENT
   FROM
      FILIAL
   WHERE
      FILIAL.CDFILIAL = P_CDFILIOPELOG;
   INSERT INTO SOLICITA
     (CDFILSOLI,
      CDFILLANCA,
      NRSOLICMP,
      DTSOLCMP,
      IDTIPLAN,
      CDFILCENT,
      CDOPERLANC)
   VALUES
     (P_CDFILIOPELOG,
      P_CDFILLANC,
      V_PRXSOLICMP,
      TO_DATE(TRUNC(SYSDATE)),
      W_A,
      V_CDFILCENT,
      P_CDOPERLANC);
   FOR C_ITEMSOLI IN(
      SELECT DISTINCT
         P_CDFILIOPELOG CDFILIOPELOG,
         P_CDFILLANC CDFILLANC,
         V_PRXSOLICMP NRSOLICMP,
         CASE PRODCONSSOLOL.CDPRODUTO
            WHEN RELACPRODOL.CDPRODARVOL
            THEN RELACPRODOL.CDPRARVORIG
            ELSE PRODCONSSOLOL.CDPRODUTO
         END CDPRODUTO,
         ITEMCONSSOLOL.DTENTRCONSOL,
         (CEIL((ITEMCONSSOLOL.QTENTRCONSOL - NVL(JASOLICITA.QTDE, 0))/CASE NVL(PRODUTO.VRARREDCMP,0)
                                                                          WHEN 0
                                                                          THEN 1
                                                                          ELSE NVL(PRODUTO.VRARREDCMP,0)
                                                                       END)*CASE NVL(PRODUTO.VRARREDCMP,0)
                                                                               WHEN 0
                                                                               THEN 1
                                                                               ELSE NVL(PRODUTO.VRARREDCMP,0)
                                                                            END) QTSOLIPROD,
         V_IDSOLIAPROV IDSOLIAPROV,
         P_NRSEQUCONSOL NRSEQUCONSOL,
         CASE PRODESTOL.CDPRODESTO
            WHEN PRODESTORIG.CDPRODESTO
            THEN V_CDMARCA_PADRAO
            ELSE RELACPRODOL.CDMARCA
         END CDMARCA
      FROM
         PRODCONSSOLOL,
         ITEMCONSSOLOL,
         PRODUTO,
         (SELECT SUM(I.QTSOLIPROD) QTDE, I.CDFILSOLI, I.CDPRODUTO, I.DTPROGENTR, I.CDMARCA
          FROM ITEMSOLI I, CONSSOLOL
          WHERE I.CDFILSOLI   = P_CDFILIOPELOG
            AND I.DTPROGENTR >= (V_DTPROCESS - 90)
            AND I.NRSEQUCONSOL = CONSSOLOL.NRSEQUCONSOL
            AND NVL(CONSSOLOL.IDCONSPREVCONOL, 'N')  = 'S'
          GROUP BY I.CDFILSOLI, I.CDPRODUTO, I.DTPROGENTR, I.CDMARCA) JASOLICITA, RELACPRODOL, PRODUTO PRODESTOL, PRODUTO PRODESTORIG
      WHERE PRODCONSSOLOL.NRSEQUCONSOL    = P_NRSEQUCONSOL
        AND PRODCONSSOLOL.NRSEQUCONSOL    = ITEMCONSSOLOL.NRSEQUCONSOL
        AND PRODCONSSOLOL.CDFILSOLI       = ITEMCONSSOLOL.CDFILSOLI
        AND PRODCONSSOLOL.CDFILLAN        = ITEMCONSSOLOL.CDFILLAN
        AND PRODCONSSOLOL.CDPRODUTO       = ITEMCONSSOLOL.CDPRODUTO
        AND NVL(ITEMCONSSOLOL.IDENTREGAVIAOL, W_S) = W_S
        AND NVL(PRODCONSSOLOL.QTESTUTILCONSOL, W_ZERO) <= W_ZERO
        AND PRODUTO.CDPRODUTO             = PRODCONSSOLOL.CDPRODUTO
        AND JASOLICITA.CDFILSOLI(+)       = ITEMCONSSOLOL.CDFILSOLI
        AND JASOLICITA.CDPRODUTO(+)       = ITEMCONSSOLOL.CDPRODUTO
        AND JASOLICITA.DTPROGENTR(+)      = ITEMCONSSOLOL.DTENTRCONSOL
        AND (ITEMCONSSOLOL.QTENTRCONSOL   - NVL(JASOLICITA.QTDE, 0)) > 0
        AND PRODCONSSOLOL.CDPRODUTO       = CASE PRODCONSSOLOL.CDPRODUTO
                                               WHEN RELACPRODOL.CDPRODARVOL
                                               THEN PRODCONSSOLOL.CDPRODUTO
                                               ELSE RELACPRODOL.CDPRARVORIG
                                            END
        AND RELACPRODOL.CDMARCA           = CASE PRODCONSSOLOL.CDPRODUTO
                                              WHEN RELACPRODOL.CDPRODARVOL
                                              THEN RELACPRODOL.CDMARCA
                                              ELSE V_CDMARCA_PADRAO
                                            END
        AND RELACPRODOL.CDPRODARVOL       = PRODESTOL.CDPRODUTO
        AND RELACPRODOL.CDPRARVORIG       = PRODESTORIG.CDPRODUTO
         ORDER BY CDMARCA, ITEMCONSSOLOL.DTENTRCONSOL)
      LOOP
         IF NVL(V_CDMARCA, 'XXXXX') <> C_ITEMSOLI.CDMARCA THEN
            V_CDMARCA := C_ITEMSOLI.CDMARCA;
            IF V_CONTADOR > 0 THEN
               NOVO_CODIGO('SOLICOMP'||P_CDFILIOPELOG||P_CDFILLANC, V_PRXSOLICMP);
               V_PRXSOLICMP := SUBSTR(V_PRXSOLICMP,W_ONZE,W_DEZ);
               INSERT INTO SOLICITA
                 (CDFILSOLI,
                  CDFILLANCA,
                  NRSOLICMP,
                  DTSOLCMP,
                  IDTIPLAN,
                  CDFILCENT,
                  CDOPERLANC)
               VALUES
                 (P_CDFILIOPELOG,
                  P_CDFILLANC,
                  V_PRXSOLICMP,
                  TO_DATE(TRUNC(SYSDATE)),
                  W_A,
                  V_CDFILCENT,
                  P_CDOPERLANC);
            END IF;
         END IF;
         V_NRSOLICMP := NULL;
         BEGIN
            V_CONTADORITEM := V_CONTADORITEM +1;         
            INSERT
              INTO ITEMSOLI(CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                            DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
            VALUES (C_ITEMSOLI.CDFILIOPELOG, C_ITEMSOLI.CDFILLANC, V_PRXSOLICMP, C_ITEMSOLI.CDPRODUTO,
                    C_ITEMSOLI.DTENTRCONSOL, C_ITEMSOLI.QTSOLIPROD, C_ITEMSOLI.IDSOLIAPROV, C_ITEMSOLI.NRSEQUCONSOL,
                    CASE C_ITEMSOLI.CDMARCA
                       WHEN V_CDMARCA_PADRAO
                       THEN ''
                       ELSE C_ITEMSOLI.CDMARCA
                    END);
         EXCEPTION
            WHEN OTHERS THEN BEGIN
               SELECT MIN(ITEMSOLI.NRSOLICMP)
                 INTO V_NRSOLICMP
                 FROM ITEMSOLI
                WHERE ITEMSOLI.CDFILSOLI    = C_ITEMSOLI.CDFILIOPELOG
                  AND ITEMSOLI.CDFILLAN     = C_ITEMSOLI.CDFILLANC
                  AND ITEMSOLI.NRSEQUCONSOL = C_ITEMSOLI.NRSEQUCONSOL
                  AND NVL(ITEMSOLI.CDMARCA, V_CDMARCA_PADRAO)       = C_ITEMSOLI.CDMARCA
                  AND ITEMSOLI.CDPRODUTO    <> C_ITEMSOLI.CDPRODUTO
                  AND ITEMSOLI.NRSOLICMP    <> C_ITEMSOLI.NRSOLICMP
                  AND ITEMSOLI.DTPROGENTR   <> C_ITEMSOLI.DTENTRCONSOL;
               IF V_NRSOLICMP IS NULL THEN
                  NOVO_CODIGO('SOLICOMP'||P_CDFILIOPELOG||P_CDFILLANC, V_NRSOLICMP);
                  V_NRSOLICMP := SUBSTR(V_NRSOLICMP,W_ONZE,W_DEZ);
                  INSERT
                    INTO SOLICITA(CDFILSOLI, CDFILLANCA, NRSOLICMP,
                                  DTSOLCMP, IDTIPLAN, CDFILCENT,  CDOPERLANC)
                  VALUES (P_CDFILIOPELOG, P_CDFILLANC, V_NRSOLICMP,
                          TO_DATE(TRUNC(SYSDATE)), W_A, V_CDFILCENT, P_CDOPERLANC);
                  V_CONTADORITEM := V_CONTADORITEM +1;
                  INSERT
                    INTO ITEMSOLI(CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                                  DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
                  VALUES (C_ITEMSOLI.CDFILIOPELOG, C_ITEMSOLI.CDFILLANC, V_NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                          C_ITEMSOLI.DTENTRCONSOL, C_ITEMSOLI.QTSOLIPROD, C_ITEMSOLI.IDSOLIAPROV, C_ITEMSOLI.NRSEQUCONSOL,
                          CASE C_ITEMSOLI.CDMARCA
                             WHEN V_CDMARCA_PADRAO
                             THEN ''
                             ELSE C_ITEMSOLI.CDMARCA
                          END);
               ELSE
                  V_CONTADORITEM := V_CONTADORITEM +1;
                  INSERT
                    INTO ITEMSOLI(CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                                  DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
                  VALUES (C_ITEMSOLI.CDFILIOPELOG, C_ITEMSOLI.CDFILLANC, V_NRSOLICMP, C_ITEMSOLI.CDPRODUTO,
                          C_ITEMSOLI.DTENTRCONSOL, C_ITEMSOLI.QTSOLIPROD, C_ITEMSOLI.IDSOLIAPROV, C_ITEMSOLI.NRSEQUCONSOL,
                          CASE C_ITEMSOLI.CDMARCA
                             WHEN V_CDMARCA_PADRAO
                             THEN ''
                             ELSE C_ITEMSOLI.CDMARCA
                          END);
               END IF;
            END;
         END;
         /*Insert que ficava no final do procedimento foi tranferido para este lugar por cause da criação do loop de produtos*/
         INSERT
           INTO MOVOPSOL (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV, CDPRODUTO, DTENTROPER, DTOPERSOL,
                          CDOPERADOR,  DSJUSTOPER,  QTANTOPER, QTDEPOPER, IDOPERAMOVS)
         SELECT P_CDFILIOPELOG, P_CDFILLANC, NVL(V_NRSOLICMP, V_PRXSOLICMP), JUSTCONSSOLOl.CDPRODUTO, JUSTCONSSOLOl.DTENTJUSTCON,
                JUSTCONSSOLOl.DTJUSTCONSOL, JUSTCONSSOLOl.CDOPERADOR, JUSTCONSSOLOl.DSJUSTCONSOL,
                JUSTCONSSOLOl.QTANTESTUTIL,  JUSTCONSSOLOl.QTDEPESTUTIL,W_A
           FROM JUSTCONSSOLOl
          WHERE JUSTCONSSOLOl.NRSEQUCONSOL = P_NRSEQUCONSOL
            AND JUSTCONSSOLOl.DTENTJUSTCON IS NOT NULL
            AND JUSTCONSSOLOl.CDPRODUTO    = C_ITEMSOLI.CDPRODUTO
            AND JUSTCONSSOLOl.DTENTJUSTCON = C_ITEMSOLI.DTENTRCONSOL;
         V_CONTADOR := V_CONTADOR+1;
      END LOOP;
   V_PRODUTO  := ' ';
   V_CONTADOR := 0;
   FOR C_ITEM IN
      (SELECT
          CASE PRODCONSSOLOL.CDPRODUTO
            WHEN RELACPRODOL.CDPRODARVOL
            THEN RELACPRODOL.CDPRARVORIG
            ELSE PRODCONSSOLOL.CDPRODUTO
          END CDPRODUTO,
          PRODCONSSOLOL.QTESTUTILCONSOL,
          ITEMCONSSOLOL.DTENTRCONSOL,
          (NVL(ITEMCONSSOLOL.QTDACOMPRAR, ITEMCONSSOLOL.QTENTRCONSOL) - NVL(JASOLICITA.QTDE, 0)) QTENTRCONSOL,
          CASE NVL(PRODUTO.VRARREDCMP,0)
             WHEN 0
             THEN 1
             ELSE NVL(PRODUTO.VRARREDCMP,0)
          END VRARREDCMP,
          CASE PRODCONSSOLOL.CDPRODUTO
             WHEN RELACPRODOL.CDPRODARVOL
             THEN RELACPRODOL.CDMARCA
             ELSE V_CDMARCA_PADRAO
          END CDMARCA
       FROM
          PRODCONSSOLOL,
          ITEMCONSSOLOL,
          PRODUTO,
          (SELECT SUM(I.QTSOLIPROD) QTDE, I.CDFILSOLI, I.CDPRODUTO, I.DTPROGENTR, I.CDMARCA
           FROM ITEMSOLI I, CONSSOLOL
           WHERE I.CDFILSOLI   = P_CDFILIOPELOG
             AND I.DTPROGENTR >= (V_DTPROCESS - 90)
             AND I.NRSEQUCONSOL = CONSSOLOL.NRSEQUCONSOL
             AND NVL(CONSSOLOL.IDCONSPREVCONOL, 'N')  = 'S'
           GROUP BY I.CDFILSOLI, I.CDPRODUTO, I.DTPROGENTR, I.CDMARCA) JASOLICITA, RELACPRODOL
       WHERE PRODCONSSOLOL.NRSEQUCONSOL    = P_NRSEQUCONSOL
         AND PRODCONSSOLOL.CDPRODUTO       = PRODUTO.CDPRODUTO
         AND PRODCONSSOLOL.NRSEQUCONSOL    = ITEMCONSSOLOL.NRSEQUCONSOL
         AND PRODCONSSOLOL.CDFILSOLI       = ITEMCONSSOLOL.CDFILSOLI
         AND PRODCONSSOLOL.CDFILLAN        = ITEMCONSSOLOL.CDFILLAN
         AND PRODCONSSOLOL.CDPRODUTO       = ITEMCONSSOLOL.CDPRODUTO
         AND NVL(ITEMCONSSOLOL.IDENTREGAVIAOL, W_S) = W_S
         AND NVL(PRODCONSSOLOL.QTESTUTILCONSOL, W_ZERO) > W_ZERO
         AND JASOLICITA.CDFILSOLI(+)       = ITEMCONSSOLOL.CDFILSOLI
         AND JASOLICITA.CDPRODUTO(+)       = ITEMCONSSOLOL.CDPRODUTO
         AND JASOLICITA.DTPROGENTR(+)      = ITEMCONSSOLOL.DTENTRCONSOL
         AND (ITEMCONSSOLOL.QTENTRCONSOL   - NVL(JASOLICITA.QTDE, 0)) > 0
         AND PRODCONSSOLOL.CDPRODUTO       = CASE PRODCONSSOLOL.CDPRODUTO
                                                WHEN RELACPRODOL.CDPRODARVOL
                                                THEN PRODCONSSOLOL.CDPRODUTO
                                                ELSE RELACPRODOL.CDPRARVORIG
                                             END
         AND RELACPRODOL.CDMARCA           = CASE PRODCONSSOLOL.CDPRODUTO
                                               WHEN RELACPRODOL.CDPRODARVOL
                                               THEN RELACPRODOL.CDMARCA
                                               ELSE V_CDMARCA_PADRAO
                                             END
       ORDER BY
          CDMARCA,
          CDPRODUTO,
          ITEMCONSSOLOL.DTENTRCONSOL
       )
   LOOP
      IF V_PRODUTO <> C_ITEM.CDMARCA||C_ITEM.CDPRODUTO THEN
         V_ESTOQUERESTANTE := C_ITEM.QTESTUTILCONSOL;
         V_PRODUTO         := C_ITEM.CDMARCA||C_ITEM.CDPRODUTO;
      END IF;
      V_QTDEITEMSOLI    := C_ITEM.QTENTRCONSOL;
      IF V_QTDEITEMSOLI > 0 THEN
         V_ESTOQUERESTANTE := 0;
         V_NRSOLICMP       := NULL;
         SELECT MIN(ITEMSOLI.NRSOLICMP)
           INTO V_NRSOLICMP
           FROM ITEMSOLI
          WHERE ITEMSOLI.CDFILSOLI    = P_CDFILIOPELOG
            AND ITEMSOLI.CDFILLAN     = P_CDFILLANC
            AND ITEMSOLI.NRSEQUCONSOL = P_NRSEQUCONSOL
            AND NVL(ITEMSOLI.CDMARCA, V_CDMARCA_PADRAO)       = C_ITEM.CDMARCA;
         IF (MOD(V_QTDEITEMSOLI, C_ITEM.VRARREDCMP) <> W_ZERO) AND C_ITEM.VRARREDCMP > W_ZERO THEN
            V_QTDEITEMSOLI := CEIL(V_QTDEITEMSOLI / C_ITEM.VRARREDCMP) * C_ITEM.VRARREDCMP;
         END IF;
         BEGIN
            V_CONTADORITEM := V_CONTADORITEM +1;
            INSERT
              INTO ITEMSOLI (CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                   DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
            VALUES (P_CDFILIOPELOG, P_CDFILLANC, V_NRSOLICMP, C_ITEM.CDPRODUTO,
                    C_ITEM.DTENTRCONSOL, V_QTDEITEMSOLI, V_IDSOLIAPROV, P_NRSEQUCONSOL,
                    CASE C_ITEM.CDMARCA
                       WHEN V_CDMARCA_PADRAO
                       THEN ''
                       ELSE C_ITEM.CDMARCA
                    END);
         EXCEPTION
            WHEN OTHERS THEN BEGIN
               SELECT MIN(ITEMSOLI.NRSOLICMP)
                 INTO V_NRSOLICMP
                 FROM ITEMSOLI
                WHERE ITEMSOLI.CDFILSOLI    = P_CDFILIOPELOG
                  AND ITEMSOLI.CDFILLAN     = P_CDFILLANC
                  AND ITEMSOLI.NRSEQUCONSOL = P_NRSEQUCONSOL
                  AND NVL(ITEMSOLI.CDMARCA, V_CDMARCA_PADRAO)  = C_ITEM.CDMARCA
                  AND ITEMSOLI.CDPRODUTO    <> C_ITEM.CDPRODUTO
                  AND ITEMSOLI.NRSOLICMP    <> V_PRXSOLICMP
                  AND ITEMSOLI.DTPROGENTR   <> C_ITEM.DTENTRCONSOL;
               IF V_NRSOLICMP IS NULL THEN
                  NOVO_CODIGO('SOLICOMP'||P_CDFILIOPELOG||P_CDFILLANC, V_NRSOLICMP);
                  V_NRSOLICMP := SUBSTR(V_NRSOLICMP,W_ONZE,W_DEZ);
                  INSERT
                    INTO SOLICITA(CDFILSOLI, CDFILLANCA, NRSOLICMP,
                                  DTSOLCMP, IDTIPLAN, CDFILCENT,  CDOPERLANC)
                  VALUES (P_CDFILIOPELOG, P_CDFILLANC, V_NRSOLICMP,
                          TO_DATE(TRUNC(SYSDATE)), W_A, V_CDFILCENT, P_CDOPERLANC);
                  V_CONTADORITEM := V_CONTADORITEM +1;
                  INSERT
                    INTO ITEMSOLI (CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                         DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
                  VALUES (P_CDFILIOPELOG, P_CDFILLANC, V_NRSOLICMP, C_ITEM.CDPRODUTO,
                          C_ITEM.DTENTRCONSOL, V_QTDEITEMSOLI, V_IDSOLIAPROV, P_NRSEQUCONSOL,
                          CASE C_ITEM.CDMARCA
                             WHEN V_CDMARCA_PADRAO
                             THEN ''
                             ELSE C_ITEM.CDMARCA
                          END);
               ELSE
                  V_CONTADORITEM := V_CONTADORITEM +1;
                  INSERT
                    INTO ITEMSOLI (CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO,
                         DTPROGENTR, QTSOLIPROD, IDSOLIAPROV, NRSEQUCONSOL, CDMARCA)
                  VALUES (P_CDFILIOPELOG, P_CDFILLANC, V_PRXSOLICMP, C_ITEM.CDPRODUTO,
                          C_ITEM.DTENTRCONSOL, V_QTDEITEMSOLI, V_IDSOLIAPROV, P_NRSEQUCONSOL,
                          CASE C_ITEM.CDMARCA
                             WHEN V_CDMARCA_PADRAO
                             THEN ''
                             ELSE C_ITEM.CDMARCA
                          END);
               END IF;
            END;
         END;
         IF C_ITEM.QTENTRCONSOL <> V_QTDEITEMSOLI THEN
            INSERT INTO MOVOPSOL
               (CDFILSOLMOV, CDFILLANMOV, NRSOLIMOV, CDPRODUTO, DTENTROPER, DTOPERSOL,
                CDOPERADOR,  DSJUSTOPER,  QTANTOPER, QTDEPOPER, IDOPERAMOVS)
            SELECT P_CDFILIOPELOG, P_CDFILLANC, NVL(V_NRSOLICMP, V_PRXSOLICMP), C_ITEM.CDPRODUTO, C_ITEM.DTENTRCONSOL,
                   DTJUSTCONSOL, CDOPERADOR, DSJUSTCONSOL, C_ITEM.QTENTRCONSOL,  V_QTDEITEMSOLI, W_A
            FROM
               JUSTCONSSOLOL
            WHERE NRSEQUCONSOL = P_NRSEQUCONSOL
              AND DTENTJUSTCON IS NULL
              AND CDPRODUTO    = C_ITEM.CDPRODUTO
              AND DTJUSTCONSOL = (SELECT MAX(J.DTJUSTCONSOL)
                                  FROM JUSTCONSSOLOL J
                                  WHERE J.NRSEQUCONSOL = P_NRSEQUCONSOL
                                    AND J.CDPRODUTO    = C_ITEM.CDPRODUTO
                                    AND J.DTENTJUSTCON IS NULL);
         END IF;
      END IF;
   END LOOP;
   UPDATE CONSSOLOL
      SET IDSITUCONSSOL  = W_C,
          DTCONCONSSOLOL = TO_DATE(TRUNC(SYSDATE))
   WHERE
      CONSSOLOL.NRSEQUCONSOL = P_NRSEQUCONSOL;
   IF V_CONTADORITEM = 0 THEN
      P_ROWSAFFECT := '';
   ELSE
      P_ROWSAFFECT := V_PRXSOLICMP;
   END IF;
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('GERA_SOLICITA_OL','5.33.XXX'); END;
/