CREATE OR REPLACE FUNCTION QUERY_ITEM_DFS48000(P_FILOPELOG        IN VARCHAR2,   /*CDFILIOPELOG*/
                                               P_FILDEST          IN VARCHAR2,   /*CDFILDEST*/
                                               P_CDFILLANC        IN VARCHAR2,   /*CDFILLANC*/
                                               P_NRAUTOFORN       IN VARCHAR2,   /*NRAUTOFORN*/
                                               P_SUBGRUPO         IN VARCHAR2,   /* "T" OU  SUBGRUPO*/
                                               P_DATAENT          IN VARCHAR2,   /*"0 data de Entrega" OU "1 data de Embarque"*/
                                               P_DTENTREGA        IN DATE,       /*Data de entrega*/
                                               P_DTPROC           IN DATE,       /*Data de processamento*/
                                               P_PEDOLEXTR        IN VARCHAR2,   /*"S" ou "N" ou "T"*/
                                               P_CDLOTENVIOL      IN VARCHAR2,   /*Lista Lote, N?o considerada = 'N' e sem lote = 'T'*/
                                               P_IDBAIXAOLSAI     IN VARCHAR2,   /*"T" ou NULL*/
                                               P_IDUTILCONSSOLIOL IN VARCHAR2,    /*"S" ou "N"*/
                                               P_IDUTRESPEDXOL    IN VARCHAR2 DEFAULT NULL, /*"S" ou "N"*/
                                               P_DTSAIDANF        IN DATE DEFAULT NULL, /*Data de gera??o da NF*/
                                               P_GERA_NF          IN VARCHAR2 DEFAULT NULL,  /*Gera NF "S = Sim ou N = N?o"*/
                                               P_WEBSERVICE       IN VARCHAR2 DEFAULT NULL  /*Gera NF "S = Sim ou N = N?o"*/
                                               ) RETURN QUERY_ITEM_DFS48000_TABLE PIPELINED
IS
   OUT_RECORD QUERY_ITEM_DFS48000_TYPE := QUERY_ITEM_DFS48000_TYPE (NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, NULL,
                                                                    NULL, NULL, NULL, NULL, 0, 0,
                                                                    0, 0,0, 0, 0, 0, 0, 0, 0, 0,
                                                                    0, 0, 0, 0);
   TYPE CURTYPE      IS REF CURSOR;
   C_ITEM            CURTYPE;
   V_CDFILIAL        VARCHAR2(4);
   V_CDARVPROD       VARCHAR2(20);
   V_NMPRODUTO       VARCHAR2(50);
   V_CDPRODUTO       VARCHAR2(10);
   V_SGUNIDADE       VARCHAR2(10);
   V_CDMARCA         VARCHAR2(5);
   V_CDMARCAOL       VARCHAR2(5);
   V_CDMARCAAF       VARCHAR2(5);
   V_NMMARCA         VARCHAR2(20);
   V_NRAUTOFORN      VARCHAR2(10);
   V_CDFILLANC       VARCHAR2(4);
   V_NRLANCTONF      VARCHAR2(10);
   V_IDBAIXITAFS     VARCHAR2(1);
   V_CDFILDEST       VARCHAR2(4);
   V_IDUTILITEM      VARCHAR2(1);
   V_CDALMOXARIFE    VARCHAR2(6);
   V_CDLOCALESTOQ    VARCHAR2(6);
   V_NRLOTEESTQ      VARCHAR2(20);
   V_NRSUBLOTE       VARCHAR2(4);
   V_IDUTQTESTRANG   VARCHAR2(1);
   V_CDCLIENTEEXT    VARCHAR2(21);
   V_CDPRECOBASE     VARCHAR2(2);
   V_CDARVPRODOL     VARCHAR2(20);
   V_NMPRODUTOOL     VARCHAR2(50);
   V_CDPRODARVOL     VARCHAR2(10);
   V_NMPRODUTOEST    VARCHAR2(50);
   V_CDPRODUTOEST    VARCHAR2(50);
   V_CDARVPRODEST    VARCHAR2(20);
   V_DTPROGEMBARQ    DATE;
   V_DTPROGENTAF     DATE;
   V_DTPROGENPEOL    DATE;
   V_QTPROGENTAF     FLOAT;
   V_QTSAIDOPLOG     FLOAT;
   V_VRPREUNIAF      FLOAT;
   V_QTNFRELAFSAI    FLOAT;
   V_QTATENDPEDOL    FLOAT;
   V_VRPBRUTOPEDOL   FLOAT;
   V_VRPLIQUIPEDOL   FLOAT;
   V_QTATENDESTRANG  FLOAT;
   V_TIPOCUSTO       PARAMFILIAL.CDTIPCUSTEST%TYPE;
   V_QTESTOQDIA      FLOAT;
   V_QTRESERVESTOL   FLOAT;
   V_ESTOQ_DISPO     FLOAT;
   V_RESERVA_ITEM    FLOAT;
   V_DTPOSIESTQ      DATE;
   V_VRFATOCONVOL    FLOAT;
   V_CDPRODESTOOL    VARCHAR2(10);
   V_VRFATOCONV      FLOAT;
   V_NMFILIAL        VARCHAR2(30);
   V_COUNTAERRO      NUMBER;
   V_LISTAERRO       VARCHAR2(2000);
   V_QTSAIDANF       FLOAT;
   V_CDPRODCAIXA     VARCHAR2(10);
   V_CDFILIOPELOG    VARCHAR2(4);
   V_NMFILIOPELOG    VARCHAR2(100);
