CREATE OR REPLACE
PROCEDURE NECESSIDADE_DE_COMPRAS (
    P_CDFILIAL                IN  VARCHAR2,
    P_TCDFILIAL               IN  VARCHAR2,
    P_CDGRUPFILI              IN  GRUPFILI.CDGRUPFILI%TYPE,
    P_DTINICIAL               IN  DATE,
    P_DTFINAL                 IN  DATE,
    P_CDPRODINI               IN  PRODUTO.CDARVPROD%TYPE,
    P_CDPRODFIN               IN  PRODUTO.CDARVPROD%TYPE,
    P_PEACRESCIMO             IN  NUMBER,
    P_CDOPERADOR              IN  OPERADOR.CDOPERADOR%TYPE,
    P_DTHRCALCNC              IN  DATE,
    P_IDQTDEZERO              IN  VARCHAR2,
    P_NRNECECOMP              IN  TRABNECECOMP.NRNECECOMP%TYPE,
    P_EXTRA                   IN  VARCHAR2 DEFAULT 'N',
    P_CDSUBGRUPO              IN  VARCHAR2 DEFAULT NULL,
    P_CDGRUPPROD              IN  VARCHAR2 DEFAULT NULL)
IS

    TYPE CURTYPE              IS REF CURSOR;
    CUR_FILIAL                CURTYPE;
    C_PREV_DATA               CURTYPE;
    C_PREV                    CURTYPE;
    C_PRODUTO                 CURTYPE;
    V_SQLFILIAL               VARCHAR2(2000);
    V_SQLCPREV                VARCHAR2(6000);
    V_SQLF_GFILIAL            VARCHAR2(1000);
    V_SQLW_GFILIAL            VARCHAR2(1000);
    V_SQLFILTER               VARCHAR2(2000);
    V_FILIAL_CORRENTE         VARCHAR2(4);
    V_FILIAL_UNICA            VARCHAR2(4);
    V_IDSISDOS                VARCHAR2(1);
    V_RETIRDATA               NUMBER;
    V_ENTRADADATA             NUMBER;
    V_NRDIASEG                NUMBER := 0;
    V_NRDIASEGANT             NUMBER := 0;
    V_APENAS_CONSUMO          NUMBER;
    V_QTDESTOQUENEGCALC       NUMBER;
    V_QTESTOQUENECCMP         NUMBER;
    V_QTESTOQUENECCMP_1       NUMBER;
    V_QTESTOQUEVND            NUMBER;
    V_QTDIAESTOQUE            NUMBER;
    V_VALRESTO                NUMBER;
    V_VALRBRUT                NUMBER;

    V_FILINECE                INT;
    V_PRODFILI                INT;

    V_CDPRODINI               VARCHAR2(40);
    V_CDPRODFIN               VARCHAR2(40);
    V_CODPRODUTO              VARCHAR2(10);
    V_CODARVPRODUTO           VARCHAR2(20);
    V_CODPRODUTOPREF          VARCHAR2(10);
    V_CDPERIENTR              VARCHAR2(2);
    V_NRLIMISEGCAD            LIMISEGPROD.NRLIMISEGU%TYPE;
    V_DTPROCESS               DATE;
    V_DTENTREGA               DATE;
    V_DTANTPROXENT            DATE;
    V_DTMAXENTREGA            DATE;
    V_DTMAXENTREGA_ADD1       DATE;
    V_DTPRIMEIRAENTREGA       DATE;
    V_DTPRIMEIRAUTILIZAPROD   DATE;
    V_IDESTOQUE               CHAR(1);
    V_IDEVOLESTONC            CHAR(1);
    V_IDUTILDTPROC            CHAR(1);
    V_IDENTRADAFORAPERIODO    VARCHAR2(1);
    V_IDESTOQUENEGATIVO       CHAR(1);
    V_IDMARCNECCOMPRA         CHAR(1);
    V_UTILIZAPRODPREF         CHAR(1);
    V_EHPRIMEIRAVEZPROD       CHAR(1);
    V_PRIMEIRAENTFORAPERIODO  CHAR(1);
    V_IDUTILLOTE              CHAR(1);
    V_IDCONSAFNECCMP          CHAR(1);
    V_PRODUTOPERFILPROD       VARCHAR2(20);
    V_QUANTIDADE              FLOAT;
    V_QTCONSUMOPERIODO        FLOAT;
    V_QTCONSUMOPERIODOFILNECE FLOAT;
    V_QTCONSUMOANTECIPADO     FLOAT;
    V_QTCONSUMOANTECIPADOFILNECE FLOAT;
    V_QTASERENTREGUE          FLOAT;
    V_QTASERENTREGUEFILNECE   FLOAT;
    V_FATORCONVERSAO          FLOAT;
    V_QTJASOLICITADA          FLOAT;
    V_QTJASOLICITADAFP        FLOAT;
    V_QTJASOLICITADA1         FLOAT;
    V_QTAFFUTURA              FLOAT;
    V_QTJASOLICPEXOL          FLOAT;
    V_QTCONSUMOATEPENTREGA    FLOAT;
    V_QTCONSUMOATEPENTREGAFILNECE FLOAT;
    V_QTESTOQUESEGURANCA      FLOAT;
    V_QTDESTOQUEATUAL         FLOAT;
    V_QTDESTOQUEUTILIZADO     FLOAT;
    V_QTDTEORICANECCOMPRA     FLOAT;
    V_QTDORIGINALNECCOMPRA    FLOAT;
    V_QTDPRACOMPRAR           FLOAT;
    V_VRARREDONDACMP          FLOAT;
    V_VRFATORCONVERSAO        FLOAT;
    V_QTDPRODUTOCONVCOMPRA    FLOAT;
    V_QTDESTOQUENEGATIVOIMPR  FLOAT;
    V_QTDAFANTPRIMEIRAENT     FLOAT;
    V_QTDEESTO                FLOAT;

    V_QTESTAFPANT             FLOAT;
    V_QTESTAFPDEP             FLOAT;
    V_QTESTAFPEND             FLOAT;
    V_QTESTNFPEND             FLOAT;
    V_QTESTNFPEND1            FLOAT;
    V_QTESTAFPEXOL            FLOAT;
    V_QTESTOQATUAL            FLOAT;
    V_EXTRA                   CHAR(1);
    V_IDMAPDISTALMOX          CHAR(1);

    V_PERFILPROD_DNUTIL  VARCHAR2(1); -- Parametro utiliza dia nao util da tabela PERFILPROD (tem precedencia ao PERIENTR)
    V_PERFILPROD_SITENTR VARCHAR2(1); -- Parametro que define se atrasa (A) ou adianta (D) a entrega do produto
    V_DTATRASA                DATE;
    V_DTTESTE                 DATE;
    V_DTATRASA2               DATE;
    V_DTANTAUX                DATE;
    V_DTTEMP                  DATE;
    V_QTDTEMP                 FLOAT;
    V_CONTADOR                INTEGER;
    V_CONTADOR2               INTEGER;
    V_TESTE                   FLOAT;
    V_COMPARA                 INTEGER;
    V_CONTROLE                INTEGER;
    V_CONTTEMP                INTEGER;
    V_NRRETMAXLOT             INTEGER;
    V_LOTE                    VARCHAR2(10);

    C_UNDERSCORE              CHAR(1):= '_';
    W_A                       CHAR(1):= 'A';
    W_N                       CHAR(1):= 'N';
    W_X                       CHAR(1):= 'X';
    W_P                       CHAR(1):= 'P';
    W_S                       CHAR(1):= 'S';
    W_0                       CHAR(1):= '0';
    W_1                       CHAR(1):= '1';
    W_2                       CHAR(1):= '2';
    W_3                       CHAR(1):= '3';
    W_4                       CHAR(1):= '4';
    W_5                       CHAR(1):= '5';
    W_6                       CHAR(1):= '6';

    V_CDFILIOPELOG            VARCHAR2(4);
    V_IDCSSOLAFFORAPERICMP    VARCHAR2(1); /*Parametro Considerar AFs fora da Periodicidade da Filial no Calculo da Necessidade de Compras*/
    V_IDCONSANTECPENDNECC     PARASUPRI.IDCONSANTECPENDNECC%TYPE;
    V_DTANTPROXENT_1          DATE;
    V_UTILIZOU_JASOLI         CHAR(1):= 'N';
    V_IDDESCONSILIMCALCMP     PARASUPRI.IDDESCONSILIMCALCMP%TYPE;
    V_QTSOLIPROD              FLOAT;
    V_QTPROGENTAF             FLOAT;
    V_NRSEQCMPGER             VARCHAR2(10);
    V_NFSTATUSLI_GERAL        FLOAT;
    V_IDCONSSOLRELACAFNEC     PARASUPRI.IDCONSSOLRELACAFNEC%TYPE;
    V_QTJASOLICITADA2         FLOAT;
    V_QTPROGENTAF1            FLOAT;
    V_QTEFETENTRAF            FLOAT;
    V_QTEFETENTRAF1           FLOAT;
    V_IDCSSOLAFFORAPERICMP1   VARCHAR2(1);