BEGIN
   SELECT MAX(CDFILIAL), MAX(NMFILIAL)
     INTO V_CDFILIOPELOG, V_NMFILIOPELOG
     FROM FILIAL
    WHERE CDFILIAL = P_FILOPELOG;
   IF P_IDUTILCONSSOLIOL = 'S' THEN  /*CONSULTA PEDIDO OL*/
      SELECT MAX(NVL(FP.CDPRECOBASE, NVL(FI.CDPRECOBASE, T.CDPRECOBASE)))
        INTO V_CDPRECOBASE
        FROM TIPOOPEROPL TL, TIPOOPERAC T, FILIAL FI, PARAMFILIAL PF, FILIAL FP,
             (SELECT P.CDFILDEST
                FROM PEDIDOEXOL P
               WHERE CASE NVL(P.CDCLIENTEEXT, 'O')
                        WHEN 'O'
                        THEN P.CDFILDEST
                        ELSE P.CDCLIENTEEXT
                     END             = P_FILDEST
                 AND P.CDFILLANC     = P_CDFILLANC
                 AND P.NRPEDEXOL     = P_NRAUTOFORN) PD
       WHERE TL.CDFILIOPELOG   = P_FILOPELOG
         AND TL.CDFILDEST      = PD.CDFILDEST
         AND TL.CDTIPOOPERSAID = T.CDTIPOOPER
         AND TL.IDTIPOOPERSAID = T.IDENTRSAIDOP
         AND TL.CDFILDEST      = FI.CDFILIAL
         AND TL.CDFILIOPELOG   = PF.CDFILIAL
         AND PF.CDFCUSNFROMA   = FP.CDFILIAL(+);

      SELECT QUERY_TIPOCUSTO_DFS48000(P_FILOPELOG)
        INTO V_TIPOCUSTO
        FROM DUAL;
      OPEN C_ITEM FOR
         SELECT P.CDFILDEST AS CDFILIAL, B.CDARVPROD,
                B.NMPRODUTO, I.CDPRODUTO, B.SGUNIDADE, I.CDMARCA, I.CDMARCA AS CDMARCAOL,
                I.CDMARCA AS CDMARCAAF, M.NMMARCA, I.QTPROGENPEOL AS QTPROGENTAF,
                DECODE(NVL(I.QTEFETENPEOL,0), 0, I.QTPROGENPEOL, I.QTEFETENPEOL) AS QTSAIDOPLOG,
                CASE (NVL(APURA_PRECOBASE (V_CDPRECOBASE, R.CDPRODARVOL, P_DTENTREGA), 0))
                   WHEN 0
                   THEN (CASE (NVL(CUSTO_PRODUTO_LCEST(NVL(PF.CDFCUSNFROMA,P_FILOPELOG), E.CDPRODESTO, V_TIPOCUSTO, (TO_DATE(P_DTPROC) - 1), SYSDATE,
                                        NVL(ETQ.CDALMOXARIFE, ' '), NVL(ETQ.CDLOCALESTOQ, ' '), NVL(ETQ.NRLOTEESTQ, ' '),
                                        NVL(ETQ.NRSUBLOTE, ' ')), 0) * (CASE E.CDPRODESTO WHEN E.CDPRODUTO THEN 1 ELSE B.VRFATOCONV END))
                            WHEN 0
                            THEN (NVL(CUSTO_PRODUTO(NVL(PF.CDFCUSNFROMA,P_FILOPELOG), E.CDPRODESTO, V_TIPOCUSTO, P_DTPROC, SYSDATE), 0) * (CASE E.CDPRODESTO WHEN E.CDPRODUTO THEN 1 ELSE B.VRFATOCONV END))
                            ELSE (NVL(CUSTO_PRODUTO_LCEST(NVL(PF.CDFCUSNFROMA,P_FILOPELOG), E.CDPRODESTO, V_TIPOCUSTO, (TO_DATE(P_DTPROC) - 1), SYSDATE,
                                        NVL(ETQ.CDALMOXARIFE, ' '), NVL(ETQ.CDLOCALESTOQ, ' '), NVL(ETQ.NRLOTEESTQ, ' '),
                                        NVL(ETQ.NRSUBLOTE, ' ')), 0) * (CASE E.CDPRODESTO WHEN E.CDPRODUTO THEN 1 ELSE B.VRFATOCONV END)) END
                        )
                   ELSE (NVL(APURA_PRECOBASE (V_CDPRECOBASE, R.CDPRODARVOL, P_DTENTREGA), 0)) END AS VRPREUNIAF,
                I.NRPEDEXOL AS NRAUTOFORN, I.CDFILLANC, DECODE(P_DATAENT, '0', I.DTPROGENPEOL, I.DTPROGEMBARQ) DTPROGENTAF,
                A.NRLANCTONF, A.QTNFRELAFSAI, I.IDBAIXAOLSAI AS IDBAIXITAFS, I.CDFILDEST,
                CASE  ''/*P_TQTEFAFSAIDOL*/
                   WHEN 'T'
                   THEN (CASE NVL(ETQ.IDUTQTESTRANG, 'S')
                       WHEN 'S'
                       THEN NVL(ETQ.VRPESOETIQ, NVL(I.QTATENDPEDOL, 0)) - NVL(I.QTATENDESTRANG, 0)
                       ELSE NVL(ETQ.VRPESOETIQ, NVL(I.QTATENDPEDOL, 0))
                       END )
                   ELSE NVL(ETQ.VRPESOETIQ, NVL(I.QTATENDPEDOL, 0))
                END  QTATENDPEDOL,
                I.VRPBRUTOPEDOL, I.VRPLIQUIPEDOL, I.DTPROGEMBARQ,
                '2' AS IDUTILITEM, I.DTPROGENPEOL,
                CASE NVL(ETQ.IDUTQTESTRANG, 'S')
                   WHEN 'S'
                   THEN NVL(I.QTATENDESTRANG, 0)
                   ELSE 0
                   END  QTATENDESTRANG,
                ETQ.NRLOTEESTQ, ETQ.NRSUBLOTE, ETQ.CDLOCALESTOQ, ETQ.CDALMOXARIFE,
                NVL(ETQ.IDUTQTESTRANG, 'N') IDUTQTESTRANG, P.CDCLIENTEEXT, B.VRFATOCONV, FILIAL.NMFILIAL
           FROM PEDIDOEXOL P, ITEMPEDEXOL I, RELACPRODOL R, MARCA M, FILIAL,
                FILIAL FI, PARAMFILIAL PF, FILIAL FP, PRODUTO B, PRODUTO E,
                (SELECT N.CDFILDEST, N.CDFILLANC, N.NRPEDEXOL, N.CDMARCA, N.CDPRODUTO, N.DTPROGENPEOL,
                        MAX(N.NRLANCTONF) AS NRLANCTONF, SUM(N.QTNFRELPEXOL) AS QTNFRELAFSAI
                   FROM PEDIDOEXOL P, NFRELACPEXOL N, ITEMPEDEXOL IT
                  WHERE CASE NVL(P.CDCLIENTEEXT, 'O')
                           WHEN 'O'
                           THEN P.CDFILDEST
                           ELSE P.CDCLIENTEEXT
                        END             = P_FILDEST
                    AND (P.CDFILLANC    = P_CDFILLANC)
                    AND (P.NRPEDEXOL    = P_NRAUTOFORN)
                    AND (P.CDFILDEST    = N.CDFILDEST)
                    AND (P.CDFILLANC    = N.CDFILLANC)
                    AND (P.NRPEDEXOL    = IT.NRPEDEXOL)
                    AND (DECODE(P_DATAENT, '0', IT.DTPROGENPEOL, IT.DTPROGEMBARQ) = P_DTENTREGA)
                    AND (N.CDFILDEST    = IT.CDFILDEST)
                    AND (N.CDFILLANC    = IT.CDFILLANC)
                    AND (N.NRPEDEXOL    = IT.NRPEDEXOL)
                    AND (N.CDMARCA      = IT.CDMARCA)
                    AND (N.CDPRODUTO    = IT.CDPRODUTO)
                    AND (N.DTPROGENPEOL = IT.DTPROGENPEOL)
                    AND (N.CDFILIAL    <> P_FILOPELOG)
                  GROUP BY N.CDFILDEST, N.CDFILLANC, N.NRPEDEXOL, N.CDMARCA, N.CDPRODUTO, N.DTPROGENPEOL) A,
                (SELECT E.CDFILDEST, E.CDFILLANC, E.NRPEDEXOL,
                        SUM(E.VRPESOETIQ) AS VRPESOETIQ, E.DTPROGENPEOL, IP.NRLOTEESTQ,
                        IP.NRSUBLOTE, IP.CDLOCALESTOQ, IP.CDALMOXARIFE, RL.CDMARCA,
                        RL.CDPRARVORIG, RL.CDPRODARVOL, NVL(E.IDUTQTESTRANG, 'N') IDUTQTESTRANG
                   FROM PEDIDOEXOL P, ETIQUETAPRODOL E, ITEMPRODUTO IP, RELACPRODOL RL, ITEMPEDEXOL I
                  WHERE CASE NVL(P.CDCLIENTEEXT, 'O')
                           WHEN 'O'
                           THEN P.CDFILDEST
                           ELSE P.CDCLIENTEEXT
                        END             = P_FILDEST
                    AND (P.CDFILLANC    = P_CDFILLANC)
                    AND (P.NRPEDEXOL    = P_NRAUTOFORN)
                    AND (P.CDFILDEST    = I.CDFILDEST)
                    AND (P.CDFILLANC    = I.CDFILLANC)
                    AND (P.NRPEDEXOL    = I.NRPEDEXOL)
                    AND (E.DTPROGENPEOL = P_DTENTREGA)
                    AND (E.CDFILIAL     = IP.CDFILIAL)
                    AND (E.NRLANCTONF   = IP.NRLANCTONF)
                    AND (E.NRSEQITPROD  = IP.NRSEQITPROD)
                    AND (E.CDPRODUTO    = RL.CDPRODARVOL)
                    AND (I.CDMARCA      = RL.CDMARCA)
                    AND (I.CDPRODUTO    = RL.CDPRARVORIG)
                    AND (E.CDFILDEST    = I.CDFILDEST)
                    AND (E.CDFILLANC    = I.CDFILLANC)
                    AND (E.NRPEDEXOL    = I.NRPEDEXOL)
                    AND (E.DTPROGENPEOL = I.DTPROGENPEOL)
                  GROUP BY E.CDPRODUTO, E.CDFILDEST, E.CDFILLANC, E.NRPEDEXOL,
                        E.DTPROGENPEOL, IP.NRLOTEESTQ, IP.NRSUBLOTE, IP.CDLOCALESTOQ, IP.CDALMOXARIFE,
                        RL.CDMARCA, RL.CDPRARVORIG, RL.CDPRODARVOL, NVL(E.IDUTQTESTRANG, 'N')) ETQ
           WHERE CASE NVL(P.CDCLIENTEEXT, 'O')
                     WHEN 'O'
                     THEN P.CDFILDEST
                     ELSE P.CDCLIENTEEXT
                 END             = P_FILDEST
             AND (P.CDFILLANC    = P_CDFILLANC)
             AND ((P.NRPEDEXOL   = P_NRAUTOFORN) OR ( 'T' = P_NRAUTOFORN))
             AND (P.CDFILIOPELOG = P_FILOPELOG)
             AND (P.CDFILDEST    = I.CDFILDEST)
             AND (P.CDFILDEST    = FILIAL.CDFILIAL)
             AND (P.CDFILLANC    = I.CDFILLANC)
             AND (P.NRPEDEXOL    = I.NRPEDEXOL)
             AND (I.CDMARCA      = R.CDMARCA)
             AND (I.IDBAIXAOLSAI IS NULL OR P_IDBAIXAOLSAI = 'T')
             AND (P.IDPEDEXOLEXTR = P_PEDOLEXTR OR P_PEDOLEXTR   = 'T')
             AND ((INSTR(P_CDLOTENVIOL, I.CDLOTENVITOL) > 0) OR (NVL(I.CDLOTENVITOL, P_CDLOTENVIOL) = 'T') OR (P_CDLOTENVIOL = 'N'))
             AND (NVL(I.IDITEMAJUSTE, 'N') = 'N')
             AND (DECODE(P_DATAENT, '0', I.DTPROGENPEOL, I.DTPROGEMBARQ) = P_DTENTREGA)
             AND (I.CDMARCA         = M.CDMARCA)
             AND (B.CDPRODUTO       = R.CDPRARVORIG)
             AND (E.CDPRODUTO       = R.CDPRODARVOL)
             AND (I.CDPRODUTO       = B.CDPRODUTO)
             AND (I.CDFILDEST       = A.CDFILDEST(+))
             AND (I.CDFILLANC       = A.CDFILLANC(+))
             AND (I.NRPEDEXOL       = A.NRPEDEXOL(+))
             AND (I.CDMARCA         = A.CDMARCA(+))
             AND (I.CDPRODUTO       = A.CDPRODUTO(+))
             AND (I.DTPROGENPEOL    = A.DTPROGENPEOL(+))
             AND (P.CDFILIOPELOG    = FI.CDFILIAL)
             AND (P.CDFILIOPELOG    = PF.CDFILIAL)
             AND (PF.CDFCUSNFROMA   = FP.CDFILIAL(+))
             AND (I.CDMARCA        = ETQ.CDMARCA(+))
             AND (I.CDPRODUTO      = ETQ.CDPRARVORIG(+))
             AND (I.CDFILDEST      = ETQ.CDFILDEST(+))
             AND (I.CDFILLANC      = ETQ.CDFILLANC(+))
             AND (I.NRPEDEXOL      = ETQ.NRPEDEXOL(+))
             AND (I.DTPROGENPEOL   = ETQ.DTPROGENPEOL(+))
             AND (P_SUBGRUPO =  'T' OR EXISTS (SELECT 1
                                                 FROM PRSUBGRPROD PR, PARASUPRI PA
                                                WHERE PR.CDPRODUTO  = I.CDPRODUTO
                                                  AND PR.CDGRUPPROD = PA.CDGRUPPROD
                                                  AND NVL(FI.CDFILCENTCMP, FI.CDFILIAL) = PA.CDFILIAL
                                                  AND (INSTR(P_SUBGRUPO, PR.CDSUBGRPROD) > 0)))
           ORDER BY CDFILIAL, NMPRODUTO, 6;
   ELSE /*CONSULTA AF DE FILIAL*/
      OPEN C_ITEM FOR
         SELECT F.CDFILDEST CDFILIAL, B.CDARVPROD, B.NMPRODUTO, I.CDPRODUTO, B.SGUNIDADE,
                NVL(I.CDMARCAOL, I.CDMARCA) AS CDMARCA, I.CDMARCAOL, I.CDMARCA AS CDMARCAAF, M.NMMARCA, I.QTPROGENTAF,
                DECODE(NVL(I.QTSAIDOPLOG,0), 0, I.QTPROGENTAF, I.QTSAIDOPLOG) AS QTSAIDOPLOG, I.VRPREUNIAF,
                I.NRAUTOFORN, I.CDFILLANC, I.DTPROGENTAF, A.NRLANCTONF, A.QTNFRELAFSAI, I.IDBAIXITAFS, I.CDFILDEST,
                CASE ''/*P_TQTEFAFSAIDOL*/
                   WHEN 'T'
                   THEN NVL(I.QTATENDPEDOL, 0) - NVL(I.QTATENDESTRANG, 0)
                   ELSE NVL(I.QTATENDPEDOL, 0)
                END  QTATENDPEDOL, 0 AS VRPBRUTOPEDOL, 0 AS VRPLIQUIPEDOL, SYSDATE AS DTPROGEMBARQ,
                '1' AS IDUTILITEM, SYSDATE AS DTPROGENPEOL, NVL(I.QTATENDESTRANG, 0) QTATENDESTRANG,
                '' NRLOTEESTQ, '' NRSUBLOTE, '' CDLOCALESTOQ, '' CDALMOXARIFE, '' IDUTQTESTRANG, '' CDCLIENTEEXT, B.VRFATOCONV, FI.NMFILIAL
           FROM ITEMAUTF I, PRODUTO B, MARCA M, AUTOFORNE F, FILIAL FI,
                (SELECT N.CDFILDEST, N.CDFILLANC, N.NRAUTOFORN, N.CDMARCA, N.CDPRODUTO, N.DTPROGENTAF,
                        MAX(N.NRLANCTONF) AS NRLANCTONF, SUM(N.QTNFRELAFSAI) AS QTNFRELAFSAI
                   FROM NFRELACAFSAI N, ITEMAUTF IT
                  WHERE N.CDFILDEST    = P_FILDEST
                    AND N.DTPROGENTAF  = P_DTENTREGA
                    AND N.CDFILLANC    = P_CDFILLANC
                    AND N.CDFILDEST    = IT.CDFILDEST
                    AND N.CDFILLANC    = IT.CDFILLANC
                    AND N.NRAUTOFORN   = IT.NRAUTOFORN
                    AND N.CDMARCA      = IT.CDMARCA
                    AND N.CDPRODUTO    = IT.CDPRODUTO
                    AND N.DTPROGENTAF  = IT.DTPROGENTAF
                    AND N.CDFILIAL    <> P_FILOPELOG
                  GROUP BY N.CDFILDEST, N.CDFILLANC, N.NRAUTOFORN, N.CDMARCA, N.CDPRODUTO, N.DTPROGENTAF) A
          WHERE F.CDFILIOPELOG = P_FILOPELOG
            AND F.CDFILDEST    = P_FILDEST
            AND F.CDFILLANC    = P_CDFILLANC
            AND F.CDFILDEST    = FI.CDFILIAL
            AND F.CDFILDEST    = I.CDFILDEST
            AND I.DTPROGENTAF  = P_DTENTREGA
            AND I.CDPRODUTO    = B.CDPRODUTO
            AND I.CDFILDEST    = F.CDFILDEST
            AND I.CDFILLANC    = F.CDFILLANC
            AND I.NRAUTOFORN   = F.NRAUTOFORN
            AND I.CDFILDEST    = A.CDFILDEST(+)
            AND I.CDFILLANC    = A.CDFILLANC(+)
            AND I.NRAUTOFORN   = A.NRAUTOFORN(+)
            AND I.CDMARCA      = A.CDMARCA(+)
            AND I.CDPRODUTO    = A.CDPRODUTO(+)
            AND I.DTPROGENTAF  = A.DTPROGENTAF(+)
            AND ((NVL(I.QTATENDPEDOL, 0) > 0) OR P_IDBAIXAOLSAI = 'T')
            AND ((I.IDBAIXITAFS IS NULL)      OR (P_IDBAIXAOLSAI = 'T'))
            AND NVL(I.CDMARCAOL, I.CDMARCA) = M.CDMARCA
            AND (P_SUBGRUPO =  'T' OR EXISTS (SELECT 1
                                                  FROM PRSUBGRPROD PR, PARASUPRI PA
                                                 WHERE PR.CDPRODUTO  = I.CDPRODUTO
                                                   AND PR.CDGRUPPROD = PA.CDGRUPPROD
                                                   AND NVL(FI.CDFILCENTCMP, FI.CDFILIAL) = PA.CDFILIAL
                                                   AND (INSTR(P_SUBGRUPO, PR.CDSUBGRPROD) > 0)))
            AND ((I.NRAUTOFORN = P_NRAUTOFORN) OR ( 'T' = P_NRAUTOFORN))
            AND NVL(I.IDTPGERARUP, 'S') <> 'T'
            AND NVL(I.IDITAFMIGRADA, 'N') = 'N'
            AND ((F.IDAFOPERLOG  = '2')  OR EXISTS (SELECT 1
                                                      FROM NFRELACAFSAI
                                                     WHERE NFRELACAFSAI.CDFILDEST  = F.CDFILDEST
                                                       AND NFRELACAFSAI.CDFILLANC  = F.CDFILLANC
                                                       AND NFRELACAFSAI.NRAUTOFORN = F.NRAUTOFORN))
             ORDER BY
                CDFILIAL, NMPRODUTO, 6;
   END IF;
   LOOP
   FETCH C_ITEM INTO V_CDFILIAL, V_CDARVPROD, V_NMPRODUTO, V_CDPRODUTO, V_SGUNIDADE, V_CDMARCA, V_CDMARCAOL,
                     V_CDMARCAAF, V_NMMARCA, V_QTPROGENTAF,V_QTSAIDOPLOG, V_VRPREUNIAF,V_NRAUTOFORN,
                     V_CDFILLANC, V_DTPROGENTAF, V_NRLANCTONF, V_QTNFRELAFSAI, V_IDBAIXITAFS, V_CDFILDEST,
                     V_QTATENDPEDOL,V_VRPBRUTOPEDOL, V_VRPLIQUIPEDOL, V_DTPROGEMBARQ, V_IDUTILITEM, V_DTPROGENPEOL,
                     V_QTATENDESTRANG, V_NRLOTEESTQ, V_NRSUBLOTE, V_CDLOCALESTOQ, V_CDALMOXARIFE,
                     V_IDUTQTESTRANG, V_CDCLIENTEEXT, V_VRFATOCONV, V_NMFILIAL;
   EXIT WHEN C_ITEM%NOTFOUND;
      V_LISTAERRO  := '';
      SELECT MAX(RELACPRODOL.CDPRODARVOL), MAX(PRODUTO.CDARVPROD), MAX(PRODUTO.NMPRODUTO), NVL(MAX(PRODUTO.VRFATOCONV), 1),
             MAX(PRODUTO.CDPRODESTO), MAX(PRODESTO.CDARVPROD), MAX(PRODESTO.NMPRODUTO),  MAX(PRODESTO.CDPRODUTO)
        INTO V_CDPRODARVOL, V_CDARVPRODOL, V_NMPRODUTOOL, V_VRFATOCONVOL,
             V_CDPRODESTOOL, V_CDARVPRODEST, V_NMPRODUTOEST, V_CDPRODUTOEST
        FROM RELACPRODOL, PRODUTO, PRODUTO PRODESTO
       WHERE RELACPRODOL.CDPRODARVOL = PRODUTO.CDPRODUTO
         AND RELACPRODOL.CDPRARVORIG = V_CDPRODUTO
         AND RELACPRODOL.CDMARCA     = V_CDMARCA
         AND PRODUTO.CDPRODESTO      = PRODESTO.CDPRODUTO;
      V_QTESTOQDIA      := 0;
      V_QTRESERVESTOL   := 0;
      V_RESERVA_ITEM    := 0;
      V_ESTOQ_DISPO     := 0;

      IF V_CDPRODARVOL <> V_CDPRODESTOOL THEN
         V_VRFATOCONVOL := V_VRFATOCONVOL;
         V_CDPRODARVOL  := V_CDPRODESTOOL;
      ELSE
         V_CDPRODARVOL  := V_CDPRODARVOL;
         V_VRFATOCONVOL := 1;
      END IF;
      IF P_DTSAIDANF IS NULL THEN
         SELECT NVL(MAX(POSESTDIA.DTPOSIESTQ), SYSDATE+1)
           INTO V_DTPOSIESTQ
           FROM POSESTDIA
          WHERE POSESTDIA.CDFILIAL      = P_FILOPELOG
            AND POSESTDIA.CDALMOXARIFE  = ' '
            AND POSESTDIA.CDLOCALESTOQ  = ' '
            AND POSESTDIA.CDPRODUTO     = V_CDPRODARVOL
            AND POSESTDIA.NRLOTEESTQ    = ' '
            AND POSESTDIA.NRSUBLOTE     = ' ';
      END IF;
      SELECT CALC_ESTOQ_CONS(P_FILOPELOG, V_CDPRODARVOL, NVL(P_DTSAIDANF, V_DTPOSIESTQ))*V_VRFATOCONVOL
        INTO V_QTESTOQDIA
        FROM DUAL;
      IF NVL(P_IDUTRESPEDXOL, 'N') = 'S' THEN
         SELECT NVL(SUM(RE.QTRESERVESTOL), 0) QTRESERVESTOL,
                NVL(SUM(R.QTRESERVESTOL), 0) RESERVA_ITEM,
                NVL(V_QTESTOQDIA/V_VRFATOCONVOL, 0)-NVL(SUM(RE.QTRESERVESTOL), 0) ESTOQ_DISPO
           INTO V_QTRESERVESTOL, V_RESERVA_ITEM, V_ESTOQ_DISPO
           FROM RESERVAPEDEXOL RE,
                (SELECT CDPRODUTO, CDMARCA, CDFILRESOL, CDFILDEST, CDFILLANC,
                        DTPROGENPEOL, NRPEDEXOL, QTRESERVESTOL
                   FROM RESERVAPEDEXOL R
                  WHERE NRPEDEXOL     = V_NRAUTOFORN
                    AND CDFILDEST     = V_CDFILDEST
                    AND CDFILLANC     = V_CDFILLANC
                    AND DTPROGENPEOL  = V_DTPROGENTAF
                    AND CDPRODUTO     = V_CDPRODUTO
                    AND CDMARCA       = V_CDMARCA
                    AND CDFILRESOL    = P_FILOPELOG) R
          WHERE RE.CDPRODUTO    = V_CDPRODUTO
            AND RE.CDMARCA      = V_CDMARCA
            AND RE.CDFILRESOL   = P_FILOPELOG
            AND RE.CDPRODUTO    = R.CDPRODUTO(+)
            AND RE.CDMARCA      = R.CDMARCA(+)
            AND RE.CDFILRESOL   = R.CDFILRESOL(+)
            AND RE.CDFILDEST    = R.CDFILDEST(+)
            AND RE.CDFILLANC    = R.CDFILLANC (+)
            AND RE.NRPEDEXOL    = R.NRPEDEXOL(+)
            AND RE.DTPROGENPEOL = R.DTPROGENPEOL(+);
      END IF;
      OUT_RECORD.IDCHECKPRAF          := 'U';
      OUT_RECORD.CDFILIAL             := V_CDFILIAL;
      OUT_RECORD.CDARVPROD            := V_CDARVPROD;
      OUT_RECORD.NMPRODUTO            := V_NMPRODUTO;
      OUT_RECORD.CDPRODUTO            := V_CDPRODUTO;
      OUT_RECORD.SGUNIDADE            := V_SGUNIDADE;
      OUT_RECORD.CDMARCA              := V_CDMARCA;
      OUT_RECORD.CDMARCAOL            := V_CDMARCAOL;
      OUT_RECORD.CDMARCAAF            := V_CDMARCAAF;
      OUT_RECORD.NMMARCA              := V_NMMARCA;
      OUT_RECORD.NRAUTOFORN           := V_NRAUTOFORN;
      OUT_RECORD.CDFILLANC            := V_CDFILLANC;
      OUT_RECORD.NRLANCTONF           := V_NRLANCTONF;
      OUT_RECORD.IDBAIXITAFS          := V_IDBAIXITAFS;
      OUT_RECORD.CDFILDEST            := V_CDFILDEST;
      OUT_RECORD.IDUTILITEM           := V_IDUTILITEM;
      OUT_RECORD.CDALMOXARIFE         := V_CDALMOXARIFE;
      OUT_RECORD.CDLOCALESTOQ         := V_CDLOCALESTOQ;
      OUT_RECORD.NRLOTEESTQ           := V_NRLOTEESTQ;
      OUT_RECORD.NRSUBLOTE            := V_NRSUBLOTE;
      OUT_RECORD.IDUTQTESTRANG        := V_IDUTQTESTRANG;
      OUT_RECORD.CDCLIENTEEXT         := V_CDCLIENTEEXT;
      OUT_RECORD.DTPROGEMBARQ         := V_DTPROGEMBARQ;
      OUT_RECORD.DTPROGENTAF          := V_DTPROGENTAF;
      OUT_RECORD.DTPROGENPEOL         := V_DTPROGENPEOL;
      OUT_RECORD.QTPROGENTAF          := V_QTPROGENTAF;
      OUT_RECORD.QTSAIDOPLOG          := V_QTSAIDOPLOG;
      OUT_RECORD.VRPREUNIAF           := V_VRPREUNIAF;
      OUT_RECORD.QTNFRELAFSAI         := V_QTNFRELAFSAI;
      OUT_RECORD.QTATENDPEDOL         := V_QTATENDPEDOL;
      OUT_RECORD.VRPBRUTOPEDOL        := V_VRPBRUTOPEDOL;
      OUT_RECORD.VRPLIQUIPEDOL        := V_VRPLIQUIPEDOL;
      OUT_RECORD.QTATENDESTRANG       := V_QTATENDESTRANG;
      OUT_RECORD.CDARVPRODOL          := V_CDARVPRODOL;
      OUT_RECORD.NMPRODUTOOL          := V_NMPRODUTOOL;
      OUT_RECORD.QTESTOQDIA           := V_QTESTOQDIA/V_VRFATOCONVOL;
      OUT_RECORD.QTRESERVESTOL        := V_QTRESERVESTOL;
      OUT_RECORD.ESTOQ_DISPO          := V_ESTOQ_DISPO;
      OUT_RECORD.RESERVA_ITEM         := V_RESERVA_ITEM;
      OUT_RECORD.CDARVPRODEST         := V_CDARVPRODEST;
      OUT_RECORD.NMPRODUTOEST         := V_NMPRODUTOEST;
      OUT_RECORD.QTESTOQDIAEST        := V_QTESTOQDIA;
      OUT_RECORD.VRFATOCONVOL         := V_VRFATOCONVOL;
      OUT_RECORD.VRFATOCONV           := V_VRFATOCONV;
      OUT_RECORD.NMFILIAL             := V_NMFILIAL;
      OUT_RECORD.CDFILIOPELOG         := V_CDFILIOPELOG;
      OUT_RECORD.NMFILIOPELOG         := V_NMFILIOPELOG;
      OUT_RECORD.CDPRODUTOEST         := V_CDPRODUTOEST;
      IF NVL(P_GERA_NF, 'N') = 'S' THEN
         IF NVL(V_CDPRODARVOL, 'W') <> 'W' THEN
            SELECT COUNT(1)
              INTO V_COUNTAERRO
              FROM PRODFILI
             WHERE CDFILIAL = P_FILOPELOG
               AND CDPRODUTO = V_CDPRODARVOL
               AND NVL(IDPRODATIV, 'I') = 'A';
            IF V_COUNTAERRO = 0 THEN
               V_LISTAERRO := 'PRODINATIVO_'; /*Produto Inativo para o OL*/
            END IF;
         END IF;

         IF V_VRPREUNIAF <= 0 THEN
            V_LISTAERRO := V_LISTAERRO||'ERROVLR_'; /*Produto com Custo menor ou igual a zero*/
         END IF;
         IF NVL(P_IDUTRESPEDXOL, 'N') = 'S' THEN
            SELECT COUNT(1)
              INTO V_COUNTAERRO
              FROM RESERVAPEDEXOL
             WHERE NRPEDEXOL     = V_NRAUTOFORN
               AND CDFILDEST     = V_CDFILDEST
               AND CDFILLANC     = V_CDFILLANC
               AND DTPROGENPEOL  = V_DTPROGENTAF
               AND CDPRODUTO     = V_CDPRODUTO
               AND CDMARCA       = V_CDMARCA
               AND CDFILRESOL    = P_FILOPELOG;
            IF V_COUNTAERRO = 0 THEN
               V_LISTAERRO := V_LISTAERRO||'ERRORES_'; /*Produto sem Reserva*/
            END IF;
         END IF;
         IF ((P_WEBSERVICE = 'S') OR (P_IDUTILCONSSOLIOL = 'N')) THEN
            IF (NVL(V_QTATENDPEDOL, (-999)) = (-999)) THEN
               V_QTSAIDANF := V_QTPROGENTAF;
               V_LISTAERRO := V_LISTAERRO||'ERROQTD_'; /* Quantidade atendida pelo OL deve ser informada*/
            ELSE
               V_QTSAIDANF := V_QTATENDPEDOL;
            END IF;
         ELSE
            IF (NVL(V_QTATENDPEDOL, (-999)) = (-999)) THEN
               V_QTSAIDANF := V_QTPROGENTAF;
            ELSE
               V_QTSAIDANF := V_QTATENDPEDOL;
            END IF;
         END IF;
         V_QTPROGENTAF :=  V_QTSAIDANF;
         IF NVL(V_CDARVPRODOL, 'W') = 'W' THEN
            V_LISTAERRO := V_LISTAERRO||'ERRORELAC_'; /*Produto sem relacionamento com produto do OL*/
         ELSE
            FOR C_ESTOQUE IN(SELECT QTESTOQUE_CONVER
                               FROM TABLE(QUERY_ESTOQ_DFS48000(P_FILOPELOG, V_CDPRODUTO, V_CDMARCA)))


            LOOP
               IF V_QTPROGENTAF > C_ESTOQUE.QTESTOQUE_CONVER THEN
                   V_LISTAERRO := V_LISTAERRO||'ERROEST_'; /* Sem quantidade dispon?vel no estoque do OL*/
               END IF;
            END LOOP;
         END IF;
         IF NVL(V_CDPRODARVOL, 'W') <> 'W' THEN
            FOR C_PRODUTO_CX IN (SELECT FI.CDFILIAL, FI.NMFILIAL, NVL(PF.IDPRODATIV, 'I') IDPRODATIV,
                                        PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO
                                   FROM RELACPRODOLCX OL INNER JOIN PRODFILI PF ON OL.CDPRODCAIXA = PF.CDPRODUTO
                                                         INNER JOIN FILIAL FI   ON PF.CDFILIAL    = FI.CDFILIAL
                                                         INNER JOIN PRODUTO PR  ON OL.CDPRODCAIXA = PR.CDPRODUTO
                                  WHERE OL.CDPRODUTOL = V_CDPRODARVOL
                                    AND FI.CDFILIAL   = P_FILOPELOG )
            LOOP
               V_CDPRODCAIXA := C_PRODUTO_CX.CDPRODUTO;
               IF C_PRODUTO_CX.IDPRODATIV = 'I' THEN
                  V_LISTAERRO := V_LISTAERRO||'ERROCX_'; /*Produto caixa inativo*/
               END IF;
            END LOOP;
         END IF;
      END IF;
      OUT_RECORD.LISTAERRO             := V_LISTAERRO;
      OUT_RECORD.VRTOTAL              := V_VRPREUNIAF*V_QTPROGENTAF;
      PIPE ROW (OUT_RECORD);
   END LOOP;
   CLOSE C_ITEM;
END;
/