BEGIN
    IF P_EXTRA IS NULL THEN
       V_EXTRA := 'N';
    ELSE
       V_EXTRA := P_EXTRA;
    END IF;

    BEGIN
      SELECT NVL(IDSISDOS, W_1), NVL(IDUTILDTPROC, W_N)
      INTO V_IDSISDOS, V_IDUTILDTPROC
      FROM PARAMGERAL;
    EXCEPTION
      WHEN NO_DATA_FOUND THEN BEGIN
        V_IDSISDOS:= W_1;
        V_IDUTILDTPROC:= W_N;
      END;
    END;

    IF P_CDPRODINI > P_CDPRODFIN THEN
       V_CDPRODINI := RPAD(P_CDPRODINI, 20, 'Z');
       V_CDPRODFIN := P_CDPRODFIN;
    ELSE
       V_CDPRODFIN := RPAD(P_CDPRODFIN, 20, 'Z');
       V_CDPRODINI := P_CDPRODINI;
    END IF;

    /* MONTAGEM DA QUERY PARA BUSCAR FILIAIS */
    IF (((P_TCDFILIAL <> 'T') OR (P_TCDFILIAL IS NULL)) AND (P_CDFILIAL IS NOT NULL)) THEN
      IF (LENGTH(P_CDFILIAL) > 6) THEN
        V_SQLFILTER:= ' WHERE INSTR(''' || P_CDFILIAL || ''', CDFILIAL) > 0 ';
      ELSE
        IF INSTR(P_CDFILIAL, '_') > 0 THEN
           V_FILIAL_UNICA:= SUBSTR(P_CDFILIAL, 2, LENGTH(P_CDFILIAL)-2);
        ELSE
           V_FILIAL_UNICA:= P_CDFILIAL;
        END IF;
        V_SQLFILTER:= ' WHERE  CDFILIAL = ''' || V_FILIAL_UNICA || '''';
      END IF;
    END IF;

    IF P_CDGRUPFILI IS NOT NULL THEN
      V_SQLF_GFILIAL:= '(SELECT CDFILIAL '     ||
                       '  FROM FILGRUPFILI '   ||
                       '  WHERE  CDGRUPFILI = ''' || P_CDGRUPFILI || ''') G, ';
      V_SQLW_GFILIAL:= ' G.CDFILIAL = F.CDFILIAL AND ';
    END IF;

    V_SQLFILIAL:= 'SELECT F.CDFILIAL AS COD_FILIAL_CORRENTE, NVL(PCMP.IDUTPRODPREF, ''' || W_N || '''),' ||
                  'NVL(PCMP.IDSCONESTNEC, ''' || W_N || '''), ' ||
                  'NVL(PCMP.IDMAPDISTALMOX, ''' || W_N || '''), ' ||
                  'NVL(P.IDEVOLESTONC, ''' || W_N || '''), ' ||
                  'DECODE('''||V_IDUTILDTPROC||''',  ''' || W_S || ''', NVL(PF.DTPROCESSA, TRUNC(SYSDATE)), TRUNC(SYSDATE)),' ||
                  'NVL(PF.IDUTILLOTE,'''|| W_N ||'''),'||
                  'NVL(P.IDCONSAFNECCMP,'''|| W_N ||''')'||
                  'FROM (SELECT CDFILIAL, NVL(CDFILCENTCMP, CDFILIAL) AS CDFILCENTCMP, IDCNTRRESC' ||
                  '      FROM FILIAL ' || V_SQLFILTER   || ' ) F, '  || V_SQLF_GFILIAL  ||
                  '      PARCMPSUP PCMP, PARASUPRI P, PARAMFILIAL PF '  ||
                  'WHERE ' || V_SQLW_GFILIAL            ||
                  '      P.CDFILIAL     = F.CDFILCENTCMP ' ||
                  '  AND F.CDFILIAL     = PCMP.CDFILIAL '  ||
                  '  AND F.IDCNTRRESC   = '''|| W_N ||'''' ||
                  '  AND PF.CDFILIAL(+) = F.CDFILIAL ';
    /* FIM -- MONTAGEM DA QUERY PARA BUSCAR FILIAIS */

    V_QTDESTOQUENEGCALC := 0;
    SELECT COUNT(*)
      INTO V_NFSTATUSLI_GERAL
      FROM NOTAFISCAL
     WHERE IDSTATUS   IN ('L', 'I');
    OPEN CUR_FILIAL FOR V_SQLFILIAL;
    LOOP
      FETCH CUR_FILIAL INTO V_FILIAL_CORRENTE, V_UTILIZAPRODPREF, V_IDESTOQUE, V_IDMAPDISTALMOX, V_IDEVOLESTONC, V_DTPROCESS, V_IDUTILLOTE, V_IDCONSAFNECCMP;
      EXIT WHEN CUR_FILIAL%NOTFOUND;
          V_SQLCPREV:= NULL;
          SELECT COUNT(*)
          INTO V_FILINECE
          FROM FILINECE
          WHERE CDFILIAL = V_FILIAL_CORRENTE;

          SELECT NVL(MAX(P.IDCSSOLAFFORAPERICMP), 'N'), NVL(MAX(IDCONSANTECPENDNECC), 'N'), NVL(MAX(IDDESCONSILIMCALCMP), 'N'), NVL(MAX(IDCONSSOLRELACAFNEC), 'N')
            INTO V_IDCSSOLAFFORAPERICMP, V_IDCONSANTECPENDNECC, V_IDDESCONSILIMCALCMP, V_IDCONSSOLRELACAFNEC
            FROM PARASUPRI P INNER JOIN FILIAL F ON P.CDFILIAL = NVL(F.CDFILCENTCMP, F.CDFILIAL)
           WHERE F.CDFILIAL = V_FILIAL_CORRENTE;

          -- PROCESSO EXCLUSIVO GR
          IF V_IDSISDOS = W_3 THEN
             V_IDCSSOLAFFORAPERICMP := 'N';
             INSERT INTO NECESSIDADE_TMP
                (NRNECECOMP,
                 CDFILIAL,
                 NRLANCTONF,
                 CDPRODUTO,
                 CDPRODESTO,
                 VRFATOCONV,
                 IDENTRADAAF)
             SELECT
                NRNECECOMP,
                CDFILIAL,
                NRLANCTONF,
                CDPRODUTO,
                CDPRODESTO,
                VRFATOCONV,
                MIN(IDENTRADAAF)
             FROM
                (SELECT /*+ORDERED*/
                 DISTINCT
                   P_NRNECECOMP AS NRNECECOMP,
                   NFRELACAF.CDFILIAL,
                   NFRELACAF.NRLANCTONF,
                   NFRELACAF.CDPRODUTO,
                   PRODUTO.CDPRODESTO,
                   PRODUTO.VRFATOCONV,
                   DECODE(TRUNC(V_DTPROCESS) - ITEMAUTF.DTPROGENTAF, ABS(TRUNC(V_DTPROCESS) - ITEMAUTF.DTPROGENTAF), W_P, W_A) IDENTRADAAF
                 FROM NFRELACAF, ITEMAUTF, PRODUTO
                 WHERE NFRELACAF.CDFILDEST = V_FILIAL_CORRENTE
                  AND ITEMAUTF.CDFILDEST   = NFRELACAF.CDFILDEST
                  AND ITEMAUTF.CDFILLANC   = NFRELACAF.CDFILLANC
                  AND ITEMAUTF.NRAUTOFORN  = NFRELACAF.NRAUTOFORN
                  AND ITEMAUTF.CDPRODUTO   = NFRELACAF.CDPRODUTO
                  AND ITEMAUTF.CDMARCA     = NFRELACAF.CDMARCA
                  AND ITEMAUTF.DTPROGENTAF = NFRELACAF.DTPROGENTAF
                  AND PRODUTO.CDPRODUTO    = NFRELACAF.CDPRODUTO)
             GROUP BY
                NRNECECOMP,
                CDFILIAL,
                NRLANCTONF,
                CDPRODUTO,
                CDPRODESTO,
                VRFATOCONV;
          END IF;

          IF V_FILINECE > 0 THEN
            V_SQLCPREV:=  'SELECT P.CDPRODESTO AS CDPRODUTO, P.CDARVPROD AS CDARVPRODUTO, P.VRFATOCONV ' ||
                           'FROM V_PREVISAO_COMPRA X, PRODUTO P ' ||
                           'WHERE X.CDFILIAL    = ''' || V_FILIAL_CORRENTE || ''' ' ||
                           '  AND X.DTPREVCONS >= ''' || V_DTPROCESS       || ''' ' ||
                           '  AND P.CDPRODUTO   = X.CDPRODUTO ' ||
                           '  AND P.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 = '''|| W_P  || '''  AND PRSUBGRPROD.CDPRODUTO   = P.CDPRODUTO)))';

            V_SQLCPREV:= V_SQLCPREV || ' UNION ' ||
                                       'SELECT ' ||
                                       '   ESTOSEGU.CDPRODESTO AS CDPRODUTO, ' ||
                                       '   PRODUTO.CDARVPROD, '||
                                       '   PRODUTO.VRFATOCONV '||
                                       'FROM '                 ||
                                       '   PRODUTO, '          ||
                                       '   ESTOSEGU '          ||
                                       'WHERE '                ||
                                       '   ESTOSEGU.CDFILIAL = ''' || V_FILIAL_CORRENTE  || ''' ' ||
                                       '   AND PRODUTO.CDPRODUTO = ESTOSEGU.CDPRODESTO ' ||
                                       '   AND PRODUTO.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 = '''|| W_P  || '''   AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO)))';

            V_SQLCPREV:= V_SQLCPREV || ' UNION ' ||
                                       'SELECT P.CDPRODESTO AS CDPRODUTO, P.CDARVPROD AS CDARVPRODUTO, P.VRFATOCONV ' ||
                                       'FROM V_PREVISAO_COMPRA_FILIAL X, PRODUTO P ' ||
                                       'WHERE X.CDFILIAL    = ''' || V_FILIAL_CORRENTE || ''' ' ||
                                       '  AND X.DTPREVCONS >= ''' || V_DTPROCESS       || ''' ' ||
                                       '  AND P.CDPRODUTO   = X.CDPRODUTO ' ||
                                       '  AND P.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 = '''|| W_P  || '''  AND PRSUBGRPROD.CDPRODUTO   = P.CDPRODUTO)))';
          ELSE
            V_SQLCPREV:= 'SELECT ' ||
                         '   ESTOSEGU.CDPRODESTO AS CDPRODUTO, ' ||
                         '   PRODUTO.CDARVPROD, '                ||
                         '   PRODUTO.VRFATOCONV '                 ||
                         'FROM '                                 ||
                         '   PRODUTO, '                          ||
                         '   ESTOSEGU '                          ||
                         'WHERE '                                ||
                         '   ESTOSEGU.CDFILIAL = ''' || V_FILIAL_CORRENTE  || ''' ' ||
                         '   AND PRODUTO.CDPRODUTO = ESTOSEGU.CDPRODESTO ' ||
                         '   AND PRODUTO.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 = '''|| W_P  || '''  AND PRSUBGRPROD.CDPRODUTO   = PRODUTO.CDPRODUTO)))';

            V_SQLCPREV:= V_SQLCPREV || ' UNION ' ||
                          'SELECT P.CDPRODESTO AS CDPRODUTO, P.CDARVPROD AS CDARVPRODUTO, P.VRFATOCONV ' ||
                          'FROM V_PREVISAO_COMPRA X, PRODUTO P ' ||
                          'WHERE X.CDFILIAL    = ''' || V_FILIAL_CORRENTE || ''' ' ||
                          '  AND X.DTPREVCONS >= ''' || V_DTPROCESS       || ''' ' ||
                          '  AND P.CDPRODUTO   = X.CDPRODUTO ' ||
                          '  AND P.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 = '''|| W_P  || '''  AND PRSUBGRPROD.CDPRODUTO   = P.CDPRODUTO)))';
          END IF;
          OPEN C_PREV FOR V_SQLCPREV;
          LOOP
            FETCH C_PREV INTO V_CODPRODUTO, V_CODARVPRODUTO, V_FATORCONVERSAO;
            EXIT WHEN C_PREV%NOTFOUND;
              SELECT
                 COUNT(*)
              INTO
                 V_PRODFILI
              FROM
                 PRODFILI
              WHERE
                 V_FILIAL_CORRENTE    = PRODFILI.CDFILIAL   AND
                 V_CODPRODUTO         = PRODFILI.CDPRODUTO  AND
                 NVL(PRODFILI.IDPRODATIV,'A') = 'A';
              IF V_PRODFILI > 0 THEN
                 /*Busca na tabela PERFILPROD pelos parametros de "utiliza dia nao util" e "situacao de entrega"*/
                     SELECT MAX(IDDNULIMSEGPR), MAX(IDSITUENTREGA)
                     INTO V_PERFILPROD_DNUTIL, V_PERFILPROD_SITENTR
                     FROM PERFILPROD PFP, PRODUTO PRO
                     WHERE PFP.CDPRODUTO = PRO.CDPRODUTO
                       AND PFP.CDFILIAL = V_FILIAL_CORRENTE
                       AND PRO.CDARVPROD =
                     ( SELECT MAX(CDARVPROD)
                       FROM PRODUTO PR, PERFILPROD PF
                       WHERE PR.CDPRODUTO = PF.CDPRODUTO
                         AND PF.CDFILIAL = V_FILIAL_CORRENTE
                         AND (INSTR(V_CODARVPRODUTO, PR.CDARVPROD) = 1));

                 V_PRODUTOPERFILPROD := NULL;
                 SELECT
                    MAX(B.CDARVPROD)
                 INTO V_PRODUTOPERFILPROD
                 FROM
                    PERFILPROD A,
                    PRODUTO B
                 WHERE
                    A.CDPRODUTO = B.CDPRODUTO       AND
                    A.CDFILIAL  = V_FILIAL_CORRENTE AND
                    INSTR(V_CODARVPRODUTO, B.CDARVPROD) = 1;

                 -- PROCESSO EXCLUSIVO GR
                 IF V_IDSISDOS = W_3 THEN
                   V_ENTRADADATA:= 0;
                   V_RETIRDATA:= 0;
                 ELSE
                    /* 2 - VERIFICA SE HOUVE ENTRADA PARA CONSIDERAR COMO ESTOQUE ENTREGUE */
                    SELECT NVL(SUM(DECODE(IDTIPOMOVI, 2, 1, 0)), 0) IDTIPOMOVI_2,
                           NVL(SUM(DECODE(IDTIPOMOVI, 3, 1, 0)), 0) IDTIPOMOVI_3
                    INTO V_ENTRADADATA, V_RETIRDATA
                    FROM ITLANCTOEST
                    WHERE CDFILIMOVI = V_FILIAL_CORRENTE
                      AND DTLANCMOVI = V_DTPROCESS
                      AND CDPRODMOVI = V_CODPRODUTO
                      AND IDTIPOMOVI IN (W_2, W_3);
                 END IF;
                 V_EHPRIMEIRAVEZPROD:= W_S;
                 V_PRIMEIRAENTFORAPERIODO:= W_S;
                 V_QTDESTOQUENEGCALC:= 0;
                 V_QTESTOQUENECCMP:= 0;
                 V_QTDESTOQUENEGATIVOIMPR:= 0;
                 V_DTPRIMEIRAENTREGA:= NULL;

                 IF V_IDDESCONSILIMCALCMP = 'N' THEN
                    OPEN C_PREV_DATA FOR
                       SELECT CALECOMP.DTENTREGA, CALECOMP.DTANTPROXENT, CALECOMP.CDPERIENTR,
                              W_N AS IDENTFORPERI
                       FROM PERFILPROD, CALECOMP, PRODUTO P
                       WHERE PERFILPROD.CDPRODUTO = P.CDPRODUTO
                         AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                         AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                         AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                         AND P.CDARVPROD = V_PRODUTOPERFILPROD
                         AND CALECOMP.DTENTREGA   BETWEEN V_DTPROCESS AND P_DTFINAL
                       UNION ALL
                       SELECT DISTINCT ITEMAUTF.DTPROGENTAF AS DTENTREGA, TO_DATE(NULL) AS DTANTPROXENT,
                                       LPAD(' ', 2, ' ') AS CDPERIENTR,  W_S  AS IDENTFORPERI
                       FROM PRODUTO P, AUTOFORNE, ITEMAUTF
                       WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                         AND V_IDSISDOS = W_3
                         AND AUTOFORNE.IDAFFORALIM  = W_N
                         AND AUTOFORNE.CDFILDEST    = ITEMAUTF.CDFILDEST
                         AND AUTOFORNE.CDFILLANC    = ITEMAUTF.CDFILLANC
                         AND AUTOFORNE.NRAUTOFORN   = ITEMAUTF.NRAUTOFORN
                         AND ITEMAUTF.CDPRODUTO     = P.CDPRODUTO
                         AND P.CDPRODESTO           = V_CODPRODUTO
                         AND AUTOFORNE.IDSITUATUAAF IS NULL
                         AND (ITEMAUTF.IDBAIXITMAF  IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                         AND ITEMAUTF.DTPROGENTAF   BETWEEN V_DTPROCESS AND P_DTFINAL
                         AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                         AND ITEMAUTF.DTPROGENTAF NOT IN (SELECT CALECOMP.DTENTREGA
                                                          FROM PERFILPROD, CALECOMP, PRODUTO
                                                          WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                            AND PERFILPROD.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                            AND CALECOMP.CDFILIAL    = ITEMAUTF.CDFILDEST
                                                            AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                            AND CALECOMP.DTENTREGA   BETWEEN V_DTPROCESS AND P_DTFINAL
                                                            AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD)
                       ORDER BY 1;
                 ELSE
                    OPEN C_PREV_DATA FOR
                       SELECT DTDATA, (SELECT MIN(D.DTDATA)-1
                                         FROM DATA D
                                        WHERE D.DTDATA > DATA.DTDATA
                                          /*AND NOT EXISTS (SELECT 1
                                                            FROM FERICOMP F
                                                           WHERE F.CDFILIAL   = V_FILIAL_CORRENTE
                                                             AND F.DTFERICOMP = D.DTDATA)*/),
                              '' CDPERIENTR,
                              W_N AS IDENTFORPERI
                         FROM DATA
                        WHERE DTDATA BETWEEN V_DTPROCESS AND P_DTFINAL
                          /*AND NOT EXISTS(SELECT 1
                                           FROM FERICOMP
                                          WHERE FERICOMP.CDFILIAL = V_FILIAL_CORRENTE
                                            AND FERICOMP.DTFERICOMP = DATA.DTDATA)*/
                       UNION ALL
                       SELECT DISTINCT ITEMAUTF.DTPROGENTAF AS DTENTREGA, TO_DATE(NULL) AS DTANTPROXENT,
                                       LPAD(' ', 2, ' ') AS CDPERIENTR,  W_S  AS IDENTFORPERI
                       FROM PRODUTO P, AUTOFORNE, ITEMAUTF
                       WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                         AND V_IDSISDOS = W_3
                         AND AUTOFORNE.IDAFFORALIM  = W_N
                         AND AUTOFORNE.CDFILDEST    = ITEMAUTF.CDFILDEST
                         AND AUTOFORNE.CDFILLANC    = ITEMAUTF.CDFILLANC
                         AND AUTOFORNE.NRAUTOFORN   = ITEMAUTF.NRAUTOFORN
                         AND ITEMAUTF.CDPRODUTO     = P.CDPRODUTO
                         AND P.CDPRODESTO           = V_CODPRODUTO
                         AND AUTOFORNE.IDSITUATUAAF IS NULL
                         AND (ITEMAUTF.IDBAIXITMAF  IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                         AND ITEMAUTF.DTPROGENTAF   BETWEEN V_DTPROCESS AND P_DTFINAL
                         AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                         AND ITEMAUTF.DTPROGENTAF IN (SELECT DTFERICOMP
                                                        FROM FERICOMP
                                                        WHERE FERICOMP.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                          AND FERICOMP.DTFERICOMP    = ITEMAUTF.DTPROGENTAF
                                                          AND FERICOMP.DTFERICOMP   BETWEEN V_DTPROCESS AND P_DTFINAL)
                       ORDER BY 1;

                 END IF;
                 LOOP
                   FETCH C_PREV_DATA INTO V_DTENTREGA, V_DTANTPROXENT, V_CDPERIENTR, V_IDENTRADAFORAPERIODO;
                   EXIT WHEN C_PREV_DATA%NOTFOUND;
                     -- FAZ CHECAGEM NAS FUNCOES DE LIMITE DE SEGURANCA
                     IF V_IDDESCONSILIMCALCMP = 'N' THEN
                        LIMISEGU_CONS_DNUT(V_FILIAL_CORRENTE, V_CODARVPRODUTO, V_DTENTREGA, V_CDPERIENTR, V_NRDIASEG, V_NRLIMISEGCAD);
                        LIMISEGU(V_FILIAL_CORRENTE, V_CODARVPRODUTO, V_DTANTPROXENT, V_CDPERIENTR, V_NRDIASEGANT, V_NRLIMISEGCAD);
                     END IF;
                     V_QTCONSUMOANTECIPADO:= 0;
                     V_QTCONSUMOANTECIPADOFILNECE:= 0;
                     V_QTCONSUMOPERIODO:= 0;
                     V_QTCONSUMOPERIODOFILNECE:= 0;
                     V_QTASERENTREGUE:= 0;
                     V_QTASERENTREGUEFILNECE:= 0;
                     IF (V_IDENTRADAFORAPERIODO = W_N) THEN
                       -- BUSCA O CONSUMO NO PERIODO.
                       -- V_QTCONSPERIOD
                       BEGIN
                         SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                         INTO V_QTCONSUMOPERIODO
                         FROM V_PREVISAO_COMPRA V_PREV
                         WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                           AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                           AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                           AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND V_DTANTPROXENT;
                       EXCEPTION
                         WHEN NO_DATA_FOUND THEN
                           V_QTCONSUMOPERIODO:= 0;
                       END;
                       BEGIN
                         IF V_FILINECE > 0 THEN
                           SELECT NVL(SUM(V_PREV.QTPREVCONS * P.VRFATOCONV), 0) QUANTIDADE
                           INTO V_QTCONSUMOPERIODOFILNECE
                           FROM V_PREVISAO_COMPRA_FILIAL V_PREV, PRODUTO P
                           WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                             AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                             AND P.CDPRODUTO       = V_PREV.CDPRODUTO
                             AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                             AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND V_DTANTPROXENT;
                         ELSE
                            V_QTCONSUMOPERIODOFILNECE:= 0;
                         END IF;
                       EXCEPTION
                         WHEN NO_DATA_FOUND THEN
                           V_QTCONSUMOPERIODOFILNECE:= 0;
                       END;
                       V_QTCONSUMOPERIODO:= V_QTCONSUMOPERIODO + V_QTCONSUMOPERIODOFILNECE;

                       IF V_NRDIASEG > 0 THEN
                          -- BUSCA O CONSUMO ANTECIPADO.
                          -- V_QTCONSANTECI
                          BEGIN
                            SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                            INTO V_QTCONSUMOANTECIPADO
                            FROM V_PREVISAO_COMPRA V_PREV
                            WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                              AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                              AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND (V_DTENTREGA + V_NRDIASEG - 1);
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTCONSUMOANTECIPADO:= 0;
                          END;

                          BEGIN
                            IF V_FILINECE > 0 THEN
                              SELECT NVL(SUM(V_PREV.QTPREVCONS * P.VRFATOCONV), 0) QUANTIDADE
                              INTO V_QTCONSUMOANTECIPADOFILNECE
                              FROM V_PREVISAO_COMPRA_FILIAL V_PREV, PRODUTO P
                              WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                AND P.CDPRODUTO       = V_PREV.CDPRODUTO
                                AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND (V_DTENTREGA + V_NRDIASEG - 1);
                            ELSE
                              V_QTCONSUMOANTECIPADOFILNECE:= 0;
                            END IF;
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTCONSUMOANTECIPADOFILNECE:= 0;
                          END;
                          V_QTCONSUMOANTECIPADO:= V_QTCONSUMOANTECIPADO + V_QTCONSUMOANTECIPADOFILNECE;
                       END IF;

                       -- BUSCA A QUANTIDADE A SER ENTREGUE.
                       -- V_QTASERENTREG
                       BEGIN
                        V_QTASERENTREGUE := NULL;
                        /* Entra quando estiver desmarcado o parametro "Verifica dia nao util na apuracao da necessidade de compras
                           utilizando limite de seguranca" ou quando estiver marcado o parametro "Antecipa Entrega" */
                        --IF NVL(V_PERFILPROD_SITENTR, 'A') <> 'D' THEN
                            SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                            INTO V_QTASERENTREGUE
                            FROM V_PREVISAO_COMPRA V_PREV
                            WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                              AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                              AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                              AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA + V_NRDIASEG AND (V_DTANTPROXENT + V_NRDIASEGANT)
                              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.CDPRODUTO   = V_PREV.CDPRODUTO)));
                        /* Entra quando estiver marcado o parametro "Verifica dia nao util na apuracao da necessidade de compras
                                utilizando limite de seguranca" e quando estiver marcado o parametro "Atrasa Entrega" */
                        /*ELSE
                           V_QTASERENTREGUE := 0;
                           V_QTCONSUMOANTECIPADO := 0;

                           IF (TO_NUMBER(V_NRLIMISEGCAD) < (V_DTANTPROXENT - V_DTENTREGA)) THEN
                              V_CONTROLE := (V_DTANTPROXENT - V_DTENTREGA);
                           ELSE
                              V_CONTROLE := TO_NUMBER(V_NRLIMISEGCAD);
                           END IF;

                           V_CONTTEMP := 0;
                           V_DTTEMP := NULL;
                           FOR V_CONTADOR IN 0..NVL(V_CONTROLE, 0)
                           LOOP
                              V_COMPARA := 0;
                              V_DTTESTE := V_DTENTREGA + V_CONTADOR;
                              V_DTATRASA := NULL;
                              V_DTATRASA2 := NULL;
                              --IF C_PREV_DATA.IDENTFORPERI = W_N THEN
                                 FOR V_CONTADOR2 IN 0..200
                                 LOOP
                                    BEGIN
                                       IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                       SELECT COUNT(1) INTO V_TESTE
                                       FROM CALECOMP
                                       WHERE CALECOMP.CDFILIAL   = V_FILIAL_CORRENTE
                                         AND (CALECOMP.DTENTREGA = V_DTTESTE - (TO_NUMBER(V_NRLIMISEGCAD) - V_COMPARA))
                                         AND CALECOMP.CDPERIENTR = V_CDPERIENTR
                                         AND NOT EXISTS(
                                                         SELECT DTFERICOMP
                                                         FROM FERICOMP FER, CALECOMP CAL
                                                         WHERE FER.CDFILIAL = V_FILIAL_CORRENTE
                                                           AND FER.CDFILIAL = CAL.CDFILIAL
                                                           AND CAL.DTENTREGA = CALECOMP.DTENTREGA
                                                           AND FER.DTFERICOMP = CAL.DTENTREGA
                                                           AND CAL.CDPERIENTR = V_CDPERIENTR
                                                         );

                                       ELSE
                                       SELECT COUNT(1) INTO V_TESTE
                                       FROM DATA
                                       WHERE (DATA.DTDATA = V_DTTESTE - (TO_NUMBER(V_NRLIMISEGCAD) - V_COMPARA));
                                      END IF;
                                    EXCEPTION
                                    WHEN NO_DATA_FOUND THEN
                                       V_TESTE := 0;
                                    END;

                                    IF (V_TESTE = 1) THEN
                                       IF V_COMPARA >= 0 THEN
                                          IF (V_DTTESTE - (TO_NUMBER(V_NRLIMISEGCAD) - V_COMPARA)) = V_DTENTREGA THEN
                                             V_DTATRASA := V_DTTESTE;
                                          END IF;
                                       ELSE
                                          V_DTATRASA := V_DTTESTE;
                                       END IF;
                                       EXIT;
                                    END IF;

                                    IF (V_COMPARA >= (TO_NUMBER(V_NRLIMISEGCAD))) THEN
                                       IF V_COMPARA > 0 THEN
                                          V_COMPARA := -V_COMPARA;
                                       END IF;
                                       V_COMPARA := V_COMPARA - 1;
                                    ELSE
                                       IF V_COMPARA >= 0 THEN
                                          V_COMPARA := V_COMPARA + 1;
                                       ELSE
                                          V_COMPARA := V_COMPARA - 1;
                                       END IF;
                                    END IF;
                                 END LOOP;
                              BEGIN
                                  SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                                  INTO V_QTDTEMP
                                  FROM V_PREVISAO_COMPRA V_PREV
                                  WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                    AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                    AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                                    AND V_PREV.DTPREVCONS = V_DTATRASA
                                    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.CDPRODUTO   = V_PREV.CDPRODUTO)));
                              EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_QTDTEMP := 0;
                              END;
                              V_QTASERENTREGUE := V_QTASERENTREGUE + V_QTDTEMP;

                             -- BUSCA O CONSUMO ANTECIPADO (ATRASA).
                             -- V_QTCONSANTECI
                             V_QTDTEMP := 0;
                             V_DTTESTE := (V_DTENTREGA  - 1) + (V_CONTADOR);
                             V_COMPARA := 0;

                             IF (V_DTTEMP IS NULL) THEN
                              IF V_CONTADOR <= TO_NUMBER(V_NRLIMISEGCAD) THEN
                                 BEGIN
                                    IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                    SELECT DTENTREGA INTO V_DTANTAUX
                                    FROM CALECOMP
                                    WHERE CDFILIAL   = P_CDFILIAL
                                      AND DTANTPROXENT = (V_DTTESTE)
                                      AND CDPERIENTR = V_CDPERIENTR;
                                    ELSE
                                    SELECT DTDATA INTO V_DTANTAUX
                                    FROM DATA
                                    WHERE DTDATA = (V_DTTESTE);
                                     END IF;
                                 EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_DTANTAUX := NULL;
                                 END;

                                 BEGIN
                                    IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                    SELECT COUNT(1) INTO V_TESTE
                                    FROM CALECOMP
                                    WHERE CALECOMP.CDFILIAL   = V_FILIAL_CORRENTE
                                      AND (CALECOMP.DTENTREGA = (V_DTANTAUX))
                                      AND CALECOMP.CDPERIENTR = V_CDPERIENTR
                                      AND NOT EXISTS(
                                                      SELECT DTFERICOMP
                                                      FROM FERICOMP FER, CALECOMP CAL
                                                      WHERE FER.CDFILIAL = V_FILIAL_CORRENTE
                                                        AND FER.CDFILIAL = CAL.CDFILIAL
                                                        AND CAL.DTENTREGA = CALECOMP.DTENTREGA
                                                        AND FER.DTFERICOMP = CAL.DTENTREGA
                                                        AND CAL.CDPERIENTR = V_CDPERIENTR
                                                      );
                                    ELSE
                                    SELECT COUNT(1) INTO V_TESTE
                                      FROM DATA
                                     WHERE (DATA.DTDATA = V_DTTESTE - (TO_NUMBER(V_NRLIMISEGCAD) - V_COMPARA));
                                      END IF;
                                 EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_TESTE := 0;
                                 END;

                                 IF (V_TESTE = 1) THEN
                                    IF (V_DTTESTE - V_DTANTAUX) < 1 THEN
                                       V_DTATRASA2 := V_DTTESTE;
                                    ELSE
                                       IF (V_DTTESTE - V_DTANTAUX) >= TO_NUMBER(V_NRLIMISEGCAD) THEN
                                          V_DTATRASA2 := V_DTANTAUX;
                                          V_DTTEMP := V_DTANTAUX +1;
                                       ELSE
                                          V_DTATRASA2 := NULL;
                                          V_DTTEMP := V_DTTESTE - 1;
                                          IF V_DTENTREGA <= V_DTANTAUX THEN
                                             V_DTATRASA2 := V_DTTESTE;
                                             V_DTTEMP := NULL;
                                          END IF;
                                       END IF;
                                    END IF;
                                 ELSE
                                    V_DTATRASA2 := NULL;
                                 END IF;
                              END IF;
                             ELSE
                                 V_COMPARA := 0;

                                 BEGIN
                                    IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                    SELECT COUNT(1) INTO V_TESTE
                                    FROM CALECOMP
                                    WHERE CALECOMP.CDFILIAL   = V_FILIAL_CORRENTE
                                      AND (CALECOMP.DTENTREGA = (V_DTTEMP + V_CONTTEMP))
                                      AND CALECOMP.CDPERIENTR = V_CDPERIENTR
                                      AND NOT EXISTS(
                                                      SELECT DTFERICOMP
                                                      FROM FERICOMP FER, CALECOMP CAL
                                                      WHERE FER.CDFILIAL = V_FILIAL_CORRENTE
                                                        AND FER.CDFILIAL = CAL.CDFILIAL
                                                        AND CAL.DTENTREGA = CALECOMP.DTENTREGA
                                                        AND FER.DTFERICOMP = CAL.DTENTREGA
                                                        AND CAL.CDPERIENTR = V_CDPERIENTR
                                                     );
                                    ELSE
                                    SELECT COUNT(1) INTO V_TESTE
                                      FROM DATA
                                     WHERE (DATA.DTDATA = V_DTTESTE - (TO_NUMBER(V_NRLIMISEGCAD) - V_COMPARA));
                                    END IF;
                                 EXCEPTION
                                 WHEN NO_DATA_FOUND THEN
                                    V_TESTE := 0;
                                 END;

                                 IF (V_TESTE = 1) THEN
                                    V_DTATRASA2 := V_DTTEMP + V_CONTTEMP;
                                 ELSE
                                    V_DTATRASA2 := NULL;
                                 END IF;

                                 V_CONTTEMP := V_CONTTEMP + 1;
                             END IF;
                             BEGIN
                               SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                               INTO V_QTDTEMP
                               FROM V_PREVISAO_COMPRA V_PREV
                               WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                 AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                 AND V_PREV.DTPREVCONS = V_DTATRASA2
                                 AND V_PREV.DTPREVCONS > (V_DTENTREGA - 1)
                                 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.CDPRODUTO   = V_PREV.CDPRODUTO)));
                             EXCEPTION
                               WHEN NO_DATA_FOUND THEN
                                 V_QTDTEMP:= 0;
                             END;
                             V_QTCONSUMOANTECIPADO := V_QTCONSUMOANTECIPADO + V_QTDTEMP;
                           END LOOP;
                        END IF; */
                       EXCEPTION
                         WHEN NO_DATA_FOUND THEN
                           V_QTASERENTREGUE:= 0;
                       END;

                       BEGIN
                         IF V_FILINECE > 0 THEN
                           SELECT NVL(SUM(V_PREV.QTPREVCONS * P.VRFATOCONV), 0) QUANTIDADE
                           INTO V_QTASERENTREGUEFILNECE
                           FROM V_PREVISAO_COMPRA_FILIAL V_PREV, PRODUTO P
                           WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                             AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                             AND P.CDPRODUTO       = V_PREV.CDPRODUTO
                             AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                             AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA + V_NRDIASEG AND (V_DTANTPROXENT + V_NRDIASEGANT);
                         ELSE
                            V_QTASERENTREGUEFILNECE:= 0;
                         END IF;
                       EXCEPTION
                         WHEN NO_DATA_FOUND THEN
                           V_QTASERENTREGUEFILNECE:= 0;
                       END;
                       V_QTASERENTREGUE:= V_QTASERENTREGUE + V_QTASERENTREGUEFILNECE;

                       IF V_QTCONSUMOPERIODO > 0 THEN
                         V_QTCONSUMOPERIODO:= V_QTCONSUMOPERIODO * (1 + (P_PEACRESCIMO / 100));
                       END IF;

                       IF V_QTCONSUMOANTECIPADO > 0 THEN
                         V_QTCONSUMOANTECIPADO:= V_QTCONSUMOANTECIPADO * (1 + (P_PEACRESCIMO / 100));
                       END IF;

                       IF V_QTASERENTREGUE > 0 THEN
                         V_QTASERENTREGUE:= V_QTASERENTREGUE * (1 + (P_PEACRESCIMO / 100));
                       END IF;

                     END IF;
                     IF V_IDDESCONSILIMCALCMP = 'N' THEN
                     SELECT MAX(DTENTREGA)
                     INTO V_DTMAXENTREGA
                     FROM CALECOMP
                     WHERE CDFILIAL   = V_FILIAL_CORRENTE
                       AND CDPERIENTR = V_CDPERIENTR
                       AND DTENTREGA  < V_DTENTREGA;
                     IF V_IDSISDOS = W_3 THEN
                       IF V_DTPRIMEIRAENTREGA IS NULL THEN
                         V_DTMAXENTREGA:= V_DTENTREGA - 1;
                       END IF;
                     END IF;

                     SELECT NVL(MAX(DTANTPROXENT), V_DTENTREGA)
                     INTO V_DTANTPROXENT_1
                     FROM CALECOMP
                     WHERE CDFILIAL   = V_FILIAL_CORRENTE
                       AND CDPERIENTR = V_CDPERIENTR
                       AND DTENTREGA  = V_DTENTREGA;

                     ELSE
                     SELECT MAX(D.DTDATA)+1
                       INTO V_DTMAXENTREGA
                       FROM DATA D
                      WHERE D.DTDATA < V_DTENTREGA
                        /*AND NOT EXISTS (SELECT 1
                                          FROM FERICOMP F
                                         WHERE F.CDFILIAL   = V_FILIAL_CORRENTE
                                           AND F.DTFERICOMP = D.DTDATA)*/;
                     IF V_IDSISDOS = W_3 THEN
                       IF V_DTPRIMEIRAENTREGA IS NULL THEN
                         V_DTMAXENTREGA:= V_DTENTREGA - 1;
                       END IF;
                     END IF;


                     SELECT MIN(D.DTDATA)-1
                       INTO V_DTANTPROXENT_1
                       FROM DATA D
                      WHERE D.DTDATA > V_DTENTREGA
                        /*AND NOT EXISTS (SELECT 1
                                          FROM FERICOMP F
                                         WHERE F.CDFILIAL   = V_FILIAL_CORRENTE
                                           AND F.DTFERICOMP = D.DTDATA)*/;
                     END IF;
                     V_DTMAXENTREGA_ADD1 := V_DTMAXENTREGA + 1;
                     -- PROCESSO EXCLUSIVO GR OU SE O PARAMETRO IDCONSAFNECCMP ESTIVER MARCADO
                     IF (V_IDSISDOS = W_3) OR (V_IDCONSAFNECCMP = W_S) THEN
                       IF (V_IDENTRADAFORAPERIODO = W_N) THEN
                         V_QTJASOLICITADA := 0;
                         BEGIN
                           /* "AF EM ABERTO" - APARTIR DA PRIMEIRA ENTREGA CALCULADA */
                           -- V_QTJASOLICITA
                           IF V_NFSTATUSLI_GERAL = 0 THEN  --05/11/2020
                              IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                 SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0) ) * PRODUTO.VRFATOCONV), 0)
                                 INTO V_QTJASOLICITADA
                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                   AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                   AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                   AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                   AND AUTOFORNE.IDAFFORALIM = W_N
                                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                                   AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                       WHEN V_IDSISDOS = W_3
                                                                       THEN V_DTMAXENTREGA_ADD1
                                                                       ELSE V_DTENTREGA
                                                                    END AND CASE
                                                                               WHEN V_IDSISDOS = W_3
                                                                               THEN V_DTENTREGA
                                                                               ELSE V_DTANTPROXENT_1
                                                                            END
                                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                   AND ITEMAUTF.DTPROGENTAF IN (SELECT CALECOMP.DTENTREGA
                                                                  FROM PERFILPROD, CALECOMP, PRODUTO
                                                                 WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                   AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                   AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                   AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                   AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                   AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1));
                              ELSE
                                 SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0) ) * PRODUTO.VRFATOCONV), 0)
                                 INTO V_QTJASOLICITADA
                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                   AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                   AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                   AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                   AND AUTOFORNE.IDAFFORALIM = W_N
                                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                                   AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                       WHEN V_IDSISDOS = W_3
                                                                       THEN V_DTMAXENTREGA_ADD1
                                                                       ELSE V_DTENTREGA
                                                                    END AND CASE
                                                                               WHEN V_IDSISDOS = W_3
                                                                               THEN V_DTENTREGA
                                                                               ELSE V_DTANTPROXENT_1
                                                                            END
                                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                   AND ITEMAUTF.DTPROGENTAF NOT IN (SELECT DTFERICOMP
                                                                      FROM FERICOMP
                                                                     WHERE FERICOMP.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                                       AND FERICOMP.DTFERICOMP    BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1));
                              END IF;
                           ELSE --05/11/2020
                              IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                 SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                                 INTO V_QTJASOLICITADA
                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                   AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                   AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                   AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                   AND (((NVL(ITEMAUTF.IDBAIXITMAF, W_0) IN (W_1,W_0)) AND (V_NFSTATUSLI_GERAL > 0)) OR (V_NFSTATUSLI_GERAL = 0)) /*ALTERACAO MANA dia 19/06/2020 - 193341*/
                                   AND AUTOFORNE.IDAFFORALIM = W_N
                                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                                   AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                       WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                       THEN V_DTMAXENTREGA_ADD1
                                                                       ELSE V_DTENTREGA
                                                                    END AND CASE
                                                                               WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                               THEN V_DTENTREGA
                                                                               ELSE V_DTANTPROXENT_1
                                                                            END
                                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                   AND (ITEMAUTF.DTPROGENTAF IN (SELECT CALECOMP.DTENTREGA
                                                                   FROM PERFILPROD, CALECOMP, PRODUTO
                                                                  WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                    AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                    AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                    AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                    AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                    AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)))
                                   AND NOT EXISTS (SELECT 1
                                        FROM NOTAFISCAL, ITEMPRODUTO, TIPOOPERAC, NFRELACAF
                                       WHERE NOTAFISCAL.NRLANCTONF = ITEMPRODUTO.NRLANCTONF
                                         AND NOTAFISCAL.CDFILIAL   = ITEMPRODUTO.CDFILIAL
                                         AND NOTAFISCAL.CDFILIRECE = V_FILIAL_CORRENTE
                                         AND NOTAFISCAL.IDSTATUS IN ('L', 'I')
                                         AND TIPOOPERAC.IDENTRSAIDOP = NOTAFISCAL.IDENTRSAIDOP
                                         AND TIPOOPERAC.CDTIPOOPER   = NOTAFISCAL.CDTIPOOPER
                                         AND TIPOOPERAC.IDATUESTTPOP = 'S'
                                         AND NOTAFISCAL.DTENTRSAID BETWEEN V_DTPROCESS -30 AND P_DTFINAL
                                         AND NOTAFISCAL.NRLANCTONF  = NFRELACAF.NRLANCTONF
                                         AND NOTAFISCAL.CDFILIAL    = NFRELACAF.CDFILIAL
                                         AND ITEMPRODUTO.CDPRODUTO  = NFRELACAF.CDPRODUTO
                                         AND NFRELACAF.CDFILDEST    = V_FILIAL_CORRENTE
                                         AND ITEMAUTF.CDFILDEST     = NFRELACAF.CDFILDEST
                                         AND ITEMAUTF.CDFILLANC     = NFRELACAF.CDFILLANC
                                         AND ITEMAUTF.NRAUTOFORN    = NFRELACAF.NRAUTOFORN
                                         AND ITEMAUTF.CDPRODUTO     = NFRELACAF.CDPRODUTO
                                         AND ITEMAUTF.CDMARCA       = NFRELACAF.CDMARCA
                                         AND ITEMAUTF.DTPROGENTAF   = NFRELACAF.DTPROGENTAF
                                         AND NFRELACAF.DTPROGENTAF BETWEEN V_DTPROCESS-30 AND V_DTPROCESS-1
                                         AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO);
                              ELSE
                                 SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                                 INTO V_QTJASOLICITADA
                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                   AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                   AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                   AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                   AND (((NVL(ITEMAUTF.IDBAIXITMAF, W_0) IN (W_1,W_0)) AND (V_NFSTATUSLI_GERAL > 0)) OR (V_NFSTATUSLI_GERAL = 0)) /*ALTERACAO MANA dia 19/06/2020 - 193341*/
                                   AND AUTOFORNE.IDAFFORALIM = W_N
                                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                                   AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                       WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                       THEN V_DTMAXENTREGA_ADD1
                                                                       ELSE V_DTENTREGA
                                                                    END AND CASE
                                                                               WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                               THEN V_DTENTREGA
                                                                               ELSE V_DTANTPROXENT_1
                                                                            END
                                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                   AND ITEMAUTF.DTPROGENTAF NOT IN (SELECT DTFERICOMP
                                                                      FROM FERICOMP
                                                                     WHERE FERICOMP.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                                       AND FERICOMP.DTFERICOMP    BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1))
                                   AND NOT EXISTS (SELECT 1
                                        FROM NOTAFISCAL, ITEMPRODUTO, TIPOOPERAC, NFRELACAF
                                       WHERE NOTAFISCAL.NRLANCTONF = ITEMPRODUTO.NRLANCTONF
                                         AND NOTAFISCAL.CDFILIAL   = ITEMPRODUTO.CDFILIAL
                                         AND NOTAFISCAL.CDFILIRECE = V_FILIAL_CORRENTE
                                         AND NOTAFISCAL.IDSTATUS IN ('L', 'I')
                                         AND TIPOOPERAC.IDENTRSAIDOP = NOTAFISCAL.IDENTRSAIDOP
                                         AND TIPOOPERAC.CDTIPOOPER   = NOTAFISCAL.CDTIPOOPER
                                         AND TIPOOPERAC.IDATUESTTPOP = 'S'
                                         AND NOTAFISCAL.DTENTRSAID BETWEEN V_DTPROCESS -30 AND P_DTFINAL
                                         AND NOTAFISCAL.NRLANCTONF  = NFRELACAF.NRLANCTONF
                                         AND NOTAFISCAL.CDFILIAL    = NFRELACAF.CDFILIAL
                                         AND ITEMPRODUTO.CDPRODUTO  = NFRELACAF.CDPRODUTO
                                         AND NFRELACAF.CDFILDEST    = V_FILIAL_CORRENTE
                                         AND ITEMAUTF.CDFILDEST     = NFRELACAF.CDFILDEST
                                         AND ITEMAUTF.CDFILLANC     = NFRELACAF.CDFILLANC
                                         AND ITEMAUTF.NRAUTOFORN    = NFRELACAF.NRAUTOFORN
                                         AND ITEMAUTF.CDPRODUTO     = NFRELACAF.CDPRODUTO
                                         AND ITEMAUTF.CDMARCA       = NFRELACAF.CDMARCA
                                         AND ITEMAUTF.DTPROGENTAF   = NFRELACAF.DTPROGENTAF
                                         AND NFRELACAF.DTPROGENTAF BETWEEN V_DTPROCESS-30 AND V_DTPROCESS-1
                                         AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO);
                              END IF;
                           END IF;--05/11/2020

                           V_QTJASOLICITADAFP := 0;
                           IF V_IDCSSOLAFFORAPERICMP = 'S' THEN
                              V_IDCSSOLAFFORAPERICMP1 := 'N';
                              IF (V_NFSTATUSLI_GERAL > 0) THEN
                                 V_IDCSSOLAFFORAPERICMP1 := 'S';
                              END IF;
                              IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                 SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                                 INTO V_QTJASOLICITADAFP
                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                                   AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                   AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                   AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                   AND (((NVL(ITEMAUTF.IDBAIXITMAF, W_0) IN (W_1,W_0)) AND (V_NFSTATUSLI_GERAL > 0)) OR (V_NFSTATUSLI_GERAL = 0)) /*ALTERACAO MANA dia 19/06/2020 - 193341*/
                                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                                   AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                       WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                       THEN V_DTMAXENTREGA_ADD1
                                                                       ELSE V_DTENTREGA
                                                                    END AND CASE
                                                                               WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                               THEN V_DTENTREGA
                                                                               ELSE V_DTANTPROXENT_1
                                                                            END
                                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                   AND (ITEMAUTF.DTPROGENTAF NOT IN (SELECT CALECOMP.DTENTREGA
                                                                       FROM PERFILPROD, CALECOMP, PRODUTO
                                                                      WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                        AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                        AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                        AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                        AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                        AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)));
                              END IF;
                           END IF;
                           V_QTJASOLICITADA := V_QTJASOLICITADA+V_QTJASOLICITADAFP;
                         EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                             V_QTJASOLICITADA:= 0;
                             V_QTJASOLICITADAFP := 0;
                         END;
                         V_QTJASOLICITADA1 := 0;
                         IF V_NFSTATUSLI_GERAL > 0 THEN
                            BEGIN
                               SELECT NVL(SUM((NVL(ITEMPRODUTO.QTITEMPROD,0)) * P.VRFATOCONV), 0)
                                  INTO V_QTJASOLICITADA1
                                  FROM NOTAFISCAL, ITEMPRODUTO, PRODUTO P, TIPOOPERAC
                                 WHERE NOTAFISCAL.NRLANCTONF = ITEMPRODUTO.NRLANCTONF
                                   AND NOTAFISCAL.CDFILIAL   = ITEMPRODUTO.CDFILIAL
                                   AND NOTAFISCAL.CDFILIRECE = V_FILIAL_CORRENTE
                                  AND ITEMPRODUTO.CDPRODUTO = P.CDPRODUTO
                                   AND P.CDPRODESTO =  V_CODPRODUTO
                                   AND NOTAFISCAL.IDSTATUS IN ('L', 'I')
                                   AND TIPOOPERAC.IDENTRSAIDOP = NOTAFISCAL.IDENTRSAIDOP
                                   AND TIPOOPERAC.CDTIPOOPER   = NOTAFISCAL.CDTIPOOPER
                                   AND TIPOOPERAC.IDATUESTTPOP = 'S'
                                   AND NOTAFISCAL.DTENTRSAID BETWEEN V_DTPROCESS -30 AND P_DTFINAL
                                   AND EXISTS (SELECT 1
                                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO, (SELECT NFRELACAF.CDFILIAL, NFRELACAF.NRLANCTONF, NFRELACAF.CDFILDEST, 
                                                                                            NFRELACAF.CDFILLANC, NFRELACAF.NRAUTOFORN, NFRELACAF.CDMARCA, 
                                                                                            NFRELACAF.CDPRODUTO, NFRELACAF.DTPROGENTAF DTPROGENTAF
                                                                                       FROM NFRELACAF, PRODUTO 
                                                                                      WHERE NFRELACAF.CDPRODUTO    = PRODUTO.CDPRODUTO
                                                                                        AND NFRELACAF.CDFILDEST    = V_FILIAL_CORRENTE
                                                                                        AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                                                                                        AND NFRELACAF.DTPROGENTAF  = (SELECT MIN(R.DTPROGENTAF)
                                                                                                                        FROM NFRELACAF R, PRODUTO P
                                                                                                                       WHERE R.CDPRODUTO            = P.CDPRODUTO
                                                                                                                         AND R.CDFILDEST            = V_FILIAL_CORRENTE
                                                                                                                         AND P.CDPRODESTO           = V_CODPRODUTO
                                                                                                                         AND NFRELACAF.CDFILIAL     = R.CDFILIAL
                                                                                                                         AND NFRELACAF.NRLANCTONF   = R.NRLANCTONF
                                                                                                                         AND NFRELACAF.CDFILDEST    = R.CDFILDEST
                                                                                                                         AND NFRELACAF.CDFILLANC    = R.CDFILLANC
                                                                                                                         AND NFRELACAF.CDMARCA      = R.CDMARCA)) NFRELACAF
                                                WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                                                  AND ITEMAUTF.CDFILDEST     = AUTOFORNE.CDFILDEST
                                                  AND ITEMAUTF.CDFILLANC     = AUTOFORNE.CDFILLANC
                                                  AND ITEMAUTF.NRAUTOFORN    = AUTOFORNE.NRAUTOFORN
                                                  AND ITEMAUTF.CDFILDEST     = NFRELACAF.CDFILDEST
                                                  AND ITEMAUTF.CDFILLANC     = NFRELACAF.CDFILLANC
                                                  AND ITEMAUTF.NRAUTOFORN    = NFRELACAF.NRAUTOFORN
                                                  AND ITEMAUTF.CDPRODUTO     = NFRELACAF.CDPRODUTO
                                                  AND ITEMAUTF.CDMARCA       = NFRELACAF.CDMARCA
                                                  AND ITEMAUTF.DTPROGENTAF   = NFRELACAF.DTPROGENTAF

                                                  AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO
                                                  AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                                                  AND NFRELACAF.NRLANCTONF   = NOTAFISCAL.NRLANCTONF
                                                  AND NFRELACAF.CDFILIAL     = NOTAFISCAL.CDFILIAL
                                                  AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                    WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                    THEN V_DTMAXENTREGA_ADD1
                                                                    ELSE V_DTENTREGA
                                                                 END AND CASE
                                                                            WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                            THEN V_DTENTREGA
                                                                            ELSE V_DTANTPROXENT_1
                                                                         END
                                                  AND ITEMAUTF.DTPROGENTAF >= V_DTPROCESS
                                                  AND (NVL(ITEMAUTF.IDBAIXITMAF, W_0) IN (W_1,W_2)));
                             EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                               V_QTJASOLICITADA1:= 0;
                             END;
                         END IF;
                         V_QTJASOLICITADA := V_QTJASOLICITADA + V_QTJASOLICITADA1;
                         /*AFs Futuras. Ou seja, a data de entrada da NF e superior a data de processamento da filial*/
                         IF V_NFSTATUSLI_GERAL = 0 THEN
                            BEGIN
                              IF V_IDDESCONSILIMCALCMP = 'N' THEN
                                 SELECT NVL(SUM(NVL(QTEFETENTRAF,0) * PRODUTO.VRFATOCONV), 0)
                                   INTO V_QTAFFUTURA
                                   FROM ITEMAUTF, PRODUTO
                                  WHERE ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                    AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                    AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                    AND NVL(QTEFETENTRAF, 0) > 0
                                    AND DTEFETENTAF > V_DTPROCESS
                                    AND ITEMAUTF.DTEFETENTAF BETWEEN CASE
                                                                        WHEN V_IDSISDOS = W_3
                                                                        THEN V_DTMAXENTREGA_ADD1
                                                                        ELSE V_DTENTREGA
                                                                     END AND CASE
                                                                                WHEN V_IDSISDOS = W_3
                                                                                THEN V_DTENTREGA
                                                                                ELSE V_DTANTPROXENT_1
                                                                             END
                                    AND NVL(ITEMAUTF.IDBAIXITMFUTURA, W_X) = W_S
                                    AND ITEMAUTF.DTPROGENTAF IN (SELECT CALECOMP.DTENTREGA
                                                                   FROM PERFILPROD, CALECOMP, PRODUTO
                                                                  WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                    AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                    AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                    AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                    AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                    AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1));
                               ELSE
                                  SELECT NVL(SUM(NVL(QTEFETENTRAF,0) * PRODUTO.VRFATOCONV), 0)
                                   INTO V_QTAFFUTURA
                                   FROM ITEMAUTF, PRODUTO
                                  WHERE ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                                    AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                                    AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                                    AND NVL(QTEFETENTRAF, 0) > 0
                                    AND DTEFETENTAF > V_DTPROCESS
                                    AND ITEMAUTF.DTEFETENTAF BETWEEN CASE
                                                                        WHEN V_IDSISDOS = W_3
                                                                        THEN V_DTMAXENTREGA_ADD1
                                                                        ELSE V_DTENTREGA
                                                                     END AND CASE
                                                                                WHEN V_IDSISDOS = W_3
                                                                                THEN V_DTENTREGA
                                                                                ELSE V_DTANTPROXENT_1
                                                                             END
                                    AND NVL(ITEMAUTF.IDBAIXITMFUTURA, W_X) = W_S
                                    AND ITEMAUTF.DTPROGENTAF NOT IN (SELECT DTFERICOMP
                                                                       FROM FERICOMP
                                                                      WHERE FERICOMP.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                                        AND FERICOMP.DTFERICOMP    BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1));
                               END IF;
                            EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                V_QTAFFUTURA:= 0;
                            END;
                         ELSE
                            SELECT NVL(SUM((NVL(ITEMPRODUTO.QTITEMPROD,0)) * P.VRFATOCONV), 0)
                              INTO V_QTAFFUTURA
                              FROM NOTAFISCAL, ITEMPRODUTO, PRODUTO P, TIPOOPERAC
                             WHERE NOTAFISCAL.NRLANCTONF = ITEMPRODUTO.NRLANCTONF
                               AND NOTAFISCAL.CDFILIAL   = ITEMPRODUTO.CDFILIAL
                               AND NOTAFISCAL.CDFILIRECE = V_FILIAL_CORRENTE
                               AND ITEMPRODUTO.CDPRODUTO = P.CDPRODUTO
                               AND P.CDPRODESTO =  V_CODPRODUTO
                               AND NOTAFISCAL.IDSTATUS NOT  IN ('L', 'I')
                               AND (NOTAFISCAL.DTENTRSAID > V_DTPROCESS)
                               AND TIPOOPERAC.IDENTRSAIDOP = NOTAFISCAL.IDENTRSAIDOP
                               AND TIPOOPERAC.CDTIPOOPER   = NOTAFISCAL.CDTIPOOPER
                               AND TIPOOPERAC.IDATUESTTPOP = 'S'
                               AND NOTAFISCAL.DTENTRSAID BETWEEN  V_DTMAXENTREGA_ADD1 AND V_DTENTREGA;
                         END IF;
                        --raise_application_error(-20501, V_QTAFFUTURA);
                         /*Pedidos do OL em aberto*/
                         BEGIN
                            SELECT NVL(SUM((QTPROGENPEOL - NVL(QTEFETENPEOL,0)) * PRODUTO.VRFATOCONV), 0)
                            INTO V_QTJASOLICPEXOL
                            FROM PEDIDOEXOL, ITEMPEDEXOL, PRODUTO
                            WHERE ITEMPEDEXOL.CDFILDEST = PEDIDOEXOL.CDFILDEST
                              AND ITEMPEDEXOL.CDFILLANC = PEDIDOEXOL.CDFILLANC
                              AND ITEMPEDEXOL.NRPEDEXOL = PEDIDOEXOL.NRPEDEXOL
                              AND ITEMPEDEXOL.CDPRODUTO = PRODUTO.CDPRODUTO
                              AND ITEMPEDEXOL.CDFILDEST = V_FILIAL_CORRENTE
                              AND PRODUTO.CDPRODESTO = V_CODPRODUTO
                              AND (ITEMPEDEXOL.IDBAIXENPEOL IS NULL OR ITEMPEDEXOL.IDBAIXENPEOL = W_1)
                              AND QTPROGENPEOL - NVL(QTEFETENPEOL, 0) > 0
                              AND NVL(ITEMPEDEXOL.IDITEMAJUSTE, 'N') = 'N'
                              AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_0) NOT IN (W_4, W_5)
                              AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_1) = W_1
                              AND ITEMPEDEXOL.DTPROGENPEOL BETWEEN CASE
                                                                      WHEN V_IDSISDOS = W_3
                                                                      THEN V_DTMAXENTREGA_ADD1
                                                                      ELSE V_DTENTREGA
                                                                   END AND CASE
                                                                              WHEN V_IDSISDOS = W_3
                                                                              THEN V_DTENTREGA
                                                                              ELSE V_DTANTPROXENT_1
                                                                           END;
                         EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                             V_QTJASOLICPEXOL:= 0;
                         END;
                         V_QTJASOLICITADA := V_QTJASOLICITADA + V_QTAFFUTURA + V_QTJASOLICPEXOL;
                       ELSE
                          /* "AF EM ABERTO" - APARTIR DA PRIMEIRA ENTREGA CALCULADA */
                          -- V_QTJASOLICITA
                          BEGIN
                            SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                            INTO V_QTJASOLICITADA
                            FROM AUTOFORNE, ITEMAUTF, PRODUTO
                            WHERE ITEMAUTF.CDFILDEST    = V_FILIAL_CORRENTE
                              AND PRODUTO.CDPRODESTO    = V_CODPRODUTO
                              AND ITEMAUTF.DTPROGENTAF  = V_DTENTREGA
                              AND ITEMAUTF.CDFILDEST    = AUTOFORNE.CDFILDEST
                              AND ITEMAUTF.CDFILLANC    = AUTOFORNE.CDFILLANC
                              AND ITEMAUTF.NRAUTOFORN   = AUTOFORNE.NRAUTOFORN
                              AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO
                              AND AUTOFORNE.IDAFFORALIM = W_N
                              AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                              AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                              AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                              AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                              AND AUTOFORNE.IDSITUATUAAF IS NULL;
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTJASOLICITADA:= 0;
                          END;
                          BEGIN
                            SELECT NVL(SUM(NVL(QTEFETENTRAF,0) * PRODUTO.VRFATOCONV), 0)
                            INTO V_QTAFFUTURA
                            FROM ITEMAUTF, PRODUTO
                            WHERE ITEMAUTF.CDFILDEST    = V_FILIAL_CORRENTE
                              AND PRODUTO.CDPRODESTO    = V_CODPRODUTO
                              AND ITEMAUTF.DTEFETENTAF  = V_DTENTREGA
                              AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO
                              AND NVL(QTEFETENTRAF, 0) > 0
                              AND DTEFETENTAF > V_DTPROCESS
                              AND NVL(ITEMAUTF.IDBAIXITMFUTURA, W_X) = W_S;
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTAFFUTURA:= 0;
                          END;
                          V_QTJASOLICITADA := V_QTJASOLICITADA + V_QTAFFUTURA;
                       END IF;
                        /* FIM - CALCULO PELA AF - UTILIZADO SOMENTE NA GR */
                     ELSE
                       /* CALCULO POR SOLICITACOES. UTILIZADO PELO RESTANTE DOS CLIENTES. */
                       -- V_QTJASOLICITA
                       IF V_IDCONSSOLRELACAFNEC = 'N' THEN
                          BEGIN
                            SELECT NVL(SUM(QTSOLIPROD * PRODUTO.VRFATOCONV), 0)
                            INTO V_QTJASOLICITADA
                            FROM SOLICITA, ITEMSOLI, PRODUTO
                            WHERE PRODUTO.CDPRODESTO   = V_CODPRODUTO
                              AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                              AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                              AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                              AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                              AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                              AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                              AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                              --AND ITEMSOLI.DTPROGENTR BETWEEN V_DTMAXENTREGA_ADD1 AND V_DTENTREGA ALIBRAS DIA 23/11
                              AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                                 WHEN V_IDSISDOS = W_3
                                                                 THEN V_DTMAXENTREGA_ADD1
                                                                 ELSE V_DTENTREGA
                                                              END AND CASE
                                                                         WHEN V_IDSISDOS = W_3
                                                                         THEN V_DTENTREGA
                                                                         ELSE V_DTANTPROXENT_1
                                                                      END
                              AND NOT EXISTS (SELECT 1
                                                FROM ITEMSOLI I
                                               WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                                 AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                                 AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                                 AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                                 AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP );
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTJASOLICITADA:= 0;
                          END;
                       ELSE
                          V_QTJASOLICITADA := 0;
                          V_QTJASOLICITADA2:= 0;
                          V_QTPROGENTAF1   := 0;
                          V_QTEFETENTRAF   := 0;
                          V_QTEFETENTRAF1  := 0;
                          BEGIN
                            /*Itens de solicitcaao sem AF*/
                            SELECT NVL(SUM(QTSOLIPROD * P.VRFATOCONV), 0)
                              INTO V_QTJASOLICITADA
                              FROM SOLICITA, ITEMSOLI, PRODUTO P
                             WHERE P.CDPRODESTO         = V_CODPRODUTO
                               AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                               AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                               AND ITEMSOLI.CDPRODUTO   = P.CDPRODUTO
                               AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                               AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                               AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                               AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                               --AND ITEMSOLI.DTPROGENTR BETWEEN V_DTMAXENTREGA_ADD1 AND V_DTENTREGA ALIBRAS DIA 23/11
                               AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                                  WHEN V_IDSISDOS = W_3
                                                                  THEN V_DTMAXENTREGA_ADD1
                                                                  ELSE V_DTENTREGA
                                                               END AND CASE
                                                                          WHEN V_IDSISDOS = W_3
                                                                          THEN V_DTENTREGA
                                                                          ELSE V_DTANTPROXENT_1
                                                                       END
                               AND NOT EXISTS (SELECT 1
                                                 FROM ITEMSOLI I
                                                WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                                  AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                                  AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                                  AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                                  AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP )
                               AND NOT EXISTS (SELECT 1
                                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                                WHERE ITEMAUTF.CDFILDEST    = ITEMSOLI.CDFILSOLI
                                                  AND PRODUTO.CDPRODESTO    = P.CDPRODESTO
                                                  AND NVL(ITEMAUTF.DTENTRITMSOL, ITEMAUTF.DTPROGENTAF) = ITEMSOLI.DTPROGENTR
                                                  AND ITEMAUTF.CDFILDEST    = AUTOFORNE.CDFILDEST
                                                  AND ITEMAUTF.CDFILLANC    = AUTOFORNE.CDFILLANC
                                                  AND ITEMAUTF.NRAUTOFORN   = AUTOFORNE.NRAUTOFORN
                                                  AND AUTOFORNE.IDAFFORALIM = W_N
                                                  --AND NVL(ITEMAUTF.IDBAIXITMAF, '1') IN ('1', '2')
                                                  --AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                                  AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5)
                                                  AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                                  AND AUTOFORNE.IDSITUATUAAF IS NULL
                                                  AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO);
                            /*Itens de solicitcaao com AF*/
                            SELECT NVL(SUM(QTSOLIPROD * P.VRFATOCONV), 0)
                              INTO V_QTJASOLICITADA2
                              FROM SOLICITA, ITEMSOLI, PRODUTO P
                             WHERE P.CDPRODESTO         = V_CODPRODUTO
                               AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                               AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                               AND ITEMSOLI.CDPRODUTO   = P.CDPRODUTO
                               AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                               AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                               AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                               AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                               --AND ITEMSOLI.DTPROGENTR BETWEEN V_DTMAXENTREGA_ADD1 AND V_DTENTREGA ALIBRAS DIA 23/11
                               AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                                  WHEN V_IDSISDOS = W_3
                                                                  THEN V_DTMAXENTREGA_ADD1
                                                                  ELSE V_DTENTREGA
                                                               END AND CASE
                                                                          WHEN V_IDSISDOS = W_3
                                                                          THEN V_DTENTREGA
                                                                          ELSE V_DTANTPROXENT_1
                                                                       END
                               AND NOT EXISTS (SELECT 1
                                                 FROM ITEMSOLI I
                                                WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                                  AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                                  AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                                  AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                                  AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP )
                               AND EXISTS (SELECT 1
                                             FROM AUTOFORNE, ITEMAUTF, PRODUTO
                                            WHERE ITEMAUTF.CDFILDEST    = ITEMSOLI.CDFILSOLI
                                              AND PRODUTO.CDPRODESTO    = P.CDPRODESTO
                                              AND NVL(ITEMAUTF.DTENTRITMSOL, ITEMAUTF.DTPROGENTAF) = ITEMSOLI.DTPROGENTR
                                              AND ITEMAUTF.CDFILDEST    = AUTOFORNE.CDFILDEST
                                              AND ITEMAUTF.CDFILLANC    = AUTOFORNE.CDFILLANC
                                              AND ITEMAUTF.NRAUTOFORN   = AUTOFORNE.NRAUTOFORN
                                              AND AUTOFORNE.IDAFFORALIM = W_N
                                              AND NVL(ITEMAUTF.IDBAIXITMAF, '1') IN ('1', '2')
                                              --AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                                              AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5)
                                              AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                                              AND AUTOFORNE.IDSITUATUAAF IS NULL
                                              AND ITEMAUTF.CDPRODUTO    = PRODUTO.CDPRODUTO);

                            /*Itens de AF com solicitacao*/
                            SELECT NVL(SUM((QTPROGENTAF) * PRODUTO.VRFATOCONV), 0), NVL(SUM(NVL(QTEFETENTRAF,0) * PRODUTO.VRFATOCONV), 0)
                              INTO V_QTPROGENTAF1, V_QTEFETENTRAF
                              FROM AUTOFORNE, ITEMAUTF, PRODUTO
                             WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                               AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                               AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                               AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                               AND NVL(ITEMAUTF.IDBAIXITMAF, '1') IN ('1', '2')
                               --AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                               --AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                               AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5)
                               AND AUTOFORNE.IDAFFORALIM = W_N
                               AND AUTOFORNE.IDSITUATUAAF IS NULL
                               AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                               AND NVL(ITEMAUTF.DTENTRITMSOL, ITEMAUTF.DTPROGENTAF)>= V_DTPROCESS
                               AND NVL(ITEMAUTF.DTENTRITMSOL, ITEMAUTF.DTPROGENTAF) BETWEEN CASE
                                                                                               WHEN V_IDSISDOS = W_3
                                                                                               THEN V_DTMAXENTREGA_ADD1
                                                                                               ELSE V_DTENTREGA
                                                                                            END AND CASE
                                                                                                       WHEN V_IDSISDOS = W_3
                                                                                                       THEN V_DTENTREGA
                                                                                                       ELSE V_DTANTPROXENT_1
                                                                                                    END
                               AND EXISTS (SELECT 1
                                             FROM SOLICITA, ITEMSOLI, PRODUTO P
                                            WHERE P.CDPRODESTO         = PRODUTO.CDPRODESTO
                                              AND ITEMSOLI.CDFILSOLI   = AUTOFORNE.CDFILDEST
                                              AND ITEMSOLI.DTPROGENTR  =  NVL(ITEMAUTF.DTENTRITMSOL, ITEMAUTF.DTPROGENTAF)
                                              AND ITEMSOLI.CDPRODUTO   = P.CDPRODUTO
                                              AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                                              AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                                              AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                                              AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N);
                            /*Itens de AF baixado antecipadamente*/
                            SELECT NVL(SUM(NVL(QTEFETENTRAF,0) * PRODUTO.VRFATOCONV), 0)
                              INTO V_QTEFETENTRAF1
                              FROM AUTOFORNE, ITEMAUTF, PRODUTO
                             WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                               AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                               AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                               AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                               AND NVL(ITEMAUTF.IDBAIXITMAF, '1') IN ('1', '2')
                               --AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5)
                               AND AUTOFORNE.IDAFFORALIM = W_N
                               AND AUTOFORNE.IDSITUATUAAF IS NULL
                               AND NVL(QTEFETENTRAF, 0) > 0
                               AND ITEMAUTF.DTEFETENTAF > V_DTPROCESS
                               AND ITEMAUTF.DTEFETENTAF BETWEEN CASE
                                                                   WHEN V_IDSISDOS = W_3
                                                                   THEN V_DTMAXENTREGA_ADD1
                                                                   ELSE V_DTENTREGA
                                                                END AND CASE
                                                                           WHEN V_IDSISDOS = W_3
                                                                           THEN V_DTENTREGA
                                                                           ELSE V_DTANTPROXENT_1
                                                                        END;
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTJASOLICITADA := 0;
                              V_QTJASOLICITADA2:= 0;
                              V_QTPROGENTAF1   := 0;
                              V_QTEFETENTRAF   := 0;
                              V_QTEFETENTRAF1  := 0;
                          END;
                          IF V_QTJASOLICITADA2 >= V_QTPROGENTAF1 THEN
                             /*Quando gerada a AF, se a quantidade da AF for menor ou igual que a da solicitacao:
                               deve ser considerado o saldo da solicitacao e a quantidade da AF baixada.*/
                             IF V_QTJASOLICITADA2-V_QTEFETENTRAF > 0 THEN
                                V_QTJASOLICITADA2 := V_QTJASOLICITADA2-V_QTEFETENTRAF;
                             ELSE
                                V_QTJASOLICITADA2 := 0;
                             END IF;
                             V_QTJASOLICITADA := V_QTJASOLICITADA + (V_QTJASOLICITADA2) + V_QTEFETENTRAF1;
                          ELSE
                             /*Quando gerada a AF, se a quantidade da AF for MAIOR que a solicitacao:
                               a solicitacao deixa de ser considerada e passa a considerar o saldo da quantidade da AF.*/
                             IF V_QTPROGENTAF1-V_QTEFETENTRAF > 0 THEN
                                V_QTPROGENTAF1 := V_QTPROGENTAF1 -V_QTEFETENTRAF;
                             ELSE
                                V_QTPROGENTAF1 := 0;
                             END IF;
                             V_QTJASOLICITADA := V_QTJASOLICITADA + V_QTPROGENTAF1 + V_QTEFETENTRAF1;
                          END IF;
                       END IF;
                     END IF;

                     V_QTPROGENTAF := 0;
                     V_QTSOLIPROD  := 0;
                     /*CONSUULTA A QUANTIDADE DE AF PARA SER EXIBIDO NA PREVIA CMP03802.QR2*/
                     SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                       INTO V_QTPROGENTAF
                       FROM AUTOFORNE, ITEMAUTF, PRODUTO
                      WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                        AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                        AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                        AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                        AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                        AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                        AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                        AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                        AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                        AND AUTOFORNE.IDAFFORALIM = W_N
                        AND AUTOFORNE.IDSITUATUAAF IS NULL
                        AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                            WHEN V_IDSISDOS = W_3
                                                            THEN V_DTMAXENTREGA_ADD1
                                                            ELSE V_DTENTREGA
                                                         END AND CASE
                                                                    WHEN V_IDSISDOS = W_3
                                                                    THEN V_DTENTREGA
                                                                    ELSE V_DTANTPROXENT_1
                                                                 END
                        AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N;

                     /*CONSUULTA A QUANTIDADE DE AF+PEDIDO OL PARA SER EXIBIDO NA PREVIA CMP03802.QR2*/
                     SELECT NVL(SUM((QTPROGENPEOL - NVL(QTEFETENPEOL,0)) * PRODUTO.VRFATOCONV), 0)+V_QTPROGENTAF
                       INTO V_QTPROGENTAF
                       FROM PEDIDOEXOL, ITEMPEDEXOL, PRODUTO
                      WHERE ITEMPEDEXOL.CDFILDEST = PEDIDOEXOL.CDFILDEST
                        AND ITEMPEDEXOL.CDFILLANC = PEDIDOEXOL.CDFILLANC
                        AND ITEMPEDEXOL.NRPEDEXOL = PEDIDOEXOL.NRPEDEXOL
                        AND ITEMPEDEXOL.CDPRODUTO = PRODUTO.CDPRODUTO
                        AND ITEMPEDEXOL.CDFILDEST = V_FILIAL_CORRENTE
                        AND PRODUTO.CDPRODESTO = V_CODPRODUTO
                        AND (ITEMPEDEXOL.IDBAIXENPEOL IS NULL OR ITEMPEDEXOL.IDBAIXENPEOL = W_1)
                        AND QTPROGENPEOL - NVL(QTEFETENPEOL, 0) > 0
                        AND NVL(ITEMPEDEXOL.IDITEMAJUSTE, 'N') = 'N'
                        AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_0) NOT IN (W_4, W_5)
                        AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_1) = W_1
                        AND ITEMPEDEXOL.DTPROGENPEOL BETWEEN CASE
                                                                WHEN V_IDSISDOS = W_3
                                                                THEN V_DTMAXENTREGA_ADD1
                                                                ELSE V_DTENTREGA
                                                             END AND CASE
                                                                        WHEN V_IDSISDOS = W_3
                                                                        THEN V_DTENTREGA
                                                                        ELSE V_DTANTPROXENT_1
                                                                     END;
                     IF V_IDCONSSOLRELACAFNEC = 'N' THEN
                        /*CONSUULTA A QUANTIDADE DE SOLICITACAO PARA SER EXIBIDO NA PREVIA CMP03802.QR2*/
                        SELECT NVL(SUM(QTSOLIPROD * PRODUTO.VRFATOCONV), 0)
                          INTO V_QTSOLIPROD
                          FROM SOLICITA, ITEMSOLI, PRODUTO
                         WHERE PRODUTO.CDPRODESTO   = V_CODPRODUTO
                           AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                           AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                           AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                           AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                           AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                           AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                           AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                           AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                              WHEN V_IDSISDOS = W_3
                                                              THEN V_DTMAXENTREGA_ADD1
                                                              ELSE V_DTENTREGA
                                                           END AND CASE
                                                                      WHEN V_IDSISDOS = W_3
                                                                      THEN V_DTENTREGA
                                                                      ELSE V_DTANTPROXENT_1
                                                                   END
                           AND NOT EXISTS (SELECT 1
                                             FROM ITEMSOLI I
                                            WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                              AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                              AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                              AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                              AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP );
                     ELSE
                        SELECT NVL(SUM(QTSOLIPROD * PRODUTO.VRFATOCONV), 0)
                          INTO V_QTSOLIPROD
                          FROM SOLICITA, ITEMSOLI, PRODUTO
                         WHERE PRODUTO.CDPRODESTO   = V_CODPRODUTO
                           AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                           AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                           AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                           AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                           AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                           AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                           AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                           AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                              WHEN V_IDSISDOS = W_3
                                                              THEN V_DTMAXENTREGA_ADD1
                                                              ELSE V_DTENTREGA
                                                           END AND CASE
                                                                      WHEN V_IDSISDOS = W_3
                                                                      THEN V_DTENTREGA
                                                                      ELSE V_DTANTPROXENT_1
                                                                   END
                           AND NOT EXISTS (SELECT 1
                                             FROM ITEMSOLI I
                                            WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                              AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                              AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                              AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                              AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP );
                     END IF;
                     V_NRSEQCMPGER := '';
                     IF V_IDCONSAFNECCMP = 'S' THEN
                        /*CONSUULTA SEQUENCIAL DE AF PARA SER EXIBIDO NA PREVIA CMP03802.QR2*/
                        BEGIN
                           SELECT MAX(AUTOFORNE.NRAUTOFORN)
                             INTO V_NRSEQCMPGER
                             FROM AUTOFORNE, ITEMAUTF, PRODUTO
                            WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                              AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                              AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                              AND ITEMAUTF.CDPRODUTO  = PRODUTO.CDPRODUTO
                              AND ITEMAUTF.CDFILDEST  = V_FILIAL_CORRENTE
                              AND PRODUTO.CDPRODESTO  = V_CODPRODUTO
                              AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                              AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                              AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                              AND AUTOFORNE.IDAFFORALIM = W_N
                              AND AUTOFORNE.IDSITUATUAAF IS NULL
                              AND ITEMAUTF.DTPROGENTAF BETWEEN CASE
                                                                  WHEN V_IDSISDOS = W_3
                                                                  THEN V_DTMAXENTREGA_ADD1
                                                                  ELSE V_DTENTREGA
                                                               END AND CASE
                                                                          WHEN V_IDSISDOS = W_3
                                                                          THEN V_DTENTREGA
                                                                          ELSE V_DTANTPROXENT_1
                                                                       END
                              AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                              AND (ITEMAUTF.DTPROGENTAF IN (SELECT CALECOMP.DTENTREGA
                                                              FROM PERFILPROD, CALECOMP, PRODUTO
                                                             WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                               AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                               AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                               AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                               AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                               AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)));
                        EXCEPTION
                           WHEN NO_DATA_FOUND THEN
                              V_NRSEQCMPGER := '';
                        END;
                        IF V_NRSEQCMPGER = NULL THEN
                           /*SE NAO EXISTIR SEQUENCIAL DE AF CONSUULTA SEQUENCIAL DE PEDIDO OL PARA SER EXIBIDO NA PREVIA CMP03802.QR2*/
                           BEGIN
                              SELECT MAX(ITEMPEDEXOL.NRPEDEXOL)
                                INTO V_NRSEQCMPGER
                                FROM PEDIDOEXOL, ITEMPEDEXOL, PRODUTO
                               WHERE ITEMPEDEXOL.CDFILDEST = PEDIDOEXOL.CDFILDEST
                                 AND ITEMPEDEXOL.CDFILLANC = PEDIDOEXOL.CDFILLANC
                                 AND ITEMPEDEXOL.NRPEDEXOL = PEDIDOEXOL.NRPEDEXOL
                                 AND ITEMPEDEXOL.CDPRODUTO = PRODUTO.CDPRODUTO
                                 AND ITEMPEDEXOL.CDFILDEST = V_FILIAL_CORRENTE
                                 AND PRODUTO.CDPRODESTO = V_CODPRODUTO
                                 AND (ITEMPEDEXOL.IDBAIXENPEOL IS NULL OR ITEMPEDEXOL.IDBAIXENPEOL = W_1)
                                 AND QTPROGENPEOL - NVL(QTEFETENPEOL, 0) > 0
                                 AND NVL(ITEMPEDEXOL.IDITEMAJUSTE, 'N') = 'N'
                                 AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_0) NOT IN (W_4, W_5)
                                 AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_1) = W_1
                                 AND ITEMPEDEXOL.DTPROGENPEOL BETWEEN CASE
                                                                         WHEN V_IDSISDOS = W_3
                                                                         THEN V_DTMAXENTREGA_ADD1
                                                                         ELSE V_DTENTREGA
                                                                      END AND CASE
                                                                                 WHEN V_IDSISDOS = W_3
                                                                                 THEN V_DTENTREGA
                                                                                 ELSE V_DTANTPROXENT_1
                                                                              END
                                 AND (ITEMPEDEXOL.DTPROGENPEOL IN (SELECT CALECOMP.DTENTREGA
                                                                     FROM PERFILPROD, CALECOMP, PRODUTO
                                                                    WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                      AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                      AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                      AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                      AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                      AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)));
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_NRSEQCMPGER := '';
                           END;
                        END IF;
                     ELSE
                        IF V_IDCONSSOLRELACAFNEC = 'N' THEN
                           BEGIN
                              SELECT MAX(SOLICITA.NRSOLICMP)
                                INTO V_NRSEQCMPGER
                                FROM SOLICITA, ITEMSOLI, PRODUTO
                               WHERE PRODUTO.CDPRODESTO   = V_CODPRODUTO
                                 AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                                 AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                                 AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                                 AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                                 AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                                 AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                                 AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                                 AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                                    WHEN V_IDSISDOS = W_3
                                                                    THEN V_DTMAXENTREGA_ADD1
                                                                    ELSE V_DTENTREGA
                                                                 END AND CASE
                                                                            WHEN V_IDSISDOS = W_3
                                                                            THEN V_DTENTREGA
                                                                            ELSE V_DTANTPROXENT_1
                                                                         END
                                 AND NOT EXISTS (SELECT 1
                                                   FROM ITEMSOLI I
                                                  WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                                    AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                                    AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                                    AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                                    AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP )
                                 AND (ITEMSOLI.DTPROGENTR IN (SELECT CALECOMP.DTENTREGA
                                                                FROM PERFILPROD, CALECOMP, PRODUTO
                                                               WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                 AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                 AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                 AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                 AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                 AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)));
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_NRSEQCMPGER := '';
                           END;
                        ELSE
                           BEGIN
                              SELECT MAX(SOLICITA.NRSOLICMP)
                                INTO V_NRSEQCMPGER
                                FROM SOLICITA, ITEMSOLI, PRODUTO
                               WHERE PRODUTO.CDPRODESTO   = V_CODPRODUTO
                                 AND ITEMSOLI.CDFILSOLI   = V_FILIAL_CORRENTE
                                 AND ITEMSOLI.DTPROGENTR >= V_DTPROCESS
                                 AND ITEMSOLI.CDPRODUTO   = PRODUTO.CDPRODUTO
                                 AND ITEMSOLI.CDFILSOLI   = SOLICITA.CDFILSOLI
                                 AND ITEMSOLI.CDFILLAN    = SOLICITA.CDFILLANCA
                                 AND ITEMSOLI.NRSOLICMP   = SOLICITA.NRSOLICMP
                                 AND NVL(SOLICITA.IDSOLEXTRA, W_N) = W_N
                                 AND ITEMSOLI.DTPROGENTR BETWEEN CASE
                                                                    WHEN V_IDSISDOS = W_3
                                                                    THEN V_DTMAXENTREGA_ADD1
                                                                    ELSE V_DTENTREGA
                                                                 END AND CASE
                                                                            WHEN V_IDSISDOS = W_3
                                                                            THEN V_DTENTREGA
                                                                            ELSE V_DTANTPROXENT_1
                                                                         END
                                 AND NOT EXISTS (SELECT 1
                                                   FROM ITEMSOLI I
                                                  WHERE I.DTPROGENCONS = ITEMSOLI.DTPROGENTR
                                                    AND I.CDPRODUTCONS = ITEMSOLI.CDPRODUTO
                                                    AND I.CDFILSOLCONS = ITEMSOLI.CDFILSOLI
                                                    AND I.CDFILLANCONS = ITEMSOLI.CDFILLAN
                                                    AND I.NRSOLCMPCONS = ITEMSOLI.NRSOLICMP )
                                 AND (ITEMSOLI.DTPROGENTR IN (SELECT CALECOMP.DTENTREGA
                                                                FROM PERFILPROD, CALECOMP, PRODUTO
                                                               WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                                 AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                                 AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                                 AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                                 AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                                 AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1)));
                           EXCEPTION
                              WHEN NO_DATA_FOUND THEN
                                 V_NRSEQCMPGER := '';
                           END;
                        END IF;
                     END IF;

                     IF V_QTJASOLICITADA IS NULL THEN
                       V_QTJASOLICITADA:= 0;
                     END IF;
                     /* Entra quando estiver marcado o parametro "Verifica dia nao util na apuracao da necessidade de compras
                        utilizando limite de seguranca" e quando estiver marcado o parametro "Atrasa Entrega" */
                     --IF NVL(V_PERFILPROD_SITENTR, 'A') <> 'D' THEN
                        IF V_FILINECE > 0 THEN
                           BEGIN
                             SELECT MIN(DTPREVCONS)
                             INTO V_DTPRIMEIRAUTILIZAPROD
                             FROM
                                (SELECT V_PREV.DTPREVCONS
                                 FROM V_PREVISAO_COMPRA_FILIAL V_PREV
                                 WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                   AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                   AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA + V_NRDIASEG AND (V_DTANTPROXENT + V_NRDIASEGANT)
                                 UNION ALL
                                 SELECT V_PREV.DTPREVCONS
                                 FROM V_PREVISAO_COMPRA V_PREV
                                 WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                   AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                   AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA + V_NRDIASEG AND (V_DTANTPROXENT + V_NRDIASEGANT)
                                 );
                           EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                               V_DTPRIMEIRAUTILIZAPROD:= NULL;
                           END;
                        ELSE
                           BEGIN
                             SELECT MIN(V_PREV.DTPREVCONS)
                             INTO V_DTPRIMEIRAUTILIZAPROD
                             FROM V_PREVISAO_COMPRA V_PREV
                             WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                               AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                               AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA + V_NRDIASEG AND (V_DTANTPROXENT + V_NRDIASEGANT);
                           EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                               V_DTPRIMEIRAUTILIZAPROD:= NULL;
                           END;
                        END IF;
                     /* Entra quando estiver desmarcado o parametro "Verifica dia nao util na apuracao da necessidade de compras
                        utilizando limite de seguranca" ou quando estiver marcado o parametro "Antecipa Entrega" */
                     /*ELSE
                        IF V_FILINECE > 0 THEN
                           BEGIN
                             SELECT MIN(DTPREVCONS)
                             INTO V_DTPRIMEIRAUTILIZAPROD
                              FROM
                                (SELECT V_PREV.DTPREVCONS
                                 FROM V_PREVISAO_COMPRA_FILIAL V_PREV
                                 WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                   AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                   AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND V_DTANTPROXENT
                                 UNION ALL
                                 SELECT V_PREV.DTPREVCONS
                                 FROM V_PREVISAO_COMPRA V_PREV
                                 WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                   AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                   AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND V_DTANTPROXENT
                                 );
                           EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                               V_DTPRIMEIRAUTILIZAPROD:= NULL;
                           END;
                        ELSE
                           BEGIN
                             SELECT MIN(V_PREV.DTPREVCONS)
                             INTO V_DTPRIMEIRAUTILIZAPROD
                             FROM V_PREVISAO_COMPRA V_PREV
                             WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                               AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                               AND V_PREV.DTPREVCONS BETWEEN V_DTENTREGA AND V_DTANTPROXENT;
                           EXCEPTION
                             WHEN NO_DATA_FOUND THEN
                               V_DTPRIMEIRAUTILIZAPROD:= NULL;
                           END;
                        END IF;
                     END IF;*/
                     IF V_EHPRIMEIRAVEZPROD = 'S' THEN
                       IF V_PRIMEIRAENTFORAPERIODO = 'S' THEN
                         V_QTESTAFPEND := 0;
                         V_QTESTAFPANT := 0;
                         V_QTESTAFPDEP := 0;
                         V_QTESTNFPEND := 0;
                         V_QTESTNFPEND1 := 0;
                         V_QTDAFANTPRIMEIRAENT := 0;
                       END IF;

                       IF V_DTPRIMEIRAENTREGA IS NULL THEN
                          V_QTDAFANTPRIMEIRAENT := V_QTDAFANTPRIMEIRAENT + V_QTESTOQUENECCMP;
                       END IF;

                       V_QTCONSUMOATEPENTREGA:= 0;
                       V_QTCONSUMOATEPENTREGAFILNECE:= 0;
                       V_QTESTOQUENECCMP:= 0;
                       V_QTDPRODUTOCONVCOMPRA:= 0;
                       V_QTDTEORICANECCOMPRA:= 0;
                       V_QTDESTOQUEUTILIZADO:= 0;
                       V_QTDESTOQUEATUAL:= 0;
                       V_QTDORIGINALNECCOMPRA:= 0;
                       V_QTDPRACOMPRAR:= 0;
                       V_QTESTOQUESEGURANCA:= 0;

                       -- QUANTIDADE CONSUMO ATE PRIMEIRA ENTREGA
                       -- V_QTCONATEPREN

                       IF (V_IDENTRADAFORAPERIODO = W_N) THEN
                          BEGIN
                            SELECT NVL(SUM(V_PREV.QTPREVCONS * V_FATORCONVERSAO), 0) QUANTIDADE
                            INTO V_QTCONSUMOATEPENTREGA
                            FROM V_PREVISAO_COMPRA V_PREV
                            WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                              AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                              AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S)
                              AND V_PREV.DTPREVCONS BETWEEN V_DTPROCESS AND (V_DTENTREGA - 1);
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTCONSUMOATEPENTREGA:= 0;
                          END;

                          BEGIN
                            IF V_FILINECE > 0 THEN
                              SELECT NVL(SUM(V_PREV.QTPREVCONS * P.VRFATOCONV), 0) QUANTIDADE
                              INTO V_QTCONSUMOATEPENTREGAFILNECE
                              FROM V_PREVISAO_COMPRA_FILIAL V_PREV, PRODUTO P
                              WHERE V_PREV.CDFILIAL   = V_FILIAL_CORRENTE
                                AND V_PREV.CDPRODUTO  = V_CODPRODUTO
                                AND P.CDPRODUTO       = V_PREV.CDPRODUTO
                                AND (V_PREV.DTPREVCONS <> V_DTPROCESS OR V_RETIRDATA = 0 OR V_IDESTOQUE <> W_S )
                                AND V_PREV.DTPREVCONS BETWEEN V_DTPROCESS AND (V_DTENTREGA - 1);
                            ELSE
                               V_QTCONSUMOATEPENTREGAFILNECE:= 0;
                            END IF;
                          EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                              V_QTCONSUMOATEPENTREGAFILNECE:= 0;
                          END;
                          V_QTCONSUMOATEPENTREGA:= V_QTCONSUMOATEPENTREGA + V_QTCONSUMOATEPENTREGAFILNECE;
                          V_DTPRIMEIRAENTREGA:= V_DTENTREGA;
                       END IF;
                       IF (V_IDESTOQUE = W_S) AND (V_DTPRIMEIRAENTREGA IS NOT NULL) THEN
                          -- SE CONSIDERA O ESTOQUE
                          -- PROCESSO EXCLUSIVO GR
                          SELECT DECODE(V_IDSISDOS, W_3, 0, 1)
                          INTO V_QTDIAESTOQUE
                          FROM DUAL;

                          --V_QTESTONECCMP

                          IF V_IDUTILLOTE = W_N THEN
                             POSICAO_ESTOQUE(V_FILIAL_CORRENTE, V_CODPRODUTO, V_DTPROCESS + V_QTDIAESTOQUE,
                                             V_QTESTOQUENECCMP, V_VALRESTO, V_VALRBRUT, W_N);
                          ELSE
                             SELECT
                                ROUND(CALC_ESTOQ_CONS(V_FILIAL_CORRENTE, V_CODPRODUTO, V_DTPROCESS + V_QTDIAESTOQUE), 3)
                             INTO
                                V_QTESTOQUENECCMP
                             FROM
                                DUAL;
                          END IF;
                       END IF;
                       V_QTDESTOQUEATUAL:= V_QTESTOQUENECCMP;

                       -- V_QTESTOSEGU
                       SELECT NVL(MAX(QTESTOSEGU), 0)
                       INTO V_QTESTOQUESEGURANCA
                       FROM ESTOSEGU
                       WHERE CDFILIAL   = V_FILIAL_CORRENTE
                         AND CDPRODESTO = V_CODPRODUTO;

                       -- PROCESSO EXCLUSIVO GR
                       IF (V_IDSISDOS = W_3) AND (V_PRIMEIRAENTFORAPERIODO = W_S) THEN
                          /* "AF PENDENTE" - ANTERIOR A PRIMEIRA ENTREGA CALCULADA, CONSIDERADO NO ESTOQUE INICIAL PARA ABATER O CONSUMO ATE A PRIMEIRA ENTREGA+ANTECIPADO */
                          IF V_IDCSSOLAFFORAPERICMP = 'N' THEN
                             SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                             INTO V_QTESTAFPEND
                             FROM AUTOFORNE, ITEMAUTF, PRODUTO
                             WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                               AND AUTOFORNE.IDAFFORALIM  = W_N
                               AND ITEMAUTF.CDFILDEST     = AUTOFORNE.CDFILDEST
                               AND ITEMAUTF.CDFILLANC     = AUTOFORNE.CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN    = AUTOFORNE.NRAUTOFORN
                               AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO
                               AND AUTOFORNE.IDSITUATUAAF IS NULL
                               AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                               AND ITEMAUTF.QTPROGENTAF - NVL(ITEMAUTF.QTEFETENTRAF, 0) > 0
                               AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                               AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                               AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS - 30 AND CASE
                                                                       WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                       THEN V_DTMAXENTREGA_ADD1-1
                                                                       ELSE V_DTENTREGA-1
                                                                    END
                               AND ITEMAUTF.DTPROGENTAF IN (SELECT CALECOMP.DTENTREGA
                                                              FROM PERFILPROD, CALECOMP, PRODUTO
                                                             WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                               AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                               AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                               AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                               AND PRODUTO.CDARVPROD    = V_PRODUTOPERFILPROD
                                                               AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1))
                               AND NOT EXISTS (SELECT 1
                                                 FROM AUTOFORNE A, ITEMAUTF I, PRODUTO P
                                                WHERE I.CDFILDEST  = A.CDFILDEST
                                                  AND I.CDFILLANC  = A.CDFILLANC
                                                  AND I.NRAUTOFORN = A.NRAUTOFORN
                                                  AND I.CDPRODUTO  = P.CDPRODUTO
                                                  AND I.CDFILDEST  = V_FILIAL_CORRENTE
                                                  AND P.CDPRODESTO  = V_CODPRODUTO
                                                  AND (I.IDBAIXITMAF IS NULL OR I.IDBAIXITMAF = W_1)
                                                  AND I.QTPROGENTAF - NVL(I.QTEFETENTRAF, 0) > 0
                                                  AND NVL(A.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                                  AND A.IDAFFORALIM = W_N
                                                  AND A.IDSITUATUAAF IS NULL
                                                  AND I.DTPROGENTAF BETWEEN CASE
                                                                               WHEN V_IDSISDOS = W_3
                                                                               THEN V_DTMAXENTREGA_ADD1
                                                                               ELSE V_DTENTREGA
                                                                            END AND CASE
                                                                                       WHEN V_IDSISDOS = W_3
                                                                                       THEN V_DTENTREGA
                                                                                       ELSE V_DTANTPROXENT_1
                                                                                    END
                                                  AND NVL(A.IDAFEXPIRADA, W_N) = W_N
                                                  AND I.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                  AND I.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                  AND I.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                                  AND I.CDPRODUTO  = ITEMAUTF.CDPRODUTO
                                                  AND I.CDMARCA  = ITEMAUTF.CDMARCA
                                                  AND I.DTPROGENTAF = ITEMAUTF.DTPROGENTAF);
                          ELSE
                             SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                             INTO V_QTESTAFPEND
                             FROM AUTOFORNE, ITEMAUTF, PRODUTO
                             WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                               AND AUTOFORNE.IDAFFORALIM  = W_N
                               AND ITEMAUTF.CDFILDEST     = AUTOFORNE.CDFILDEST
                               AND ITEMAUTF.CDFILLANC     = AUTOFORNE.CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN    = AUTOFORNE.NRAUTOFORN
                               AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO
                               AND AUTOFORNE.IDSITUATUAAF IS NULL
                               AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                               AND ITEMAUTF.QTPROGENTAF - NVL(ITEMAUTF.QTEFETENTRAF, 0) > 0
                               AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                               AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                               AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS - 30 AND CASE
                                                                       WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                       THEN V_DTMAXENTREGA_ADD1-1
                                                                       ELSE V_DTENTREGA-1
                                                                    END
                               AND ITEMAUTF.DTPROGENTAF IN (SELECT DTFERICOMP
                                                           FROM FERICOMP
                                                           WHERE FERICOMP.CDFILIAL  = ITEMAUTF.CDFILDEST
                                                             AND FERICOMP.DTFERICOMP    BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1))                                     
                               AND NOT EXISTS (SELECT 1
                                                 FROM AUTOFORNE A, ITEMAUTF I, PRODUTO P
                                                WHERE I.CDFILDEST  = A.CDFILDEST
                                                  AND I.CDFILLANC  = A.CDFILLANC
                                                  AND I.NRAUTOFORN = A.NRAUTOFORN
                                                  AND I.CDPRODUTO  = P.CDPRODUTO
                                                  AND I.CDFILDEST  = V_FILIAL_CORRENTE
                                                  AND P.CDPRODESTO  = V_CODPRODUTO
                                                  AND (I.IDBAIXITMAF IS NULL OR I.IDBAIXITMAF = W_1)
                                                  AND I.QTPROGENTAF - NVL(I.QTEFETENTRAF, 0) > 0
                                                  AND NVL(A.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                                                  AND A.IDAFFORALIM = W_N
                                                  AND A.IDSITUATUAAF IS NULL
                                                  AND I.DTPROGENTAF BETWEEN CASE
                                                                               WHEN V_IDSISDOS = W_3
                                                                               THEN V_DTMAXENTREGA_ADD1
                                                                               ELSE V_DTENTREGA
                                                                            END AND CASE
                                                                                       WHEN V_IDSISDOS = W_3
                                                                                       THEN V_DTENTREGA
                                                                                       ELSE V_DTANTPROXENT_1
                                                                                    END
                                                  AND NVL(A.IDAFEXPIRADA, W_N) = W_N
                                                  AND I.CDFILDEST  = ITEMAUTF.CDFILDEST
                                                  AND I.CDFILLANC  = ITEMAUTF.CDFILLANC
                                                  AND I.NRAUTOFORN = ITEMAUTF.NRAUTOFORN
                                                  AND I.CDPRODUTO  = ITEMAUTF.CDPRODUTO
                                                  AND I.CDMARCA    = ITEMAUTF.CDMARCA
                                                  AND I.DTPROGENTAF = ITEMAUTF.DTPROGENTAF);
                          END IF;
                          /* ENTRADA DE AF PENDENTE */
                          SELECT /*+ ordered INDEX(ITEMPRODUTO ITEMPRODUTO_01) */
                             NVL(SUM(ITEMPRODUTO.QTITEMPROD * A.VRFATOCONV), 0)
                          INTO V_QTESTAFPANT
                          FROM  NECESSIDADE_TMP A, NOTAFISCAL, ITEMPRODUTO
                          WHERE ITEMPRODUTO.CDFILIAL   = NOTAFISCAL.CDFILIAL
                            AND ITEMPRODUTO.NRLANCTONF = NOTAFISCAL.NRLANCTONF
                            AND NOTAFISCAL.CDFILIAL    = A.CDFILIAL
                            AND NOTAFISCAL.NRLANCTONF  = A.NRLANCTONF
                            AND ITEMPRODUTO.CDPRODUTO  = A.CDPRODUTO
                            AND A.NRNECECOMP           = P_NRNECECOMP
                            AND A.CDPRODESTO           = V_CODPRODUTO
                            AND NOTAFISCAL.DTENTRSAID  = V_DTPROCESS
                            AND A.IDENTRADAAF          = W_P;

                          /* BAIXA DE AF PENDENTE */
                          SELECT V_QTESTAFPANT + NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                          INTO V_QTESTAFPANT
                          FROM PRODUTO, ITEMAUTF
                          WHERE ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                            AND PRODUTO.CDPRODESTO   = V_CODPRODUTO
                            AND ITEMAUTF.CDFILDEST   = V_FILIAL_CORRENTE
                            AND ITEMAUTF.DTBAIXITMAF = V_DTPROCESS
                            AND ITEMAUTF.IDBAIXITMAF = W_3
                            AND ITEMAUTF.DTPROGENTAF < V_DTPROCESS;

                          /* ENTRADA DE AF ANTECIPADA */
                          SELECT /*+ ordered INDEX(ITEMPRODUTO ITEMPRODUTO_01) */
                             NVL(SUM(ITEMPRODUTO.QTITEMPROD * A.VRFATOCONV), 0)
                          INTO V_QTESTAFPDEP
                          FROM NECESSIDADE_TMP A, NOTAFISCAL, ITEMPRODUTO
                          WHERE ITEMPRODUTO.CDFILIAL   = NOTAFISCAL.CDFILIAL
                            AND ITEMPRODUTO.NRLANCTONF = NOTAFISCAL.NRLANCTONF
                            AND NOTAFISCAL.CDFILIAL    = A.CDFILIAL
                            AND NOTAFISCAL.NRLANCTONF  = A.NRLANCTONF
                            AND ITEMPRODUTO.CDPRODUTO  = A.CDPRODUTO
                            AND A.NRNECECOMP           = P_NRNECECOMP
                            AND A.CDPRODESTO           = V_CODPRODUTO
                            AND NOTAFISCAL.DTENTRSAID  = V_DTPROCESS
                            AND A.IDENTRADAAF          = W_A;

                          /* BAIXA DE AF ANTECIPADA */
                          SELECT V_QTESTAFPDEP + NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                          INTO V_QTESTAFPDEP
                          FROM PRODUTO, ITEMAUTF
                          WHERE ITEMAUTF.CDPRODUTO   = PRODUTO.CDPRODUTO
                            AND PRODUTO.CDPRODESTO   = V_CODPRODUTO
                            AND ITEMAUTF.CDFILDEST   = V_FILIAL_CORRENTE
                            AND ITEMAUTF.DTBAIXITMAF = V_DTPROCESS
                            AND ITEMAUTF.IDBAIXITMAF = W_3
                            AND ITEMAUTF.DTPROGENTAF > V_DTPROCESS;

                          V_PRIMEIRAENTFORAPERIODO := W_N;
                       ELSE
                          IF (V_IDCONSAFNECCMP = W_S) AND (V_PRIMEIRAENTFORAPERIODO = W_S) THEN
                             /* "AF PENDENTE" - ANTERIOR A PRIMEIRA ENTREGA CALCULADA, CONSIDERADO NO ESTOQUE INICIAL PARA ABATER O CONSUMO ATE A PRIMEIRA ENTREGA+ANTECIPADO */
                             SELECT NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * PRODUTO.VRFATOCONV), 0)
                             INTO V_QTESTAFPEND
                             FROM AUTOFORNE, ITEMAUTF, PRODUTO
                             WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                               AND AUTOFORNE.IDAFFORALIM  = W_N
                               AND ITEMAUTF.CDFILDEST     = AUTOFORNE.CDFILDEST
                               AND ITEMAUTF.CDFILLANC     = AUTOFORNE.CDFILLANC
                               AND ITEMAUTF.NRAUTOFORN    = AUTOFORNE.NRAUTOFORN
                               AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO
                               AND AUTOFORNE.IDSITUATUAAF IS NULL
                               AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                               AND ITEMAUTF.QTPROGENTAF - NVL(ITEMAUTF.QTEFETENTRAF, 0) > 0
                               AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                               AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                               AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS - 30 AND CASE
                                                                    WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                    THEN V_DTMAXENTREGA_ADD1-1
                                                                    ELSE V_DTENTREGA-1
                                                                 END;
                             SELECT NVL(SUM((QTPROGENPEOL - NVL(QTEFETENPEOL,0)) * PRODUTO.VRFATOCONV), 0)
                             INTO V_QTESTAFPEXOL
                             FROM PEDIDOEXOL, ITEMPEDEXOL, PRODUTO
                             WHERE ITEMPEDEXOL.CDFILDEST = V_FILIAL_CORRENTE
                               AND PRODUTO.CDPRODESTO = V_CODPRODUTO
                               AND ITEMPEDEXOL.CDFILDEST = PEDIDOEXOL.CDFILDEST
                               AND ITEMPEDEXOL.CDFILLANC = PEDIDOEXOL.CDFILLANC
                               AND ITEMPEDEXOL.NRPEDEXOL = PEDIDOEXOL.NRPEDEXOL
                               AND ITEMPEDEXOL.CDPRODUTO = PRODUTO.CDPRODUTO
                               AND (ITEMPEDEXOL.IDBAIXENPEOL  IS NULL OR ITEMPEDEXOL.IDBAIXENPEOL  = W_1)
                               AND ITEMPEDEXOL.QTPROGENPEOL - NVL(ITEMPEDEXOL.QTEFETENPEOL, 0) > 0
                               AND NVL(PEDIDOEXOL.IDBAIXEXOL, W_0) NOT IN (W_4, W_5)
                               AND NVL(ITEMPEDEXOL.IDITEMAJUSTE, 'N') = 'N'
                               AND ITEMPEDEXOL.DTPROGENPEOL BETWEEN V_DTPROCESS - 30 AND CASE
                                                                    WHEN V_IDCSSOLAFFORAPERICMP = 'S'
                                                                    THEN V_DTMAXENTREGA_ADD1-1
                                                                    ELSE V_DTENTREGA-1
                                                                 END;

                             V_QTESTAFPEND := V_QTESTAFPEND + V_QTESTAFPEXOL;

                             V_PRIMEIRAENTFORAPERIODO := W_N;
							                      IF V_NFSTATUSLI_GERAL > 0 THEN
                                SELECT NVL(SUM((NVL(ITEMPRODUTO.QTITEMPROD,0)) * P.VRFATOCONV), 0)
                                  INTO V_QTESTNFPEND
                                  FROM NOTAFISCAL, ITEMPRODUTO, PRODUTO P, TIPOOPERAC
                                 WHERE NOTAFISCAL.NRLANCTONF = ITEMPRODUTO.NRLANCTONF
                                   AND NOTAFISCAL.CDFILIAL   = ITEMPRODUTO.CDFILIAL
                                   AND NOTAFISCAL.CDFILIRECE = V_FILIAL_CORRENTE
                                   AND ITEMPRODUTO.CDPRODUTO = P.CDPRODUTO
                                   AND P.CDPRODESTO =  V_CODPRODUTO
                                   AND NOTAFISCAL.IDSTATUS IN ('L', 'I')
                                   AND TIPOOPERAC.IDENTRSAIDOP = NOTAFISCAL.IDENTRSAIDOP
                                   AND TIPOOPERAC.CDTIPOOPER   = NOTAFISCAL.CDTIPOOPER
                                   AND TIPOOPERAC.IDATUESTTPOP = 'S'
                                   AND NOTAFISCAL.DTENTRSAID BETWEEN V_DTPROCESS -30 AND P_DTFINAL
                                   AND EXISTS (SELECT 1
                                                 FROM AUTOFORNE, ITEMAUTF, PRODUTO, (SELECT NFRELACAF.CDFILIAL, NFRELACAF.NRLANCTONF, NFRELACAF.CDFILDEST, 
                                                                                            NFRELACAF.CDFILLANC, NFRELACAF.NRAUTOFORN, NFRELACAF.CDMARCA, 
                                                                                            NFRELACAF.CDPRODUTO, NFRELACAF.DTPROGENTAF
                                                                                       FROM NFRELACAF, PRODUTO
                                                                                      WHERE NFRELACAF.CDPRODUTO   = PRODUTO.CDPRODUTO
                                                                                        AND NFRELACAF.CDFILDEST   = V_FILIAL_CORRENTE
                                                                                        AND PRODUTO.CDPRODESTO    = V_CODPRODUTO
                                                                                        AND NFRELACAF.DTPROGENTAF = ((SELECT MIN(R.DTPROGENTAF)
                                                                                                                        FROM NFRELACAF R, PRODUTO P
                                                                                                                       WHERE R.CDPRODUTO            = P.CDPRODUTO
                                                                                                                         AND R.CDFILDEST            = V_FILIAL_CORRENTE
                                                                                                                         AND P.CDPRODESTO           = V_CODPRODUTO
                                                                                                                         AND NFRELACAF.CDFILIAL     = R.CDFILIAL
                                                                                                                         AND NFRELACAF.NRLANCTONF   = R.NRLANCTONF
                                                                                                                         AND NFRELACAF.CDFILDEST    = R.CDFILDEST
                                                                                                                         AND NFRELACAF.CDFILLANC    = R.CDFILLANC
                                                                                                                         AND NFRELACAF.CDMARCA      = R.CDMARCA
                                                                                                                         AND NFRELACAF.CDPRODUTO    = R.CDPRODUTO))) NFRELACAF
                                                WHERE ITEMAUTF.CDFILDEST     = V_FILIAL_CORRENTE
                                                  AND ITEMAUTF.CDFILDEST     = AUTOFORNE.CDFILDEST
                                                  AND ITEMAUTF.CDFILLANC     = AUTOFORNE.CDFILLANC
                                                  AND ITEMAUTF.NRAUTOFORN    = AUTOFORNE.NRAUTOFORN
                                                  AND ITEMAUTF.CDFILDEST     = NFRELACAF.CDFILDEST
                                                  AND ITEMAUTF.CDFILLANC     = NFRELACAF.CDFILLANC
                                                  AND ITEMAUTF.NRAUTOFORN    = NFRELACAF.NRAUTOFORN
                                                  AND ITEMAUTF.CDPRODUTO     = NFRELACAF.CDPRODUTO
                                                  AND ITEMAUTF.CDMARCA       = NFRELACAF.CDMARCA
                                                  AND ITEMAUTF.DTPROGENTAF   = NFRELACAF.DTPROGENTAF
                                                  AND NFRELACAF.NRLANCTONF   = NOTAFISCAL.NRLANCTONF
                                                  AND NFRELACAF.CDFILIAL     = NOTAFISCAL.CDFILIAL
                                                  AND ITEMAUTF.CDPRODUTO     = PRODUTO.CDPRODUTO
                                                  AND PRODUTO.CDPRODESTO     = V_CODPRODUTO
                                                  AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS-30 AND V_DTPROCESS-1
                                                  AND (NVL(ITEMAUTF.IDBAIXITMAF, W_0) IN (W_1,W_2)));

                             END IF;
                          END IF;
                       END IF;
                      
                       IF (V_DTPRIMEIRAENTREGA IS NOT NULL) THEN
                         V_QTESTOQUENECCMP:= (V_QTDAFANTPRIMEIRAENT + V_QTESTOQUENECCMP + V_QTESTAFPEND + V_QTESTAFPANT + V_QTESTAFPDEP + V_QTESTNFPEND) - V_QTCONSUMOATEPENTREGA;
                         V_EHPRIMEIRAVEZPROD:= W_N;
                       END IF;
                     END IF; -- IF PRIMEIRA VEZ DO PRODUTO.
                     -- V_QTESTNEGATIVIMPR
                     V_QTDESTOQUENEGATIVOIMPR:= V_QTESTOQUENECCMP;
                     IF V_IDSISDOS = W_3 THEN
                        IF V_QTESTOQUENECCMP < 0 THEN
                          V_QTESTOQUENECCMP:= 0;
                        END IF;
                     ELSE
                        V_UTILIZOU_JASOLI:= 'N';
                        IF V_QTESTOQUENECCMP < 0 THEN
                          IF V_QTESTOQUENECCMP + V_QTJASOLICITADA < 0 THEN
                             V_QTESTOQUENECCMP:= 0;
                             V_UTILIZOU_JASOLI:= 'N';
                          ELSE
                             V_QTESTOQUENECCMP:= V_QTESTOQUENECCMP + V_QTJASOLICITADA;
                             V_UTILIZOU_JASOLI:= 'S';
                          END IF;
                        ELSE
                           IF V_NFSTATUSLI_GERAL > 0 THEN
                              V_QTESTOQUENECCMP:= V_QTESTOQUENECCMP + V_QTJASOLICITADA;
                              V_UTILIZOU_JASOLI:= 'S';
                           END IF;   
                        END IF;
                     END IF;
                     
                     -- V_IDESTNEGATIVO
                     V_IDESTOQUENEGATIVO:= W_N;

                     -- PROCESSO EXCLUSIVO GR
                     IF (V_IDSISDOS = W_3) THEN
                       -- V_QTESTNEGATIVCALC
                       V_QTDESTOQUENEGCALC:= V_QTESTOQUENECCMP;
                       IF (V_QTESTOQUENECCMP - V_QTCONSUMOANTECIPADO) < 0 THEN
                         V_QTESTOQUENECCMP:= 0;
                         V_IDESTOQUENEGATIVO:= W_S;
                       END IF;
                     END IF;
                    
                     IF ((V_DTENTREGA <> V_DTPROCESS) OR (V_ENTRADADATA = 0) OR (V_IDESTOQUE <> W_S)) THEN
                        IF V_IDSISDOS = W_3 THEN
                           V_QTESTOQUENECCMP:= V_QTESTOQUENECCMP + V_QTJASOLICITADA;
                        ELSE
                           IF V_UTILIZOU_JASOLI = 'N' THEN
                              V_QTESTOQUENECCMP:= V_QTESTOQUENECCMP + V_QTJASOLICITADA;
                           END IF;
                        END IF;
                     END IF;
                     -- V_QTESTOUTILIZ  >>>>  V_QTDESTOQUEUTILIZADO
                     IF (V_DTENTREGA < P_DTINICIAL) OR (V_IDENTRADAFORAPERIODO = W_S) THEN
                       IF V_IDESTOQUENEGATIVO = W_N THEN -- ADRIANO NA GR
                         IF (V_QTESTOQUENECCMP - V_QTCONSUMOANTECIPADO) >= V_QTASERENTREGUE THEN
                            V_QTDESTOQUEUTILIZADO:= V_QTASERENTREGUE;
                         ELSE
                            V_QTDESTOQUEUTILIZADO:= V_QTESTOQUENECCMP - V_QTCONSUMOANTECIPADO;
                         END IF;
                       ELSE
                         IF (V_QTESTOQUENECCMP) >= V_QTASERENTREGUE THEN
                            V_QTDESTOQUEUTILIZADO:= V_QTASERENTREGUE;
                         ELSE
                            V_QTDESTOQUEUTILIZADO:= V_QTESTOQUENECCMP;
                         END IF;
                       END IF;
                     ELSE
                       IF V_IDESTOQUENEGATIVO = W_N THEN --ADRIANO NA GR
                         IF (V_QTESTOQUENECCMP - V_QTCONSUMOANTECIPADO - V_QTESTOQUESEGURANCA) >= V_QTASERENTREGUE THEN
                            V_QTDESTOQUEUTILIZADO:= V_QTASERENTREGUE;
                         ELSE
                            V_QTDESTOQUEUTILIZADO:= V_QTESTOQUENECCMP - V_QTCONSUMOANTECIPADO - V_QTESTOQUESEGURANCA;
                         END IF;
                       ELSE
                         IF (V_QTESTOQUENECCMP - V_QTESTOQUESEGURANCA) >= V_QTASERENTREGUE THEN
                            V_QTDESTOQUEUTILIZADO:= V_QTASERENTREGUE;
                         ELSE
                            V_QTDESTOQUEUTILIZADO:= V_QTESTOQUENECCMP - V_QTESTOQUESEGURANCA;
                         END IF;
                       END IF;
                     END IF;

                     IF V_IDCONSANTECPENDNECC = 'S' THEN
                        IF V_IDESTOQUE = 'S' THEN
                           IF V_QTDESTOQUEUTILIZADO < 0 THEN
                             V_QTDESTOQUEUTILIZADO:= 0;
                           END IF;
                        END IF;
                     ELSE
                        IF V_QTDESTOQUEUTILIZADO < 0 THEN
                           V_QTDESTOQUEUTILIZADO:= 0;
                        END IF;
                     END IF;

                     -- V_QTTEORNECCMP
                     V_QTDTEORICANECCOMPRA:= V_QTASERENTREGUE - V_QTDESTOQUEUTILIZADO;

                     -- V_QTORIGNECCMP
                     IF V_QTDTEORICANECCOMPRA < 0 THEN
                       V_QTDORIGINALNECCOMPRA:= 0;
                     ELSE
                       V_QTDORIGINALNECCOMPRA:= V_QTDTEORICANECCOMPRA;
                     END IF;

                     IF (V_IDENTRADAFORAPERIODO = W_N) AND (V_DTENTREGA >= P_DTINICIAL) THEN
                        IF V_QTESTOQUENECCMP < V_QTESTOQUESEGURANCA THEN
                           V_QTDORIGINALNECCOMPRA := V_QTDORIGINALNECCOMPRA + (V_QTESTOQUESEGURANCA - V_QTESTOQUENECCMP);
                        END IF;
                     END IF;

                     V_APENAS_CONSUMO := 0;
                     SELECT COUNT(*)
                     INTO V_APENAS_CONSUMO
                     FROM PRODUTO, PRODNECECOMP
                     WHERE PRODNECECOMP.CDFILIAL = V_FILIAL_CORRENTE
                       AND PRODUTO.CDPRODUTO     = PRODNECECOMP.CDPRODUTO
                       AND V_CODARVPRODUTO       LIKE PRODUTO.CDARVPROD || '%';

                     -- V_QTPRACOMPRAR
                     IF V_APENAS_CONSUMO = 0 THEN
                       SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(V_QTDORIGINALNECCOMPRA, '999999999999999.99999'), -2, 2)),
                                     0, 0, 0.001) + TRUNC(V_QTDORIGINALNECCOMPRA, 3)
                       INTO V_QTDPRACOMPRAR
                       FROM DUAL;
                     ELSE
                       SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(V_QTASERENTREGUE, '999999999999999.99999'), -2, 2)),
                                     0, 0, 0.001) + TRUNC(V_QTASERENTREGUE, 3)
                       INTO V_QTDPRACOMPRAR
                       FROM DUAL;
                     END IF;

                     V_CODPRODUTOPREF:= NULL;
                     IF V_UTILIZAPRODPREF = W_S THEN
                       BEGIN
                         SELECT PRODPREFMED.CDPRODPREF
                         INTO V_CODPRODUTOPREF
                         FROM PRODPREFMED
                         WHERE PRODPREFMED.CDFILIAL  = V_FILIAL_CORRENTE
                           AND PRODPREFMED.CDPRODUTO = V_CODPRODUTO;
                       EXCEPTION
                         WHEN NO_DATA_FOUND THEN
                           V_CODPRODUTOPREF:= NULL;
                       END;
                       IF V_CODPRODUTOPREF IS NOT NULL THEN
                          V_PRODFILI := 0;
                          SELECT
                             COUNT(*)
                          INTO
                             V_PRODFILI
                          FROM
                             PRODFILI
                          WHERE
                             (V_CODPRODUTOPREF  = PRODFILI.CDPRODUTO) AND
                             (V_FILIAL_CORRENTE = PRODFILI.CDFILIAL)  AND
                             (NVL(PRODFILI.IDPRODATIV,'A') = 'A');

                          IF (NOT(V_PRODFILI > 0)) THEN
                             INSERT INTO
                                TRABNECEINAT (NRNECCMPINAT, CDFILNECINAT, CDPRONECINAT)
                             SELECT
                                P_NRNECECOMP,
                                V_FILIAL_CORRENTE,
                                V_CODPRODUTOPREF
                             FROM
                                DUAL
                             WHERE
                                NOT EXISTS(SELECT 1
                                           FROM TRABNECEINAT
                                           WHERE NRNECCMPINAT = P_NRNECECOMP        AND
                                                 CDFILNECINAT = V_FILIAL_CORRENTE   AND
                                                 CDPRONECINAT = V_CODPRODUTOPREF
                                           );
                             V_CODPRODUTOPREF:= NULL;
                          END IF;
                       END IF;
                     END IF;

                     -- V_VRARREDCMP, V_VRFATOCONV
                     SELECT VRARREDCMP, VRFATOCONV
                     INTO V_VRARREDONDACMP, V_VRFATORCONVERSAO
                     FROM PRODUTO
                     WHERE CDPRODUTO = NVL(V_CODPRODUTOPREF, V_CODPRODUTO); -- ESTA VARIAVEL ESTARA SETADA COM O CODIGO DO PRODUTO OU PRODUTO PREFERENCIAL.

                     /* AS EXPRESSOES ABAIXO FORAM FEITAS PARA ARREDONDAR UM NUMERO PARA CIMA DEIXANDO 3 CASAS DECIMAIS.
                        EX:  0.00301 >> 0.004
                             0.00300 >> 0.003 */
                     IF (V_CODPRODUTOPREF IS NULL) OR (V_UTILIZAPRODPREF <> W_S) THEN
                         IF V_APENAS_CONSUMO = 0 THEN
                           IF MOD(V_QTDORIGINALNECCOMPRA, V_VRARREDONDACMP) <> 0 AND V_VRARREDONDACMP > 0 THEN
                             SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(CEIL(V_QTDORIGINALNECCOMPRA / V_VRARREDONDACMP) * V_VRARREDONDACMP, '999999999999999.99999'), -2, 2)),
                                           0, 0, 0.001) + TRUNC(CEIL(V_QTDORIGINALNECCOMPRA / V_VRARREDONDACMP) * V_VRARREDONDACMP, 3)
                             INTO V_QTDPRACOMPRAR
                             FROM DUAL;
                           END IF;
                         ELSE
                           IF MOD (V_QTASERENTREGUE, V_VRARREDONDACMP) <> 0 AND V_VRARREDONDACMP > 0 THEN
                             SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(CEIL(V_QTASERENTREGUE / V_VRARREDONDACMP) * V_VRARREDONDACMP, '999999999999999.99999'), -2, 2)),
                                           0, 0, 0.001) + TRUNC(CEIL(V_QTASERENTREGUE / V_VRARREDONDACMP) * V_VRARREDONDACMP, 3)
                             INTO V_QTDPRACOMPRAR
                             FROM DUAL;
                           END IF;
                         END IF;

                         SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(V_QTDPRACOMPRAR, '999999999999999.99999'), -2, 2)), 0, 0, 0.001) + TRUNC(V_QTDPRACOMPRAR, 3)
                         INTO V_QTDPRODUTOCONVCOMPRA
                         FROM DUAL;
                     ELSE
                         IF V_APENAS_CONSUMO = 0 THEN
                           SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR((V_QTDORIGINALNECCOMPRA / V_VRFATORCONVERSAO), '999999999999999.99999'), -2, 2)),
                                         0, 0, 0.001) + TRUNC((V_QTDORIGINALNECCOMPRA / V_VRFATORCONVERSAO), 3)
                           INTO V_QTDPRODUTOCONVCOMPRA
                           FROM DUAL;
                         ELSE
                           SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR((V_QTASERENTREGUE / V_VRFATORCONVERSAO), '999999999999999.99999'), -2, 2)),
                                         0, 0, 0.001) + TRUNC((V_QTASERENTREGUE / V_VRFATORCONVERSAO), 3)
                           INTO V_QTDPRODUTOCONVCOMPRA
                           FROM DUAL;
                         END IF;

                         IF MOD(V_QTDPRODUTOCONVCOMPRA, V_VRARREDONDACMP) <> 0 AND V_VRARREDONDACMP > 0 THEN
                           SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(CEIL(V_QTDPRODUTOCONVCOMPRA / V_VRARREDONDACMP) * V_VRARREDONDACMP, '999999999999999.99999'), -2, 2)),
                                         0, 0, 0.001) + TRUNC(CEIL(V_QTDPRODUTOCONVCOMPRA / V_VRARREDONDACMP) * V_VRARREDONDACMP, 3)
                           INTO V_QTDPRODUTOCONVCOMPRA
                           FROM DUAL;
                         END IF;

                         SELECT DECODE(TO_NUMBER(SUBSTR(TO_CHAR(V_QTDPRODUTOCONVCOMPRA*V_VRFATORCONVERSAO, '999999999999999.99999'), -2, 2)), 0, 0, 0.001) + TRUNC(V_QTDPRODUTOCONVCOMPRA*V_VRFATORCONVERSAO, 3)
                         INTO V_QTDPRACOMPRAR
                         FROM DUAL;

                     END IF;

                     IF V_CODPRODUTOPREF IS NULL THEN
                        V_CODPRODUTOPREF:= V_CODPRODUTO;
                     END IF;

                     -- V_IDMARCNECCMP
                     IF (V_DTENTREGA < P_DTINICIAL) OR (V_IDENTRADAFORAPERIODO = W_S) THEN
                       V_IDMARCNECCOMPRA:= W_N;
                     ELSE
                       SELECT MAX(DECODE(NVL(V_QTDPRODUTOCONVCOMPRA, 0), 0, W_N, W_S))
                       INTO V_IDMARCNECCOMPRA
                       FROM DUAL;
                     END IF;

                     IF TRUNC(V_QTDPRODUTOCONVCOMPRA, 3) = 0 THEN
                        V_QTDPRODUTOCONVCOMPRA:= 0;
                     END IF;

                     IF TRUNC(V_QTDPRACOMPRAR, 3) = 0 THEN
                        V_QTDPRACOMPRAR:= 0;
                     END IF;
                     IF (((V_QTDPRACOMPRAR IS NOT NULL) AND (V_QTDPRACOMPRAR > 0)) OR (P_IDQTDEZERO = W_S)) THEN
                         V_CDFILIOPELOG := NULL;
                         SELECT
                            MAX(P.CDFILIOPELOG)
                         INTO
                            V_CDFILIOPELOG
                         FROM
                            PARAMPRODSUP P
                         WHERE P.CDFILIAL = V_FILIAL_CORRENTE
                           AND P.CDPRODUTO = V_CODPRODUTOPREF
                           AND P.CDFILIOPELOG IS NOT NULL;

                         /* INSERE DADOS NA TABELA DE TRABALHO */
                         INSERT INTO TRABNECECOMP (CDFILNECECMP, NRNECECOMP, CDPRODNECCMP, DTENTRNECCMP,
                            DTANENNECCMP, QTCONATEPREN, QTESTOQATUAL, DTPRIUTIPROD, QTASERENTREG,
                            QTCONSPERIOD, QTCONSANTECI, QTESTONECCMP, QTESTOUTILIZ, QTJASOLICITA,
                            QTTEORNECCMP, QTORIGNECCMP, QTPRACOMPRAR, QTPRCNVCOMPR, QTESTAFPEND, QTESTNFPEND,
                            QTESTAFPANT,  QTESTAFPDEP,  IDMARCNECCMP, IDENTFORPERI, DTPRIMENTREG,
                            QTESTNEGATIV, NRDIASEGPROD, QTESTOSEGCAD, NRLIMISEGCAD, CDFILIOPELOG,
                            QTJASOLICITAFP, DTENTREGASEG, DTANTPROXENTSEG, QTSOLIPROD, QTPROGENTAF,
                            IDPREVIACONSAF, NRSEQCMPGER)
                         VALUES
                           (V_FILIAL_CORRENTE,       P_NRNECECOMP,  V_CODPRODUTOPREF,  -- FOI TROCADO PORQUE O CODIGO DO PRODUTO PREFERENCIAL ABRANGE AS DUAS VARIAVEIS.
                            V_DTENTREGA,             V_DTANTPROXENT,           V_QTCONSUMOATEPENTREGA, V_QTDESTOQUEATUAL,
                            V_DTPRIMEIRAUTILIZAPROD, V_QTASERENTREGUE,         V_QTCONSUMOPERIODO,     V_QTCONSUMOANTECIPADO,
                            V_QTESTOQUENECCMP,       V_QTDESTOQUEUTILIZADO,    V_QTJASOLICITADA,       V_QTDTEORICANECCOMPRA,
                            V_QTDORIGINALNECCOMPRA,  V_QTDPRACOMPRAR,          V_QTDPRODUTOCONVCOMPRA, V_QTESTAFPEND, V_QTESTNFPEND,
                            V_QTESTAFPANT,           V_QTESTAFPDEP,            V_IDMARCNECCOMPRA,      V_IDENTRADAFORAPERIODO,
                            V_DTPRIMEIRAENTREGA,     V_QTDESTOQUENEGATIVOIMPR, V_NRDIASEG,             V_QTESTOQUESEGURANCA,    V_NRLIMISEGCAD,    V_CDFILIOPELOG,
                            V_QTJASOLICITADAFP, V_DTENTREGA+V_NRDIASEG, V_DTANTPROXENT+V_NRDIASEGANT, V_QTSOLIPROD, V_QTPROGENTAF,
                            V_IDCONSAFNECCMP, V_NRSEQCMPGER);
                     END IF;

                     IF (V_IDEVOLESTONC = W_S) AND (V_IDMARCNECCOMPRA = W_N) THEN
                        IF V_IDESTOQUENEGATIVO = W_N THEN
                           V_QTESTOQUENECCMP:= V_QTESTOQUENECCMP - V_QTCONSUMOPERIODO;
                        ELSE
                           V_QTESTOQUENECCMP:= (V_QTESTOQUENECCMP + V_QTDESTOQUENEGCALC) - V_QTCONSUMOPERIODO;
                        END IF;
                     ELSE
                        IF V_IDESTOQUENEGATIVO = W_N THEN
                           V_QTESTOQUENECCMP:= (V_QTESTOQUENECCMP + V_QTDPRACOMPRAR) - V_QTCONSUMOPERIODO;
                        ELSE
                           V_QTESTOQUENECCMP:= (V_QTESTOQUENECCMP + V_QTDESTOQUENEGCALC + V_QTDPRACOMPRAR) - V_QTCONSUMOPERIODO;
                        END IF;
                     END IF;
                     IF (V_IDEVOLESTONC = W_S) THEN
                        IF V_QTESTOQUENECCMP < 0 THEN
                           V_QTESTOQUENECCMP:= 0;
                        END IF;
                     END IF;
                 END LOOP;
                 CLOSE C_PREV_DATA;
              ELSE
                 INSERT INTO
                    TRABNECEINAT (NRNECCMPINAT, CDFILNECINAT, CDPRONECINAT)
                 SELECT
                    P_NRNECECOMP,
                    V_FILIAL_CORRENTE,
                    V_CODPRODUTO
                 FROM
                    DUAL
                 WHERE
                    NOT EXISTS(SELECT 1
                               FROM TRABNECEINAT
                               WHERE NRNECCMPINAT = P_NRNECECOMP        AND
                                     CDFILNECINAT = V_FILIAL_CORRENTE   AND
                                     CDPRONECINAT = V_CODPRODUTO
                               );
              END IF;

          END LOOP;
          CLOSE C_PREV;

          /* INSERE OS DADOS DO CALCULO NA TABELA DE LOG */
          INSERT INTO LOGNECECOMP (CDFILIAL, CDOPERADOR, DTHRCALCNC, DTINICIALNC, DTFINALNC,
                        CDPRODINICNC, CDPRODFINANC, IDUTILESTONC, PEACRESCIMNC, NRNECECMPLOG, IDGERSOLEXTNCMP)
          VALUES (V_FILIAL_CORRENTE, P_CDOPERADOR, P_DTHRCALCNC, P_DTINICIAL, P_DTFINAL,
                  P_CDPRODINI, P_CDPRODFIN, V_IDESTOQUE, P_PEACRESCIMO, P_NRNECECOMP, V_EXTRA);

          /* INSERE OS DADOS REFERENTES AO MAPA DE DISTRIBUICAO POR ALMOXARIFADO DO VND */
          IF V_IDMAPDISTALMOX = 'S' THEN
             FOR C_PREVISAOVND IN
                (SELECT
                   PC_PDV.CDFILIAL,
                   PDV.CDLOJA,
                   P.CDPRODESTO AS CDPRODUTO,
                   LOJA.CDALMOXARIFE,
                   LOJA.CDLOCALESTOQ,
                   SUM(PC_PDV.QTPRODCONPDV*P.VRFATOCONV) AS QTPREVCONS
                 FROM PREVISAOPDV PDV, PREVCONSPDV PC_PDV, PRODUTO P, LOJA
                 WHERE PDV.NRSEQPREVPDV = PC_PDV.NRSEQPREVPDV
                  AND PC_PDV.CDPRODUTO = P.CDPRODUTO
                  AND PC_PDV.CDFILIAL = V_FILIAL_CORRENTE
                  AND PDV.CDFILIAL = V_FILIAL_CORRENTE
                  AND TRUNC(PDV.DTPREVCONPDV) BETWEEN V_DTPROCESS AND P_DTFINAL
                  AND PC_PDV.CDPRODUTO = P.CDPRODUTO
                  AND P.CDARVPROD BETWEEN V_CDPRODINI AND V_CDPRODFIN
                  AND LOJA.CDFILIAL = V_FILIAL_CORRENTE
                  AND LOJA.CDLOJA = PDV.CDLOJA
                 GROUP BY
                   PC_PDV.CDFILIAL,
                   PDV.CDLOJA,
                   P.CDPRODESTO,
                   LOJA.CDALMOXARIFE,
                   LOJA.CDLOCALESTOQ)
             LOOP
                V_QTESTOQUEVND := 0;
                IF C_PREVISAOVND.CDALMOXARIFE IS NOT NULL THEN
                   POSICAO_ESTOQUE(V_FILIAL_CORRENTE, V_CODPRODUTO, V_DTPROCESS + V_QTDIAESTOQUE,
                                   V_QTESTOQUEVND, V_VALRESTO, V_VALRBRUT, W_N,
                                   C_PREVISAOVND.CDALMOXARIFE, C_PREVISAOVND.CDLOCALESTOQ);
                ELSE
                   IF V_IDUTILLOTE = W_N THEN
                      POSICAO_ESTOQUE(V_FILIAL_CORRENTE, V_CODPRODUTO, V_DTPROCESS + V_QTDIAESTOQUE,
                                      V_QTESTOQUEVND, V_VALRESTO, V_VALRBRUT, W_N);
                   ELSE
                      SELECT
                         CALC_ESTOQ_CONS(V_FILIAL_CORRENTE, V_CODPRODUTO, V_DTPROCESS + V_QTDIAESTOQUE)
                      INTO
                         V_QTESTOQUENECCMP
                      FROM
                         DUAL;
                   END IF;
                END IF;

                SELECT NVL(NRRETMAXLOT,'9')
                  INTO V_NRRETMAXLOT
                  FROM PARAMAN
                 WHERE CDFILIAL = P_CDFILIAL;


                IF V_NRRETMAXLOT = '1' THEN
                  SELECT NVL(MAX(QTESTOQDIA),0) AS QTDEESTO,
                          P.NRLOTEESTQ
                   INTO V_QTDEESTO,
                        V_LOTE
                   FROM POSESTDIA P
                   WHERE (CDFILIAL     = P_CDFILIAL)     AND
                         (CDPRODUTO    = C_PREVISAOVND.CDPRODUTO)    AND
                         (DTPOSIESTQ = (SELECT MAX(DTPOSIESTQ)
                                        FROM POSESTDIA
                                        WHERE (CDFILIAL     = P_CDFILIAL)     AND
                                              (CDPRODUTO    = C_PREVISAOVND.CDPRODUTO)    AND
                                              (DTPOSIESTQ  <= V_DTPROCESS)))
                   GROUP BY P.NRLOTEESTQ;

                   IF C_PREVISAOVND.QTPREVCONS < V_QTDEESTO THEN
                      V_QTESTOQUEVND := 0;
                   END IF;
                END IF;

                   INSERT INTO MAPDISTALMOX (CDFILIAL, NRNECECMPMAP, CDLOJA,
                                             CDPRODUTO, DTINIMAPDIST, DTFINMAPDIST,
                                             QTPREVCONLOJ, QTESTOQUELOJ)
                   VALUES(V_FILIAL_CORRENTE, P_NRNECECOMP, C_PREVISAOVND.CDLOJA,
                          C_PREVISAOVND.CDPRODUTO, P_DTINICIAL, P_DTFINAL,
                          C_PREVISAOVND.QTPREVCONS, V_QTESTOQUEVND);
             END LOOP;
          END IF;

          IF V_IDSISDOS = W_3 THEN
             DELETE NECESSIDADE_TMP WHERE NRNECECOMP = P_NRNECECOMP;
          END IF;
          COMMIT;
          IF (V_IDCSSOLAFFORAPERICMP = 'S') AND (V_IDDESCONSILIMCALCMP = 'N') THEN
             FOR C_INSERT_ITEM IN (SELECT DISTINCT CDFILNECECMP, CDPRODESTO, CDPRODNECCMP
                                     FROM TRABNECECOMP, PRODUTO
                                    WHERE NRNECECOMP = P_NRNECECOMP
                                      AND CDFILNECECMP = V_FILIAL_CORRENTE  
                                      AND CDPRODNECCMP = CDPRODUTO)LOOP
              
                INSERT INTO TRABNECECOMP (CDFILNECECMP, NRNECECOMP, CDPRODNECCMP,
                                          DTENTRNECCMP, QTJASOLICITA, IDPREVIACONSAF, NRSEQCMPGER)
                SELECT ITEMAUTF.CDFILDEST, P_NRNECECOMP, C_INSERT_ITEM.CDPRODNECCMP, ITEMAUTF.DTPROGENTAF,
                       NVL(SUM((QTPROGENTAF - NVL(QTEFETENTRAF,0)) * P.VRFATOCONV), 0), V_IDCONSAFNECCMP, MAX(AUTOFORNE.NRAUTOFORN)
                  FROM AUTOFORNE, ITEMAUTF, PRODUTO P
                 WHERE ITEMAUTF.CDFILDEST  = AUTOFORNE.CDFILDEST
                   AND ITEMAUTF.CDFILLANC  = AUTOFORNE.CDFILLANC
                   AND ITEMAUTF.NRAUTOFORN = AUTOFORNE.NRAUTOFORN
                   AND AUTOFORNE.CDFILDEST = V_FILIAL_CORRENTE
                   AND ITEMAUTF.CDPRODUTO  = P.CDPRODUTO
                   AND ITEMAUTF.CDFILDEST  = C_INSERT_ITEM.CDFILNECECMP
                   AND P.CDPRODESTO  = C_INSERT_ITEM.CDPRODESTO
                   AND (ITEMAUTF.IDBAIXITMAF IS NULL OR ITEMAUTF.IDBAIXITMAF = W_1)
                   AND QTPROGENTAF - NVL(QTEFETENTRAF, 0) > 0
                   AND NVL(AUTOFORNE.IDBAIXAAF, W_0) NOT IN (W_4, W_5, W_6)
                   AND AUTOFORNE.IDAFFORALIM = W_N
                   AND AUTOFORNE.IDSITUATUAAF IS NULL
                   AND ITEMAUTF.DTPROGENTAF BETWEEN V_DTPROCESS AND P_DTFINAL
                   AND NVL(AUTOFORNE.IDAFEXPIRADA, W_N) = W_N
                   AND ITEMAUTF.DTPROGENTAF NOT IN (SELECT CALECOMP.DTENTREGA
                                                      FROM PERFILPROD, CALECOMP, PRODUTO
                                                     WHERE PERFILPROD.CDPRODUTO = PRODUTO.CDPRODUTO
                                                       AND PERFILPROD.CDFILIAL  = V_FILIAL_CORRENTE
                                                       AND CALECOMP.CDFILIAL    = PERFILPROD.CDFILIAL
                                                       AND CALECOMP.CDPERIENTR  = PERFILPROD.CDPERIENTR
                                                       AND P.CDARVPROD          LIKE PRODUTO.CDARVPROD||'%' 
                                                       AND CALECOMP.DTENTREGA BETWEEN V_DTPROCESS AND ADD_MONTHS(P_DTFINAL,1))
                   /*AND NOT EXISTS (SELECT 1
                                     FROM TRABNECECOMP T, PRODUTO P
                                    WHERE T.NRNECECOMP   = P_NRNECECOMP
                                      AND T.CDFILNECECMP = V_FILIAL_CORRENTE
                                      AND T.DTENTRNECCMP = ITEMAUTF.DTPROGENTAF
                                      AND T.CDPRODNECCMP = C_INSERT_ITEM.CDPRODNECCMP)*/
                GROUP BY ITEMAUTF.CDFILDEST, ITEMAUTF.DTPROGENTAF;
             END LOOP;
             COMMIT;
             FOR C_ITEM IN (SELECT NRNECECOMP, CDFILNECECMP, CDPRODNECCMP, DTENTRNECCMP
                              FROM TRABNECECOMP
                             WHERE NRNECECOMP = P_NRNECECOMP
                               AND QTESTOQATUAL IS NULL)
             LOOP
                SELECT NVL(MAX(QTESTOQATUAL), 0), NVL(MAX(QTCONATEPREN), 0),  NVL(MAX(QTESTAFPEND), 0),
                        NVL(MAX(QTESTNFPEND), 0),  NVL(MAX(NRLIMISEGCAD), 0),  NVL(MAX(QTESTOSEGCAD), 0)
                  INTO V_QTDESTOQUEATUAL, V_QTCONSUMOATEPENTREGA, V_QTESTAFPEND,
                       V_QTESTNFPEND, V_NRLIMISEGCAD, V_QTESTOQUESEGURANCA
                  FROM TRABNECECOMP
                  WHERE CDFILNECECMP = C_ITEM.CDFILNECECMP
                    AND NRNECECOMP     = C_ITEM.NRNECECOMP
                    AND CDPRODNECCMP   = C_ITEM.CDPRODNECCMP
                    AND QTESTOQATUAL IS NOT NULL;
                UPDATE TRABNECECOMP
                   SET QTESTOQATUAL   = V_QTDESTOQUEATUAL,
                       QTCONATEPREN   = V_QTCONSUMOATEPENTREGA,
                       QTESTAFPEND    =  V_QTESTAFPEND,
                       QTESTNFPEND    = V_QTESTNFPEND,
                       NRLIMISEGCAD   = V_NRLIMISEGCAD,
                       QTESTOSEGCAD   = V_QTESTOQUESEGURANCA
                 WHERE CDFILNECECMP   = C_ITEM.CDFILNECECMP
                   AND NRNECECOMP     = C_ITEM.NRNECECOMP
                   AND CDPRODNECCMP   = C_ITEM.CDPRODNECCMP
                   AND DTENTRNECCMP   = C_ITEM.DTENTRNECCMP;
             END LOOP;
             COMMIT;
          END IF;
    END LOOP; -- LOOP DA FILIAL
    CLOSE CUR_FILIAL;
END;
/