create or replace PROCEDURE GERA_PLANEJ_MRP 
   (P_CDFILIAL     IN FILIAL.CDFILIAL%TYPE, 
    P_DTMRP        IN PROGPRODU.DTPROGPRODU%TYPE, 
    P_DTINI        IN PROGPRODU.DTPERINIPCP%TYPE, 
    P_DTFIN        IN PROGPRODU.DTPERFINPCP%TYPE, 
    P_CDPRODINI    IN PRODUTO.CDARVPROD%TYPE, 
    P_CDPRODFIN    IN PRODUTO.CDARVPROD%TYPE, 
    P_IDMRPPEDPREV IN PROGPRODU.IDMRPPEDPREV%TYPE, 
    P_STLISTPEDIDO IN VARCHAR2, 
    P_STTODOPEDIDO IN PROGPRODU.IDESTOQUEMRP%TYPE, 
    P_IDESTOQUE    IN PROGPRODU.IDESTOQUEMRP%TYPE, 
    P_IDCONSDEMA   IN PROGPRODU.IDCONSDEMA%TYPE, 
    P_ORCDE        IN ORCAEVENTO.NRORCAEVENTO%TYPE, 
    P_ORCATE       IN ORCAEVENTO.NRORCAEVENTO%TYPE, 
    P_LORC         IN VARCHAR2, 
    P_CDDEPTO      IN DEPARTAMENTO.CDDEPTO%TYPE, 
    P_IDGERSEMIACA IN VARCHAR2, 
    P_STLISTAFILI  IN VARCHAR2, 
    P_STTFILISOLI  IN VARCHAR2, 
    P_STLISTASOLI  IN VARCHAR2, 
    P_STTSOLICITA  IN VARCHAR2 
   ) IS 
    
   V_CDPRODPREVMP  PRODUTO.CDPRODUTO%TYPE; 
   V_QTCOMPRAS     NUMBER; 
   V_NRORDENAOP    CALEPRODMRP.NRORDENAOP%TYPE; 
   V_IDAUDIPROCFAB VARCHAR2(1); 
   V_QTESTDIACON   FLOAT;
BEGIN

   V_NRORDENAOP := '0000000000'; 

   SELECT MAX(IDAUDIPROCFAB) 
     INTO V_IDAUDIPROCFAB 
     FROM PARAMAN 
    WHERE CDFILIAL = P_CDFILIAL;

   IF  INSTR(P_IDMRPPEDPREV, 'L')  = 0  THEN 

      FOR C_PRODPED IN(SELECT PED.CDPRODUTO, 
                              PED.IDPRODPROD, 
                              PED.DTMINENTPED, 
                              --PED.QTDEESTO, 
                              PED.QTVENDAPCP, 
                              PED.QTESTOQMIN, 
                              PED.QTPADPROCFAB, 
                              PED.QTLOTEFABDIA, 
                              PED.QTPRODUCAO, 
                              PED.QTANDPROD, 
                              PED.QTTOTALPROD 
                         FROM (SELECT IT.CDPRODUTO, 
                                      IT.IDPRODPROD, 
                                      DT.DTMINENTPED - DECODE( NVL(IDAPLICHRSEG, 'L'), 'P', ( PP.QTHRSEGPROD/24), 0) AS DTMINENTPED, 
                                      --DECODE( P_IDESTOQUE, 'S', NVL(P.QTESTDIACON, 0), 0)  AS QTDEESTO, 
                                      NVL(IT.QTVENDAPCP, 0) AS QTVENDAPCP, 
                                      NVL(PF.QTESTOSEGU, 0) AS QTESTOQMIN, 
                                      NVL(PROC.QTPADPROCFAB, 0) AS QTPADPROCFAB, 
                                      NVL(PROC.QTLOTEFABDIA, 0) AS QTLOTEFABDIA, 
                                      NVL(OP.QTPRODUCAO, 0) AS QTPRODUCAO, 
                                      NVL(OP.QTANDPROD, 0) AS QTANDPROD, 
                                      NVL(OP.QTTOTALPROD, 0) AS QTTOTALPROD 
                                 FROM PROCFABRICA PROC, ESTOSEGU PF, /*POSESTCONS P,*/ PARAMPRODMRP PP, 

                                      (SELECT A.CDFILIAL, 
                                              A.CDPRODUTO, 
                                              A.IDGERAOPCONF, 
                                              SUM(A.QTPRODUCAO) AS QTPRODUCAO, 
                                              SUM(A.QTANDPROD) AS QTANDPROD, 
                                              NVL(SUM(A.QTTOTALPROD), 0) AS QTTOTALPROD 
                                         FROM (SELECT L.CDFILIAL, 
                                                      L.CDPRODUTO, 
                                                      P.IDGERAOPCONF, 
                                                      0 AS QTPRODUCAO, 
                                                      NVL(SUM(L.QTPRODLOTE), 0) AS QTANDPROD, 
                                                      NVL(SUM(L.QTPRODLOTE), 0) AS QTTOTALPROD 
                                                 FROM LOTE L 
                                                INNER JOIN PARAMPRODMRP P 
                                                   ON P.CDFILIAL = L.CDFILIAL  
                                                  AND P.CDPRODUTO = L.CDPRODUTO  
                                                WHERE (L.CDFILIAL     = P_CDFILIAL)   
                                                  AND (L.IDSTPRODLOTE = '3') 
                                                  AND P.IDGERAOPCONF = 'S' 
                                                GROUP BY L.CDFILIAL, L.CDPRODUTO, P.IDGERAOPCONF 
                                                UNION ALL 

                                                SELECT O.CDFILIAL, 
                                                       O.CDPRODUTO, 
                                                       P.IDGERAOPCONF, 
                                                       NVL(SUM(QTAPRODPREOP),0) AS QTPRODUCAO, 
                                                       0 AS QTANDPROD, 
                                                       NVL(SUM(QTAPRODPREOP), 0) AS QTTOTALPROD 
                                                  FROM ORDPRODUCAO O 
                                                 INNER JOIN PARAMPRODMRP P 
                                                    ON P.CDFILIAL  = O.CDFILIAL 
                                                   AND P.CDPRODUTO = O.CDPRODUTO 
                                                 WHERE (O.CDFILIAL    = P_CDFILIAL)   
                                                   AND (IDSITORDPROD = '1')          
                                                   AND (IDCONFIRMAOP = 'S')  
                                                   AND (P.IDGERAOPCONF = 'S') 
                                                 GROUP BY O.CDFILIAL, O.CDPRODUTO, P.IDGERAOPCONF 
                                               ) A 
                                        GROUP BY A.CDFILIAL, A.CDPRODUTO, A.IDGERAOPCONF) OP, 


                                      (SELECT A.CDPRODUTO, 
                                              TO_DATE(A.DTENTITPED) AS DTENTITPED, 
                                              MIN(A.DTMINENTPED) AS DTMINENTPED 
                                         FROM(SELECT PROD.CDPRODESTO CDPRODUTO, 
                                                     TO_DATE(IT.DTENTITPED) AS DTENTITPED, 
                                                     MIN(IT.DTENTITPED) AS DTMINENTPED 
                                                FROM PEDIDO P 
                                               INNER JOIN ITEMPEDIDO IT 
                                                  ON IT.CDFILIAL = P.CDFILIAL                            
                                                 AND IT.NRPEDIDO = P.NRPEDIDO 
                                               INNER JOIN LISTA L 
                                                  ON IT.NRPEDIDO||'/'||IT.NRITEMPED = L.CDLISTA 
                                               INNER JOIN PRODUTO PROD 
                                                  ON IT.CDPRODUTO    = PROD.CDPRODUTO 
                                                FULL OUTER JOIN PRODUTO P1 
                                                  ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                               WHERE (NVL(P.IDPEDINDUSTRIA, 'N') = 'N')  
                                                 AND (P.CDFILIAL      = P_CDFILIAL )                    
                                                 AND ((P.IDSITPEDIDO = '2')  OR (P.IDSITPEDIDO ='6'))  
                                                 AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN )    
                                                 AND (L.NRLISTA       = P_STLISTPEDIDO )            
                                                 AND (P_STTODOPEDIDO  <> 'T')  
                                                 AND ((INSTR(P_CDDEPTO, P.CDDEPTO)>0)OR(P_CDDEPTO IS NULL))  
                                                 AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) OR (INSTR( P_LORC, P.NRORCAEVENTO)>0) OR (P.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE))  
                                                 AND ((IT.IDSITITEMPED = '3') OR(IT.IDSITITEMPED = '7'))  
                                                 AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN )  
                                                 AND ((INSTR( P_IDMRPPEDPREV , 'P') > 0)OR (INSTR( P_IDMRPPEDPREV , 'A') > 0))  
                                                 AND (NOT EXISTS(SELECT CDFILIAL  
                                                                   FROM PEDIDOP 
                                                                  WHERE (CDFILIAL  = IT.CDFILIAL) 
                                                                    AND (NRPEDIDO  = IT.NRPEDIDO) 
                                                                    AND (NRITEMPED = IT.NRITEMPED))) 
                                               GROUP BY PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED) 
                                               UNION 
                                              SELECT PROD.CDPRODESTO CDPRODUTO, 
                                                     TO_DATE(IT.DTENTITPED) AS DTENTITPED, 
                                                     MIN(IT.DTENTITPED) AS DTMINENTPED 
                                                FROM PEDIDO P 
                                               INNER JOIN ITEMPEDIDO IT 
                                                  ON IT.CDFILIAL     = P.CDFILIAL                            
                                                 AND IT.NRPEDIDO     = P.NRPEDIDO 
                                               INNER JOIN PRODUTO PROD 
                                                  ON PROD.CDPRODUTO = IT.CDPRODUTO 
                                                FULL OUTER JOIN PRODUTO P1 
                                                  ON IT.CDPRODUTO    = P1.CDPRODESTO 
                                               WHERE (NVL(P.IDPEDINDUSTRIA,'N') = 'N')  
                                                 AND (P.CDFILIAL      = P_CDFILIAL )                             
                                                 AND ((P.IDSITPEDIDO = '2')  OR (P.IDSITPEDIDO ='6'))            
                                                 AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN )  
                                                 AND (P_STTODOPEDIDO   = 'T')                         
                                                 AND ((INSTR(P_CDDEPTO, P.CDDEPTO)>0) OR (P_CDDEPTO IS NULL))  
                                                 AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                  OR (INSTR( P_LORC, P.NRORCAEVENTO)>0)OR (P.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE))  
                                                 AND ((IT.IDSITITEMPED = '3') OR(IT.IDSITITEMPED = '7'))         
                                                 AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN )      
                                                 AND ((INSTR( P_IDMRPPEDPREV , 'P') > 0)OR (INSTR( P_IDMRPPEDPREV , 'A') > 0) )  
                                                 AND (NOT EXISTS(SELECT CDFILIAL  
                                                                   FROM PEDIDOP 
                                                                  WHERE (CDFILIAL  = IT.CDFILIAL)                   
                                                                    AND (NRPEDIDO  = IT.NRPEDIDO)                   
                                                                    AND (NRITEMPED = IT.NRITEMPED))) 
                                               GROUP BY PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED) 
                                               UNION 
                                              SELECT PROD.CDPRODUTO, PROD.DTENTITPED, TO_DATE(TO_CHAR(TRUNC(PROD.DTENTITPED), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                FROM (SELECT DISTINCT  
                                                             PROD.CDPRODESTO AS CDPRODUTO, 
                                                             P.DTPREVIVENDA AS DTENTITPED, 
                                                             P.DTPREVIVENDA, 
                                                             P.CDFILIAL 
                                                        FROM PREVIVENDA P  
                                                       INNER JOIN PRODUTO PROD 
                                                          ON P.CDPRODUTO = PROD.CDPRODESTO 
                                                        FULL OUTER JOIN PRODUTO P1 
                                                          ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                                       WHERE (P.CDFILIAL  = P_CDFILIAL  )                             
                                                         AND (TO_DATE(P.DTPREVIVENDA) BETWEEN P_DTINI AND P_DTFIN ) 
                                                         AND ((INSTR( P_IDMRPPEDPREV , 'V') > 0) OR (INSTR( P_IDMRPPEDPREV , 'A') > 0))) PROD 
                                               INNER JOIN PARAMPRODMRP PA 
                                                  ON PA.CDFILIAL = PROD.CDFILIAL 
                                                 AND PA.CDPRODUTO = PROD.CDPRODUTO 
                                               UNION 
                                              SELECT PROD.CDPRODUTO, 
                                                     D.DTENTRDEMA AS DTENTITPED, 
                                                     TO_DATE(TO_CHAR(TRUNC(D.DTENTRDEMA), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI')  
                                                FROM PARAMPRODMRP PA 
                                               INNER JOIN PRODUTO PROD 
                                                  ON PA.CDPRODUTO = PROD.CDPRODUTO 
                                                FULL OUTER JOIN PRODUTO P1 
                                                  ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                               INNER JOIN DEMAEXTRAMRP D 
                                                  ON D.CDFILIAL = PA.CDFILIAL 
                                                 AND D.CDPRODUTO = P1.CDPRODUTO 
                                               WHERE (D.CDFILIAL   = P_CDFILIAL ) 
                                                 AND (P_IDCONSDEMA  = 'S') 
                                                 AND D.DTENTRDEMA BETWEEN P_DTINI AND P_DTFIN 
                                               UNION 
                                              SELECT  
                                                     DISTINCT PROD.CDPRODUTO CDPRODUTO, 
                                                     I.DTPROGENTR AS DTENTITPED, 
                                                     TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                FROM PARAMPRODMRP PA 
                                               INNER JOIN PRODUTO PROD 
                                                  ON PROD.CDPRODUTO = PA.CDPRODUTO 
                                                FULL OUTER JOIN PRODUTO P1 
                                                  ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                               INNER JOIN ITEMSOLI I 
                                                  ON P1.CDPRODUTO = I.CDPRODUTO 
                                               INNER JOIN LISTA L  
                                                  ON L.CDLISTA = I.CDFILLAN||I.CDFILSOLI||I.NRSOLICMP     
                                               INNER JOIN SOLICITA SO 
                                                  ON SO.CDFILLANCA = I.CDFILLAN 
                                                 AND SO.CDFILSOLI  = I.CDFILSOLI 
                                                 AND SO.NRSOLICMP  = I.NRSOLICMP 
                                               INNER JOIN (SELECT CDFILIAL 
                                                             FROM FILIAL 
                                                            WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI  = 'T'))) F 
                                                  ON I.CDFILSOLI  = F.CDFILIAL      
                                               WHERE (SO.IDBAIXASOL IS NULL) 
                                                 AND (P_STTSOLICITA IS NULL) 
                                                 AND (CDFILIALPED IS NULL) 
                                                 AND (NRPEDIDO    IS NULL) 
                                                 AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN ) 
                                                 AND (IDSOLIAPROV = 'S') 
                                                 AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN   
                                                 AND (L.NRLISTA   = P_STLISTASOLI) 
                                                 AND (P_CDFILIAL  = PA.CDFILIAL) 
                                                 AND (INSTR( P_IDMRPPEDPREV , 'S') > 0) 
                                                 AND (NOT EXISTS(SELECT NRSOLICMP 
                                                                   FROM SOLICITAOP 
                                                                  WHERE CDFILSOLI = I.CDFILSOLI  
                                                                    AND CDFILLAN  = I.CDFILLAN  
                                                                    AND NRSOLICMP = I.NRSOLICMP  
                                                                    AND CDPRODUTO = I.CDPRODUTO  
                                                                    AND DTPROGENTR = I.DTPROGENTR)) 
                                               UNION 
                                              SELECT DISTINCT PROD.CDPRODESTO CDPRODUTO, 
                                                     I.DTPROGENTR AS DTENTITPED, 
                                                     TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                 FROM PARAMPRODMRP PA 
                                                INNER JOIN PRODUTO PROD 
                                                   ON PROD.CDPRODUTO = PA.CDPRODUTO 
                                                 FULL OUTER JOIN PRODUTO P1 
                                                   ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                                INNER JOIN ITEMSOLI I 
                                                   ON P1.CDPRODUTO = I.CDPRODUTO 
                                                INNER JOIN SOLICITA SO 
                                                   ON SO.CDFILLANCA = I.CDFILLAN 
                                                  AND SO.CDFILSOLI  = I.CDFILSOLI 
                                                  AND SO.NRSOLICMP  = I.NRSOLICMP 
                                                INNER JOIN (SELECT CDFILIAL 
                                                              FROM FILIAL 
                                                             WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI  = 'T'))) F 
                                                   ON I.CDFILSOLI  = F.CDFILIAL   
                                                WHERE (SO.IDBAIXASOL IS NULL) 
                                                  AND (P_STTSOLICITA = 'T') 
                                                  AND (CDFILIALPED IS NULL) 
                                                  AND (NRPEDIDO    IS NULL) 
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN ) 
                                                  AND (IDSOLIAPROV = 'S') 
                                                  AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN  
                                                  AND (P_CDFILIAL    = PA.CDFILIAL) 
                                                  AND (INSTR(P_IDMRPPEDPREV , 'S') > 0) 
                                                  AND (NOT EXISTS(SELECT NRSOLICMP 
                                                                    FROM SOLICITAOP 
                                                                   WHERE CDFILSOLI = I.CDFILSOLI  
                                                                     AND CDFILLAN  = I.CDFILLAN  
                                                                     AND NRSOLICMP = I.NRSOLICMP  
                                                                     AND CDPRODUTO = I.CDPRODUTO  
                                                                     AND DTPROGENTR = I.DTPROGENTR)) 
                                             ) A 
                                        GROUP BY A.CDPRODUTO, TO_DATE(A.DTENTITPED)) DT, 

                                      (SELECT VEN.CDFILIAL, 
                                              VEN.CDPRODUTO, 
                                              VEN.IDPRODPROD, 
                                              VEN.DTENTITPED, 
                                              NVL(SUM(VEN.QTVENDAPCP), 0) AS QTVENDAPCP 
                                          FROM(SELECT PED.CDFILIAL, 
                                                      PROD.CDPRODESTO CDPRODUTO, 
                                                      MAX(P.IDPRODPROD) AS IDPRODPROD, 
                                                      TO_DATE(ITEM.DTENTITPED) AS DTENTITPED, 
                                                      NVL(SUM((ITEM.QTITEMPED*P1.VRFATOCONV) - (ITEM.QTEXPITEMPED*P1.VRFATOCONV)) - SUM(NVL((QTRESPRODPED*P1.VRFATOCONV),0)) , 0) AS QTVENDAPCP, 
                                                      'P' AS IDORIGEM 
                                                 FROM PEDIDO PED  
                                                INNER JOIN ITEMPEDIDO ITEM 
                                                   ON ITEM.CDFILIAL     = PED.CDFILIAL                      
                                                  AND ITEM.NRPEDIDO     = PED.NRPEDIDO 
                                                INNER JOIN LISTA L 
                                                   ON ITEM.NRPEDIDO||'/'||ITEM.NRITEMPED = L.CDLISTA 
                                                INNER JOIN PRODUTO PROD 
                                                   ON ITEM.CDPRODUTO = PROD.CDPRODUTO 
                                                 FULL OUTER JOIN PRODUTO P1 
                                                   ON PROD.CDPRODUTO = P1.CDPRODUTO 
                                                INNER JOIN PRODUTO P 
                                                   ON PROD.CDPRODESTO = P.CDPRODUTO 
                                                 LEFT JOIN (SELECT  RESERPRODPED.CDFILIAL, NRPEDIDO, NRITEMPED, QTRESPRODPED 
                                                              FROM RESERPRODPED, PARAMPEDIDO 
                                                             WHERE NRLOTEESTQ IS NOT NULL  
                                                               AND PARAMPEDIDO.CDFILIAL = P_CDFILIAL   
                                                               AND IDUTRESELOTE = 'S')R 
                                                   ON ITEM.CDFILIAL = R.CDFILIAL  
                                                  AND ITEM.NRPEDIDO = R.NRPEDIDO  
                                                  AND ITEM.NRITEMPED = R.NRITEMPED 
                                                WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI  AND P_CDPRODFIN ) 
                                                  AND (PED.CDFILIAL      = P_CDFILIAL )                         
                                                  AND ((PED.IDSITPEDIDO  = '2')OR(PED.IDSITPEDIDO = '6'))        
                                                  AND (L.NRLISTA         = P_STLISTPEDIDO )        
                                                  AND (P_STTODOPEDIDO  <> 'T')                                  
                                                  AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                  AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                   OR (INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                  AND ((ITEM.IDSITITEMPED = '3') OR (ITEM.IDSITITEMPED = '7'))                 
                                                  AND (TO_DATE(ITEM.DTENTITPED) BETWEEN  P_DTINI AND P_DTFIN )  
                                                  AND ((INSTR( P_IDMRPPEDPREV, 'P') > 0)OR (INSTR( P_IDMRPPEDPREV, 'A') > 0) )   
                                                  AND (NOT EXISTS(SELECT CDFILIAL 
                                                                    FROM PEDIDOP 
                                                                   WHERE (CDFILIAL  = ITEM.CDFILIAL) 
                                                                     AND (NRPEDIDO  = ITEM.NRPEDIDO) 
                                                                     AND (NRITEMPED = ITEM.NRITEMPED))) 
                                                GROUP BY PED.CDFILIAL, PROD.CDPRODESTO, TO_DATE(ITEM.DTENTITPED), 'P' 
                                                UNION 
                                               SELECT CDFILIAL,  
                                                      CDPRODUTO, MAX(IDPRODPROD) AS IDPRODPROD,  
                                                      DTENTITPED,  
                                                      NVL(SUM((QTITEMPED*VRFATOCONV) - (QTEXPITEMPED*VRFATOCONV)) - SUM(NVL((QTRESPRODPED*VRFATOCONV),0)), 0) AS QTVENDAPCP,  
                                                      IDORIGEM 
                                                 FROM(SELECT PED.NRPEDIDO, PED.CDFILIAL, PROD.CDPRODESTO AS CDPRODUTO,  
                                                             SUM(ITEM.QTITEMPED) AS QTITEMPED, SUM(ITEM.QTEXPITEMPED) AS QTEXPITEMPED, SUM(QTRESPRODPED) AS QTRESPRODPED, PROD.VRFATOCONV,  
                                                             P1.IDPRODPROD, TO_DATE(ITEM.DTENTITPED) AS DTENTITPED, 'P' AS IDORIGEM 
                                                        FROM PEDIDO PED                                                       
                                                       INNER JOIN ITEMPEDIDO ITEM 
                                                          ON ITEM.CDFILIAL = PED.CDFILIAL                     
                                                         AND ITEM.NRPEDIDO = PED.NRPEDIDO 
                                                       INNER JOIN PRODUTO PROD 
                                                          ON ITEM.CDPRODUTO = PROD.CDPRODUTO 
                                                        FULL OUTER JOIN PRODUTO P 
                                                          ON PROD.CDPRODUTO = P.CDPRODESTO 
                                                       INNER JOIN PRODUTO P1 
                                                          ON PROD.CDPRODESTO = P1.CDPRODUTO 
                                                        LEFT JOIN (SELECT RESERPRODPED.CDFILIAL, NRPEDIDO, NRITEMPED, QTRESPRODPED 
                                                                     FROM RESERPRODPED, PARAMPEDIDO 
                                                                    WHERE NRLOTEESTQ IS NOT NULL  
                                                                      AND PARAMPEDIDO.CDFILIAL = P_CDFILIAL    
                                                                      AND IDUTRESELOTE = 'S')R 
                                                          ON ITEM.CDFILIAL  = R.CDFILIAL  
                                                         AND ITEM.NRPEDIDO  = R.NRPEDIDO  
                                                         AND ITEM.NRITEMPED = R.NRITEMPED 
                                                       WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                                                         AND (PROD.CDARVPROD BETWEEN P_CDPRODINI  AND P_CDPRODFIN  ) 
                                                         AND (PED.CDFILIAL      = P_CDFILIAL )                         
                                                         AND ((PED.IDSITPEDIDO  = '2') OR (PED.IDSITPEDIDO = '6'))     
                                                         AND (P_STTODOPEDIDO    = 'T')                                  
                                                         AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                         AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                          OR (INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                         AND ((ITEM.IDSITITEMPED = '3') OR (ITEM.IDSITITEMPED = '7'))               
                                                         AND (TO_DATE(ITEM.DTENTITPED) BETWEEN  P_DTINI AND P_DTFIN  )  
                                                         AND ((INSTR( P_IDMRPPEDPREV , 'P') > 0) OR (INSTR( P_IDMRPPEDPREV , 'A') > 0) ) 
                                                         AND (NOT EXISTS(SELECT CDFILIAL 
                                                                           FROM PEDIDOP 
                                                                          WHERE (CDFILIAL  = ITEM.CDFILIAL) 
                                                                            AND (NRPEDIDO  = ITEM.NRPEDIDO) 
                                                                            AND (NRITEMPED = ITEM.NRITEMPED))) 
                                                       GROUP BY PED.NRPEDIDO, PED.CDFILIAL, P1.IDPRODPROD, PROD.CDPRODESTO, PROD.VRFATOCONV, TO_DATE(ITEM.DTENTITPED), 'P' 
                                                     )GROUP BY CDFILIAL, CDPRODUTO, DTENTITPED, IDORIGEM 
                                                UNION                                   
                                               SELECT CDFILIAL, CDPRODUTO, MAX(IDPRODPROD) IDPRODPROD, DTENTITPED, SUM(QTVENDAPCP), IDORIGEM 
                                                 FROM(SELECT  
                                                             DISTINCT PV.CDFILIAL, 
                                                             PROD.CDPRODESTO CDPRODUTO, 
                                                             P.IDPRODPROD AS IDPRODPROD, 
                                                             PV.DTPREVIVENDA AS DTENTITPED, 
                                                             NVL((PV.QTPREVIVENDA*Prod.VRFATOCONV), 0) QTVENDAPCP, 
                                                             'V' AS IDORIGEM 
                                                        FROM PREVIVENDA PV  
                                                       INNER JOIN PRODUTO PROD 
                                                          ON PV.CDPRODUTO = PROD.CDPRODUTO  
                                                        FULL OUTER JOIN PRODUTO P1 
                                                          ON PROD.CDPRODUTO = P1.CDPRODESTO  
                                                       INNER JOIN PRODUTO P 
                                                          ON PROD.CDPRODESTO = P.CDPRODUTO                                                        
                                                       WHERE (PV.CDFILIAL  = P_CDFILIAL )                             
                                                         AND (TO_DATE(PV.DTPREVIVENDA) BETWEEN P_DTINI AND P_DTFIN) 
                                                         AND ((INSTR(P_IDMRPPEDPREV, 'V') > 0) OR (INSTR( P_IDMRPPEDPREV, 'A') > 0)) 
                                                      )GROUP BY CDFILIAL, CDPRODUTO, DTENTITPED, IDORIGEM 
                                                UNION 
                                               SELECT  
                                                      D.CDFILIAL, 
                                                      D.CDPRODUTO, 
                                                      PROD.IDPRODPROD, 
                                                      D.DTENTRDEMA AS DTENTITPED, 
                                                      NVL(SUM(D.QTDEMAEXTRA), 0) QTVENDAPCP, 
                                                      'D' AS IDORIGEM 
                                                 FROM DEMAEXTRAMRP D 
                                                INNER JOIN PRODUTO PROD 
                                                   ON D.CDPRODUTO  = PROD.CDPRODUTO 
                                                WHERE (D.CDFILIAL   = P_CDFILIAL ) 
                                                  AND (P_IDCONSDEMA  = 'S')  
                                                  AND D.DTENTRDEMA BETWEEN P_DTINI AND P_DTFIN  
                                                GROUP BY D.CDFILIAL, D.CDPRODUTO, PROD.IDPRODPROD, D.DTENTRDEMA, 'D' 
                                                UNION 
                                               SELECT P_CDFILIAL , PROD.CDPRODESTO CDPRODUTO, 
                                                      P.IDPRODPROD, 
                                                      I.DTPROGENTR AS DTENTITPED, 
                                                      NVL(SUM((QTSOLIPROD*P1.VRFATOCONV)),0) QTVENDAPCP, 
                                                      'S' AS IDORIGEM 
                                                 FROM PARAMPRODMRP PA 
                                                INNER JOIN PRODUTO PROD 
                                                   ON PROD.CDPRODUTO = PA.CDPRODUTO 
                                                 FULL OUTER JOIN PRODUTO P1 
                                                   ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                                INNER JOIN PRODUTO P 
                                                   ON PROD.CDPRODESTO = P.CDPRODUTO 
                                                INNER JOIN ITEMSOLI I 
                                                   ON P1.CDPRODUTO = I.CDPRODUTO 
                                                INNER JOIN LISTA L  
                                                   ON L.CDLISTA = I.CDFILLAN||I.CDFILSOLI||I.NRSOLICMP     
                                                INNER JOIN SOLICITA SO 
                                                   ON SO.CDFILLANCA = I.CDFILLAN 
                                                  AND SO.CDFILSOLI  = I.CDFILSOLI 
                                                  AND SO.NRSOLICMP  = I.NRSOLICMP 
                                                INNER JOIN (SELECT CDFILIAL 
                                                              FROM FILIAL 
                                                             WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI  = 'T'))) F 
                                                   ON I.CDFILSOLI  = F.CDFILIAL      
                                                WHERE (SO.IDBAIXASOL IS NULL) 
                                                  AND (P_STTSOLICITA IS NULL) 
                                                  AND (CDFILIALPED IS NULL) 
                                                  AND (NRPEDIDO    IS NULL) 
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI  AND P_CDPRODFIN ) 
                                                  AND (IDSOLIAPROV = 'S') 
                                                  AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN  
                                                  AND (L.NRLISTA   = P_STLISTASOLI ) 
                                                  AND (P_CDFILIAL   = PA.CDFILIAL) 
                                                  AND (INSTR( P_IDMRPPEDPREV , 'S') > 0) 
                                                  AND (NOT EXISTS(SELECT NRSOLICMP 
                                                                    FROM SOLICITAOP 
                                                                   WHERE CDFILSOLI = I.CDFILSOLI  
                                                                     AND CDFILLAN  = I.CDFILLAN  
                                                                     AND NRSOLICMP = I.NRSOLICMP  
                                                                     AND CDPRODUTO = I.CDPRODUTO  
                                                                     AND DTPROGENTR = I.DTPROGENTR)) 
                                                GROUP BY P_CDFILIAL , PROD.CDPRODESTO, P.IDPRODPROD, I.DTPROGENTR, 'S' 
                                                UNION 
                                               SELECT P_CDFILIAL , 
                                                      PROD.CDPRODESTO CDPRODUTO, 
                                                      P.IDPRODPROD, 
                                                      I.DTPROGENTR AS DTENTITPED, 
                                                      NVL(SUM((QTSOLIPROD*P1.VRFATOCONV)),0) QTVENDAPCP, 
                                                      'S' AS IDORIGEM 
                                                 FROM PARAMPRODMRP PA 
                                                INNER JOIN PRODUTO PROD 
                                                   ON PROD.CDPRODUTO = PA.CDPRODUTO 
                                                 FULL OUTER JOIN PRODUTO P1 
                                                   ON PROD.CDPRODUTO = P1.CDPRODESTO 
                                                INNER JOIN PRODUTO P 
                                                   ON PROD.CDPRODESTO = P.CDPRODUTO 
                                                INNER JOIN ITEMSOLI I 
                                                   ON P1.CDPRODUTO = I.CDPRODUTO 
                                                INNER JOIN SOLICITA SO 
                                                   ON SO.CDFILLANCA = I.CDFILLAN 
                                                  AND SO.CDFILSOLI  = I.CDFILSOLI 
                                                  AND SO.NRSOLICMP  = I.NRSOLICMP 
                                                INNER JOIN (SELECT CDFILIAL 
                                                              FROM FILIAL 
                                                             WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI  = 'T'))) F 
                                                   ON I.CDFILSOLI  = F.CDFILIAL   
                                                WHERE (SO.IDBAIXASOL IS NULL) 
                                                  AND (P_STTSOLICITA = 'T') 
                                                  AND (CDFILIALPED IS NULL) 
                                                  AND (NRPEDIDO    IS NULL) 
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI  AND P_CDPRODFIN  ) 
                                                  AND (IDSOLIAPROV = 'S') 
                                                  AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                                                  AND (P_CDFILIAL    = PA.CDFILIAL) 
                                                  AND (INSTR(P_IDMRPPEDPREV , 'S') > 0) 
                                                  AND (NOT EXISTS(SELECT NRSOLICMP 
                                                                    FROM SOLICITAOP 
                                                                   WHERE CDFILSOLI = I.CDFILSOLI  
                                                                     AND CDFILLAN  = I.CDFILLAN  
                                                                     AND NRSOLICMP = I.NRSOLICMP  
                                                                     AND CDPRODUTO = I.CDPRODUTO  
                                                                     AND DTPROGENTR = I.DTPROGENTR)) 
                                                GROUP BY P_CDFILIAL , PROD.CDPRODESTO, P.IDPRODPROD, I.DTPROGENTR, 'S' 
                                              ) VEN 
                                         GROUP BY VEN.CDFILIAL, VEN.CDPRODUTO, VEN.IDPRODPROD, VEN.DTENTITPED 
                                      )IT 
                                WHERE (IT.CDFILIAL        = PF.CDFILIAL   (+))                  
                                  AND (IT.CDPRODUTO       = PF.CDPRODESTO (+))                  
                                  AND (PROC.CDFILIAL      = IT.CDFILIAL)                        
                                  AND (PROC.CDPRODUTO     = IT.CDPRODUTO)                       
                                  AND (PROC.IDPROFABPADR  = 'S')                                
                                  AND (OP.CDFILIAL    (+) = IT.CDFILIAL)                        
                                  AND (OP.CDPRODUTO   (+) = IT.CDPRODUTO)                                             
                                  AND (IT.CDFILIAL      = PP.CDFILIAL (+))                       
                                  AND (IT.CDPRODUTO     = PP.CDPRODUTO(+))                        
                                  AND (IT.CDPRODUTO  = DT.CDPRODUTO)                               
                                  AND (IT.DTENTITPED = DT.DTENTITPED)  
                                  AND ((PROC.CDPROCFABRIC IN (SELECT CDPROCFABRIC 
                                                                FROM REVIPROCFABRIC 
                                                               WHERE CDFILIAL     = PROC.CDFILIAL 
                                                                 AND CDPROCFABRIC = PROC.CDPROCFABRIC 
                                                                 AND CDPRODUTO    = PROC.CDPRODUTO 
                                                                 AND IDSITREVISAO = 'A' 
                                                                 AND DTGERREVISAO = (SELECT MAX(DTGERREVISAO) 
                                                                                       FROM REVIPROCFABRIC 
                                                                                      WHERE CDFILIAL     = PROC.CDFILIAL 
                                                                                        AND CDPROCFABRIC = PROC.CDPROCFABRIC 
                                                                                        AND CDPRODUTO    = PROC.CDPRODUTO))) 
                                   OR (V_IDAUDIPROCFAB = 'N')) 
                                UNION ALL 
                               SELECT OP.CDPRODUTO, 
                                      PR.IDPRODPROD, 
                                      OP.DTHRFIMPREOP AS DTMINENTPED, 
                                      --DECODE( P_IDESTOQUE, 'S', NVL(PS.QTESTDIACON, 0), 0)  AS QTDEESTO, 
                                      0 QTVENDAPCP, 
                                      NVL(PF.QTESTOSEGU, 0) AS QTESTOQMIN, 
                                      NVL(PROC.QTPADPROCFAB, 0) AS QTPADPROCFAB, 
                                      NVL(PROC.QTLOTEFABDIA, 0) AS QTLOTEFABDIA, 
                                      NVL(PRODU.QTPRODUCAO, 0) AS QTPRODUCAO, 
                                      NVL(PRODU.QTANDPROD, 0) AS QTANDPROD, 
                                      NVL(PRODU.QTTOTALPROD, 0) AS QTTOTALPROD 
                                 FROM ORDPRODUCAO OP, PARAMPRODMRP P, PRODUTO PR, /*POSESTCONS PS,*/ ESTOSEGU PF, PROCFABRICA PROC, 
                                      (SELECT A.CDFILIAL, 
                                              A.CDPRODUTO, 
                                              A.IDGERAOPCONF, 
                                              SUM(A.QTPRODUCAO) AS QTPRODUCAO, 
                                              SUM(A.QTANDPROD) AS QTANDPROD, 
                                              NVL(SUM(A.QTTOTALPROD), 0) AS QTTOTALPROD 
                                          FROM  
                                              (SELECT L.CDFILIAL, 
                                                      L.CDPRODUTO, 
                                                      P.IDGERAOPCONF, 
                                                      0 AS QTPRODUCAO, 
                                                      NVL(SUM(L.QTPRODLOTE), 0) AS QTANDPROD, 
                                                      NVL(SUM(L.QTPRODLOTE), 0) AS QTTOTALPROD 
                                                 FROM LOTE L , PARAMPRODMRP P 
                                                WHERE (L.CDFILIAL     = P_CDFILIAL)   
                                                  AND (L.IDSTPRODLOTE = '3') 
                                                  AND P.CDFILIAL = L.CDFILIAL  
                                                  AND P.CDPRODUTO = L.CDPRODUTO  
                                                  AND P.IDGERAOPCONF = 'S' 
                                                GROUP BY L.CDFILIAL, L.CDPRODUTO, P.IDGERAOPCONF 
                                                UNION ALL 
                                               SELECT  
                                                      O.CDFILIAL, 
                                                      O.CDPRODUTO, 
                                                      P.IDGERAOPCONF, 
                                                      NVL(SUM(QTAPRODPREOP),0) AS QTPRODUCAO, 
                                                      0 AS QTANDPROD, 
                                                      NVL(SUM(QTAPRODPREOP), 0) AS QTTOTALPROD 
                                                 FROM ORDPRODUCAO O, PARAMPRODMRP P 
                                                WHERE (O.CDFILIAL     = P_CDFILIAL  )   
                                                  AND (P.CDFILIAL    = O.CDFILIAL )  
                                                  AND (P.CDPRODUTO   = O.CDPRODUTO)  
                                                  AND (IDSITORDPROD = '1')          
                                                  AND (IDCONFIRMAOP = 'S')  
                                                  AND (P.IDGERAOPCONF = 'S') 
                                                GROUP BY O.CDFILIAL, O.CDPRODUTO, P.IDGERAOPCONF 
                                              ) A 
                                         GROUP BY A.CDFILIAL, A.CDPRODUTO, A.IDGERAOPCONF 
                                      ) PRODU 
                                 WHERE (OP.CDFILIAL     = P_CDFILIAL)   
                                   AND (PR.CDPRODUTO    = OP.CDPRODUTO)  
                                   AND (PR.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN )  
                                   AND (OP.IDSITORDPROD = '2') 
                                   AND P.CDFILIAL = OP.CDFILIAL  
                                   AND P.CDPRODUTO = OP.CDPRODUTO  
                                   AND P.IDGERAOPCONF = 'S'  
                                   /*AND ((PS.DTPOSESTCON = (SELECT MAX(PO.DTPOSESTCON) 
                                                             FROM POSESTCONS PO 
                                                            WHERE PO.CDFILIAL     = P_CDFILIAL       
                                                              AND PO.CDPRODUTO    = OP.CDPRODUTO     
                                                              AND PO.DTPOSESTCON <= (SYSDATE + 1))) OR PS.DTPOSESTCON IS NULL) */ 
                                  -- AND (PS.CDFILIAL (+)    = OP.CDFILIAL)        
                                  -- AND (PS.CDPRODUTO(+)    = OP.CDPRODUTO)       
                                   AND (OP.CDFILIAL        = PF.CDFILIAL   (+))  
                                   AND (OP.CDPRODUTO       = PF.CDPRODESTO (+))  
                                   AND (PROC.CDFILIAL      = OP.CDFILIAL)        
                                   AND (PROC.CDPRODUTO     = OP.CDPRODUTO)       
                                   AND (PROC.IDPROFABPADR  = 'S')                
                                   AND (PRODU.CDFILIAL (+) = OP.CDFILIAL)        
                                   AND (PRODU.CDPRODUTO(+) = OP.CDPRODUTO)       
                                   AND ((PROC.CDPROCFABRIC IN (SELECT CDPROCFABRIC 
                                                                 FROM REVIPROCFABRIC 
                                                                WHERE CDFILIAL     = PROC.CDFILIAL 
                                                                  AND CDPROCFABRIC = PROC.CDPROCFABRIC 
                                                                  AND CDPRODUTO    = PROC.CDPRODUTO 
                                                                  AND IDSITREVISAO = 'A' 
                                                                  AND DTGERREVISAO = (SELECT MAX(DTGERREVISAO) 
                                                                                        FROM REVIPROCFABRIC 
                                                                                       WHERE CDFILIAL     = PROC.CDFILIAL 
                                                                                         AND CDPROCFABRIC = PROC.CDPROCFABRIC 
                                                                                         AND CDPRODUTO    = PROC.CDPRODUTO))) OR (V_IDAUDIPROCFAB = 'N'))  
                                   AND ((OP.DTHRFIMPREOP > SYSDATE) OR (OP.DTHRFIMPREOP = SYSDATE))) PED 
                        ORDER BY PED.DTMINENTPED, PED.CDPRODUTO)LOOP 


          SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(MAX(NRORDENAOP),'0')) + 1),10,'0') 
            INTO V_NRORDENAOP 
            FROM CALEPRODMRP 
           WHERE CDFILIAL     = P_CDFILIAL 
             AND DTPROGPRODCP = P_DTMRP;

          V_QTESTDIACON := CASE WHEN P_IDESTOQUE= 'S' THEN POSESTCONS_LOTE_VALIDO(P_CDFILIAL,C_PRODPED.CDPRODUTO,'','','S',SYSDATE,C_PRODPED.DTMINENTPED) ELSE 0 END;

          GERA_MRP_PRODUTO(P_CDFILIAL, P_DTMRP, C_PRODPED.CDPRODUTO, C_PRODPED.IDPRODPROD, 
                          C_PRODPED.DTMINENTPED, V_QTESTDIACON, C_PRODPED.QTESTOQMIN, 
                          C_PRODPED.QTPADPROCFAB, C_PRODPED.QTLOTEFABDIA, C_PRODPED.QTVENDAPCP, 
                          C_PRODPED.QTPRODUCAO, P_DTINI, P_DTFIN, 
                          P_CDPRODINI, P_CDPRODFIN, P_IDMRPPEDPREV, P_IDESTOQUE, P_IDCONSDEMA, 
                          V_NRORDENAOP, '0', C_PRODPED.CDPRODUTO, C_PRODPED.DTMINENTPED, NULL, 
                          C_PRODPED.QTANDPROD, C_PRODPED.QTTOTALPROD, 'N','N',P_IDGERSEMIACA); 

       END LOOP; 
   ELSE  
      FOR C_PRODPLAN IN(SELECT PED.CDPRODUTO, 
                               PED.IDPRODPROD, 
                               PED.DTMINENTPED, 
                               --PED.QTDEESTO, 
                               PED.QTVENDAPCP, 
                               PED.QTESTOQMIN, 
                               PED.QTPADPROCFAB, 
                               PED.QTLOTEFABDIA, 
                               PED.QTPRODUCAO, 
                               PED.QTANDPROD, 
                               PED.QTTOTALPROD 
                          FROM (SELECT IT.CDPRODUTO, 
                                       IT.IDPRODPROD, 
                                       DT.DTMINENTPED - DECODE( NVL(IDAPLICHRSEG, 'L'), 'P', ( PP.QTHRSEGPROD/24), 0) AS DTMINENTPED, 
                                       --DECODE(P_IDESTOQUE, 'S', NVL(P.QTESTDIACON, 0), 0)  AS QTDEESTO, 
                                       NVL(IT.QTVENDAPCP, 0) AS QTVENDAPCP, 
                                       0 AS QTESTOQMIN, 
                                       NVL(PROC.QTPADPROCFAB, 0) AS QTPADPROCFAB, 
                                       NVL(PROC.QTLOTEFABDIA, 0) AS QTLOTEFABDIA, 
                                       NVL(OP.QTPRODUCAO, 0) AS QTPRODUCAO, 
                                       NVL(OP.QTANDPROD, 0) AS QTANDPROD, 
                                       NVL(OP.QTTOTALPROD, 0) AS QTTOTALPROD 
                                  FROM PROCFABRICA PROC, /*POSESTCONS P,*/ PARAMPRODMRP PP, 
                                       (SELECT A.CDFILIAL, 
                                               A.CDPRODUTO, 
                                               A.IDGERAOPCONF, 
                                               SUM(A.QTPRODUCAO) AS QTPRODUCAO, 
                                               SUM(A.QTANDPROD) AS QTANDPROD, 
                                               NVL(SUM(A.QTTOTALPROD), 0) AS QTTOTALPROD 
                                          FROM (SELECT L.CDFILIAL, 
                                                       L.CDPRODUTO, 
                                                       P.IDGERAOPCONF, 
                                                       0 AS QTPRODUCAO, 
                                                       NVL(SUM(L.QTPRODLOTE), 0) AS QTANDPROD, 
                                                       NVL(SUM(L.QTPRODLOTE), 0) AS QTTOTALPROD 
                                                  FROM LOTE L, PARAMPRODMRP P 
                                                 WHERE (L.CDFILIAL     = P_CDFILIAL)   
                                                   AND (L.IDSTPRODLOTE = '3')  
                                                   AND (P.CDFILIAL = L.CDFILIAL)  
                                                   AND (P.CDPRODUTO = L.CDPRODUTO)  
                                                   AND (P.IDGERAOPCONF = 'S') 
                                                 GROUP BY L.CDFILIAL, L.CDPRODUTO, P.IDGERAOPCONF 
                                                 UNION ALL 
                                                SELECT O.CDFILIAL, 
                                                       O.CDPRODUTO, 
                                                       P.IDGERAOPCONF, 
                                                       NVL(SUM(QTAPRODPREOP),0) AS QTPRODUCAO, 
                                                       0 AS QTANDPROD, 
                                                       NVL(SUM(QTAPRODPREOP), 0) AS QTTOTALPROD 
                                                  FROM ORDPRODUCAO O, PARAMPRODMRP P 
                                                 WHERE (O.CDFILIAL     = P_CDFILIAL)   
                                                   AND (O.IDSITORDPROD = '1')          
                                                   AND (O.IDCONFIRMAOP = 'S')          
                                                   AND (P.CDFILIAL = O.CDFILIAL)       
                                                   AND (P.CDPRODUTO = O.CDPRODUTO)     
                                                   AND (P.IDGERAOPCONF = 'S') 
                                                 GROUP BY O.CDFILIAL, O.CDPRODUTO, P.IDGERAOPCONF 
                                               ) A 
                                         GROUP BY A.CDFILIAL, A.CDPRODUTO, A.IDGERAOPCONF) OP, 
                                       (SELECT A.CDPRODUTO, TO_DATE(A.DTENTITPED) AS DTENTITPED, MIN(A.DTMINENTPED) AS DTMINENTPED 
                                          FROM(SELECT PROD.CDPRODESTO CDPRODUTO, TO_DATE(IT.DTENTITPED) AS DTENTITPED, MIN(IT.DTENTITPED) AS DTMINENTPED 
                                                 FROM ITEMPEDIDO IT, PEDIDO P, PRODUTO PROD, LISTA L, PRODUTO P1 
                                                WHERE (NVL(P.IDPEDINDUSTRIA, 'N') = 'N')  
                                                  AND (P.CDFILIAL = IT.CDFILIAL) 
                                                  AND (P.NRPEDIDO = IT.NRPEDIDO) 
                                                  AND (IT.CDPRODUTO    = P1.CDPRODUTO) 
                                                  AND ((INSTR(P_CDDEPTO, P.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                  AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                   OR (INSTR( P_LORC, P.NRORCAEVENTO)>0)OR (P.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                  AND (IT.CDFILIAL = P_CDFILIAL)   
                                                  AND (P.IDSITPEDIDO = '2'  )  
                                                  AND (IT.IDSITITEMPED = '3') 
                                                  AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN)  
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                  AND (PROD.CDPRODUTO = P1.CDPRODESTO)                                                   
                                                  AND (L.NRLISTA       = P_STLISTPEDIDO)                       
                                                  AND (IT.NRPEDIDO||'/'||IT.NRITEMPED = L.CDLISTA)            
                                                  AND (P_STTODOPEDIDO <> 'T')                                  
                                                  AND (NOT EXISTS(SELECT CDFILIAL  
                                                                    FROM PEDIDOP 
                                                                   WHERE (CDFILIAL  = IT.CDFILIAL) 
                                                                     AND (NRPEDIDO  = IT.NRPEDIDO) 
                                                                     AND (NRITEMPED = IT.NRITEMPED))) 
                                                GROUP BY PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED) 
                                                UNION 
                                               SELECT PROD.CDPRODESTO CDPRODUTO, TO_DATE(IT.DTENTITPED) AS DTENTITPED, MIN(IT.DTENTITPED) AS DTMINENTPED 
                                                 FROM ITEMPEDIDO IT, PEDIDO P, PRODUTO PROD, PRODUTO P1 
                                                WHERE (NVL(P.IDPEDINDUSTRIA, 'N') = 'N')  
                                                  AND ( P.CDFILIAL = IT.CDFILIAL   ) 
                                                  AND ( P.NRPEDIDO = IT.NRPEDIDO   ) 
                                                  AND (IT.CDPRODUTO    = P1.CDPRODUTO)  
                                                  AND ((INSTR(P_CDDEPTO, P.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                  AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                   OR (INSTR( P_LORC, P.NRORCAEVENTO)>0)OR (P.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                  AND (IT.CDFILIAL = P_CDFILIAL)   
                                                  AND (P.IDSITPEDIDO = '2'  ) 
                                                  AND (IT.IDSITITEMPED = '3') 
                                                  AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN)  
                                                  AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                  AND (PROD.CDPRODUTO = P1.CDPRODESTO)                                                   
                                                  AND (P_STTODOPEDIDO = 'T')                                
                                                  AND (NOT EXISTS(SELECT CDFILIAL  
                                                                    FROM PEDIDOP 
                                                                   WHERE (CDFILIAL  = IT.CDFILIAL) 
                                                                     AND (NRPEDIDO  = IT.NRPEDIDO) 
                                                                     AND (NRITEMPED = IT.NRITEMPED))) 
                                                GROUP BY PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED) 
                                                UNION 
                                               SELECT DISTINCT D.CDPRODUTO,D.DTENTRDEMA AS DTENTITPED, TO_DATE(TO_CHAR(TRUNC(D.DTENTRDEMA), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                 FROM DEMAEXTRAMRP D, PARAMPRODMRP PA, PRODUTO P 
                                                WHERE (D.CDFILIAL   = P_CDFILIAL)  
                                                  AND (D.CDPRODUTO = P.CDPRODUTO)                                                 
                                                  AND (D.CDFILIAL   = PA.CDFILIAL (+))  
                                                  AND (P.CDPRODESTO  = PA.CDPRODUTO (+)) 
                                                  AND (P_IDCONSDEMA = 'S')               
                                                  AND D.DTENTRDEMA BETWEEN P_DTINI AND P_DTFIN 
                                                UNION 
                                               SELECT DISTINCT P1.CDPRODESTO CDPRODUTO, P.DTPREVIVENDA AS DTENTITPED, TO_DATE(TO_CHAR(TRUNC(P.DTPREVIVENDA), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                 FROM PREVIVENDA P, PARAMPRODMRP PA, PRODUTO P1 
                                                WHERE (P.CDFILIAL  = P_CDFILIAL)                             
                                                  AND (TO_DATE(P.DTPREVIVENDA) BETWEEN P_DTINI AND P_DTFIN)  
                                                  AND (P.CDFILIAL  = PA.CDFILIAL (+))                        
                                                  AND (P.CDPRODUTO = P1.CDPRODUTO) 
                                                  AND (P1.CDPRODUTO = PA.CDPRODUTO (+)) 
                                                UNION 
                                               SELECT PR.CDPRODUTO,  
                                                      TO_DATE(P_DTINI) AS DTENTITPED, 
                                                      TO_DATE(TO_CHAR(TRUNC(P_DTFIN ), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                 FROM ESTOSEGU E, PRODUTO PR, PARAMPRODMRP PA, 
                                                      (SELECT V.QTESTDIACON, V.CDFILIAL, V.CDPRODUTO
                                                         FROM POSESTCONS V, PRODUTO M 
                                                        WHERE V.CDPRODUTO = M.CDPRODUTO  
                                                          AND V.CDFILIAL = P_CDFILIAL  
                                                          AND M.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN  
                                                          AND((V.DTPOSESTCON = (SELECT DTPOSESTCON
                                                                                FROM (SELECT PO.DTPOSESTCON
                                                                                        FROM POSESTCONS PO 
                                                                                       WHERE PO.CDFILIAL    = P_CDFILIAL 
                                                                                         AND PO.CDPRODUTO   = M.CDPRODUTO
                                                                                         AND PO.DTPOSESTCON <= (SYSDATE + 1)
                                                                                      ORDER BY 1 DESC)
                                                                              WHERE ROWNUM = 1))))EST  
                                                WHERE EST.CDFILIAL(+)  = E.CDFILIAL  
                                                  AND EST.CDPRODUTO(+) = E.CDPRODESTO  
                                                  AND PR.CDPRODUTO     = E.CDPRODESTO  
                                                  AND (E.CDFILIAL      = PA.CDFILIAL (+))   
                                                  AND (E.CDPRODESTO    = PA.CDPRODUTO (+))  
                                                  AND E.CDFILIAL =     P_CDFILIAL  
                                                  AND PR.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN  
                                                  AND NVL(EST.QTESTDIACON,0) < NVL(QTESTOSEGU,0)
                                                  --AND POSESTCONS_LOTE_VALIDO(E.CDFILIAL,E.CDPRODESTO,'S',SYSDATE,P_DTMRP) < NVL(QTESTOSEGU,0)
                                                UNION 
                                               SELECT DISTINCT P1.CDPRODESTO CDPRODUTO, DTPROGENTR AS DTENTITPED, TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') 
                                                 FROM SOLICITA SO, ITEMSOLI I, PRODUTO P, PRODUTO P1, LISTA L, LISTA M, PARAMPRODMRP PA 
                                                WHERE (SO.IDBAIXASOL IS NULL) 
                                                  AND (SO.CDFILLANCA = I.CDFILLAN) 
                                                  AND (SO.CDFILSOLI  = I.CDFILSOLI) 
                                                  AND (SO.NRSOLICMP  = I.NRSOLICMP) 
                                                  AND (CDFILIALPED IS NULL) 
                                                  AND (NRPEDIDO    IS NULL) 
                                                  AND  I.CDPRODUTO = P1.CDPRODUTO 
                                                  AND (P.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                  AND (P.CDPRODUTO = P1.CDPRODESTO) 
                                                  AND (IDSOLIAPROV = 'S') 
                                                  AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                                                  AND I. CDFILLAN||I.CDFILSOLI||I.NRSOLICMP = L.CDLISTA 
                                                  AND ((L.NRLISTA   = P_STLISTASOLI) OR ( P_STTSOLICITA = 'T')) 
                                                  AND I.CDFILSOLI   = M.CDLISTA 
                                                  AND ((M.NRLISTA   = P_STLISTAFILI) OR ( P_STTFILISOLI = 'T')) 
                                                  AND (P_CDFILIAL   = PA.CDFILIAL) 
                                                  AND (P1.CDPRODESTO  = PA.CDPRODUTO) 
                                              ) A 
                                         GROUP BY A.CDPRODUTO, TO_DATE(A.DTENTITPED)) DT, 
                                       (SELECT VEN.CDFILIAL, 
                                               VEN.CDPRODUTO, 
                                               PROD.IDPRODPROD, 
                                               VEN.DTENTITPED, 
                                               NVL(SUM(VEN.QTVENDAPCP), 0) AS QTVENDAPCP 
                                          FROM PRODUTO PROD, 
                                               (SELECT IT.CDFILIAL, 
                                                       PROD.CDPRODESTO CDPRODUTO, 
                                                       TO_DATE(IT.DTENTITPED) AS DTENTITPED, 
                                                       NVL(SUM((IT.QTITEMPED*P1.VRFATOCONV) - (IT.QTEXPITEMPED*P1.VRFATOCONV)), 0) AS QTVENDAPCP, 
                                                       'P' AS IDORIGEM 
                                                  FROM ITEMPEDIDO IT, PARAMPRODMRP P, PEDIDO PED, PRODUTO PROD, LISTA L, PRODUTO P1 
                                                 WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                                                   AND (PED.CDFILIAL  = IT.CDFILIAL) 
                                                   AND (PED.NRPEDIDO  = IT.NRPEDIDO) 
                                                   AND (IT.CDPRODUTO  = P1.CDPRODUTO)  
                                                   AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                   AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                    OR(INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                   AND (IT.CDFILIAL  = P_CDFILIAL)                             
                                                   AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                   AND (PROD.CDPRODUTO = P1.CDPRODESTO)                                                    
                                                   AND (L.NRLISTA      = P_STLISTPEDIDO)                       
                                                   AND (IT.NRPEDIDO||'/'||IT.NRITEMPED = L.CDLISTA)             
                                                   AND (P_STTODOPEDIDO <> 'T')                                  
                                                   AND (PED.IDSITPEDIDO = '2'  )      
                                                   AND (IT.IDSITITEMPED = '3')        
                                                   AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN)  
                                                   AND (IT.CDFILIAL = P.CDFILIAL)  
                                                   AND (IT.CDPRODUTO= P.CDPRODUTO)  
                                                   AND (P.IDGERAOPCONF = 'S')  
                                                   AND (NOT EXISTS(SELECT CDFILIAL 
                                                                     FROM PEDIDOP 
                                                                    WHERE (CDFILIAL  = IT.CDFILIAL) 
                                                                      AND (NRPEDIDO  = IT.NRPEDIDO) 
                                                                      AND (NRITEMPED = IT.NRITEMPED))) 
                                                 GROUP BY IT.CDFILIAL, PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED), 'P' 
                                                 UNION 
                                                SELECT IT.CDFILIAL, 
                                                       PROD.CDPRODESTO CDPRODUTO, 
                                                       TO_DATE(IT.DTENTITPED) AS DTENTITPED, 
                                                       NVL(SUM((IT.QTITEMPED*P1.VRFATOCONV) - (IT.QTEXPITEMPED*P1.VRFATOCONV)), 0) AS QTVENDAPCP, 
                                                       'P' AS IDORIGEM 
                                                  FROM ITEMPEDIDO IT, PARAMPRODMRP P, PEDIDO PED, PRODUTO PROD, PRODUTO P1 
                                                 WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                                                   AND (PED.CDFILIAL  = IT.CDFILIAL) 
                                                   AND (PED.NRPEDIDO  = IT.NRPEDIDO) 
                                                   AND (IT.CDPRODUTO    = P1.CDPRODUTO)  
                                                   AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                                                   AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                                                    OR (INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                                                   AND (IT.CDFILIAL  = P_CDFILIAL)                           
                                                   AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                   AND (PROD.CDPRODUTO = P1.CDPRODESTO)                                                    
                                                   AND (P_STTODOPEDIDO  = 'T')                               
                                                   AND (PED.IDSITPEDIDO = '2'  )      
                                                   AND (IT.IDSITITEMPED = '3')        
                                                   AND (TO_DATE(IT.DTENTITPED) BETWEEN P_DTINI AND P_DTFIN)  
                                                   AND (IT.CDFILIAL = P.CDFILIAL)  
                                                   AND (IT.CDPRODUTO= P.CDPRODUTO)  
                                                   AND (P.IDGERAOPCONF = 'S')  
                                                   AND (NOT EXISTS(SELECT CDFILIAL 
                                                                     FROM PEDIDOP 
                                                                    WHERE (CDFILIAL  = IT.CDFILIAL) 
                                                                      AND (NRPEDIDO  = IT.NRPEDIDO) 
                                                                      AND (NRITEMPED = IT.NRITEMPED))) 
                                                 GROUP BY IT.CDFILIAL, PROD.CDPRODESTO, TO_DATE(IT.DTENTITPED), 'P' 
                                                 UNION 
                                                SELECT D.CDFILIAL, 
                                                       D.CDPRODUTO, 
                                                       D.DTENTRDEMA AS DTENTITPED, 
                                                       NVL(SUM((D.QTDEMAEXTRA*PROD.VRFATOCONV)), 0) QTVENDAPCP, 
                                                       'D' AS IDORIGEM 
                                                  FROM DEMAEXTRAMRP D,PRODUTO PROD 
                                                 WHERE (D.CDFILIAL   = P_CDFILIAL)   
                                                   AND (D.CDPRODUTO  = PROD.CDPRODUTO)                                                  
                                                   AND (P_IDCONSDEMA = 'S')  
                                                   AND D.DTENTRDEMA BETWEEN P_DTINI AND P_DTFIN 
                                                 GROUP BY D.CDFILIAL, D.CDPRODUTO, D.DTENTRDEMA, 'D' 
                                                 UNION 
                                                SELECT P.CDFILIAL, 
                                                       P1.CDPRODESTO CDPRODUTO, 
                                                       P.DTPREVIVENDA AS DTENTITPED, 
                                                       NVL(SUM((P.QTPREVIVENDA*P1.VRFATOCONV)), 0) QTVENDAPCP, 
                                                       'V' AS IDORIGEM 
                                                  FROM PRODUTO PROD, PREVIVENDA P, PRODUTO P1 
                                                 WHERE (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN)  
                                                   AND (PROD.CDPRODUTO = P1.CDPRODESTO)                                                  
                                                   AND (P.CDFILIAL  = P_CDFILIAL)                             
                                                   AND (TO_DATE(P.DTPREVIVENDA) BETWEEN P_DTINI AND P_DTFIN)  
                                                   AND (P.CDPRODUTO = P1.CDPRODUTO) 
                                                 GROUP BY P.CDFILIAL, P1.CDPRODESTO, P.DTPREVIVENDA 
                                                 UNION 
                                                SELECT E.CDFILIAL,  
                                                       PR.CDPRODUTO, 
                                                       TO_DATE(TO_CHAR(TRUNC(P_DTFIN ), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI'), 
                                                       ABS(NVL(POSESTCONS_LOTE_VALIDO(E.CDFILIAL,E.CDPRODESTO,'S',SYSDATE,P_DTMRP),0) - NVL(QTESTOSEGU,0)) AS QTVENDAPCP, 
                                                       'E' AS IDORIGEM 
                                                  FROM ESTOSEGU E, PRODUTO PR, PARAMPRODMRP PA, 
                                                       (SELECT V.QTESTDIACON, V.CDFILIAL, V.CDPRODUTO 
                                                          FROM POSESTCONS V, PRODUTO M 
                                                         WHERE V.CDPRODUTO = M.CDPRODUTO  
                                                           AND V.CDFILIAL = P_CDFILIAL  
                                                           AND M.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN  
                                                           AND((V.DTPOSESTCON = (SELECT MAX(PO.DTPOSESTCON) 
                                                                                   FROM POSESTCONS PO 
                                                                                  WHERE PO.CDFILIAL  = P_CDFILIAL    
                                                                                    AND PO.CDPRODUTO = M.CDPRODUTO  
                                                                                    AND PO.DTPOSESTCON <= (SYSDATE + 1) )))
                                                          AND((V.DTPOSESTCON = (SELECT DTPOSESTCON
                                                                                FROM (SELECT PO.DTPOSESTCON
                                                                                        FROM POSESTCONS PO 
                                                                                       WHERE PO.CDFILIAL    = P_CDFILIAL 
                                                                                         AND PO.CDPRODUTO   = M.CDPRODUTO
                                                                                         AND PO.DTPOSESTCON <= (SYSDATE + 1)
                                                                                      ORDER BY 1 DESC)
                                                                              WHERE ROWNUM = 1))))EST 
                                                 WHERE EST.CDFILIAL(+)  = E.CDFILIAL  
                                                   AND EST.CDPRODUTO(+) = E.CDPRODESTO  
                                                   AND PR.CDPRODUTO     = E.CDPRODESTO  
                                                   AND (E.CDFILIAL    = PA.CDFILIAL (+))   
                                                   AND (E.CDPRODESTO  = PA.CDPRODUTO (+)) 
                                                   AND E.CDFILIAL = P_CDFILIAL  
                                                   AND PR.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN  
                                                   AND NVL(EST.QTESTDIACON,0) < NVL(QTESTOSEGU,0)
                                                   --AND POSESTCONS_LOTE_VALIDO(E.CDFILIAL,E.CDPRODESTO,'S',SYSDATE,P_DTMRP) < NVL(QTESTOSEGU,0)
                                                 UNION 
                                                SELECT P_CDFILIAL, 
                                                       P1.CDPRODESTO CDPRODUTO, 
                                                       TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') AS DTENTITPED, 
                                                       NVL(SUM((QTSOLIPROD*P1.VRFATOCONV)),0) QTVENDAPCP, 
                                                       'S' AS IDORIGEM 
                                                  FROM SOLICITA SO, ITEMSOLI I, PRODUTO P, PRODUTO P1, LISTA L, PARAMPRODMRP PA, 
                                                       (SELECT CDFILIAL 
                                                          FROM FILIAL 
                                                         WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI = 'T'))) F 
                                                 WHERE (SO.IDBAIXASOL IS NULL) 
                                                   AND (P_STTSOLICITA IS NULL) 
                                                   AND (SO.CDFILLANCA = I.CDFILLAN) 
                                                   AND (SO.CDFILSOLI  = I.CDFILSOLI) 
                                                   AND (SO.NRSOLICMP  = I.NRSOLICMP) 
                                                   AND (CDFILIALPED IS NULL) 
                                                   AND (NRPEDIDO    IS NULL) 
                                                   AND  I.CDPRODUTO = P1.CDPRODUTO 
                                                   AND (P.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                   AND (P.CDPRODUTO = P1.CDPRODESTO) 
                                                   AND (IDSOLIAPROV = 'S') 
                                                   AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                                                   AND I.CDFILLAN||I.CDFILSOLI||I.NRSOLICMP = L.CDLISTA 
                                                   AND (L.NRLISTA   = P_STLISTASOLI) 
                                                   AND I.CDFILSOLI = F.CDFILIAL 
                                                   AND (P_CDFILIAL   = PA.CDFILIAL) 
                                                   AND (P1.CDPRODESTO  = PA.CDPRODUTO) 
                                                   AND ( NOT EXISTS( SELECT NRSOLICMP 
                                                                       FROM SOLICITAOP 
                                                                      WHERE CDFILSOLI = I.CDFILSOLI  
                                                                        AND CDFILLAN  = I.CDFILLAN  
                                                                        AND NRSOLICMP = I.NRSOLICMP  
                                                                        AND CDPRODUTO = I.CDPRODUTO  
                                                                        AND DTPROGENTR = I.DTPROGENTR)) 
                                                 GROUP BY P_CDFILIAL, P1.CDPRODESTO, P.IDPRODPROD, TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI'), 'S' 
                                                 UNION 
                                                SELECT P_CDFILIAL, 
                                                       P1.CDPRODESTO CDPRODUTO, 
                                                       TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI') AS DTENTITPED, 
                                                       NVL(SUM((QTSOLIPROD*P1.VRFATOCONV)),0) QTVENDAPCP, 
                                                       'S' AS IDORIGEM 
                                                  FROM SOLICITA SO, ITEMSOLI I, PRODUTO P, PRODUTO P1, PARAMPRODMRP PA, 
                                                       (SELECT CDFILIAL 
                                                          FROM FILIAL 
                                                         WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI = 'T'))) F 
                                                 WHERE (SO.IDBAIXASOL IS NULL) 
                                                   AND ( P_STTSOLICITA = 'T') 
                                                   AND (SO.CDFILLANCA = I.CDFILLAN) 
                                                   AND (SO.CDFILSOLI  = I.CDFILSOLI) 
                                                   AND (SO.NRSOLICMP  = I.NRSOLICMP) 
                                                   AND (CDFILIALPED IS NULL) 
                                                   AND (NRPEDIDO    IS NULL) 
                                                   AND  I.CDPRODUTO = P1.CDPRODUTO 
                                                   AND (P.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                                                   AND (P.CDPRODUTO = P1.CDPRODESTO) 
                                                   AND (IDSOLIAPROV = 'S') 
                                                   AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                                                   AND I.CDFILSOLI = F.CDFILIAL 
                                                   AND (P_CDFILIAL   = PA.CDFILIAL) 
                                                   AND (P1.CDPRODESTO  = PA.CDPRODUTO) 
                                                   AND ( NOT EXISTS( SELECT NRSOLICMP 
                                                                       FROM SOLICITAOP 
                                                                      WHERE CDFILSOLI = I.CDFILSOLI  
                                                                        AND CDFILLAN  = I.CDFILLAN  
                                                                        AND NRSOLICMP = I.NRSOLICMP  
                                                                        AND CDPRODUTO = I.CDPRODUTO  
                                                                        AND DTPROGENTR = I.DTPROGENTR)) 
                                                 GROUP BY P_CDFILIAL, P1.CDPRODESTO, P.IDPRODPROD, TO_DATE(TO_CHAR(TRUNC(I.DTPROGENTR), 'DD/MM/YYYY') || PA.HRENTRPROD, 'DD/MM/YYYY HH24MI'), 'S' 
                                                ) VEN 
                                         WHERE (VEN.CDPRODUTO = PROD.CDPRODUTO) 
                                         GROUP BY VEN.CDFILIAL, VEN.CDPRODUTO, PROD.IDPRODPROD, VEN.DTENTITPED) IT 
                                 WHERE (PROC.CDFILIAL      = IT.CDFILIAL)                        
                                   AND (PROC.CDPRODUTO     = IT.CDPRODUTO)                       
                                   AND (PROC.IDPROFABPADR  = 'S')                                
                                   AND (OP.CDFILIAL    (+) = IT.CDFILIAL)                        
                                   AND (OP.CDPRODUTO   (+) = IT.CDPRODUTO)                       
                                  -- AND (P.CDFILIAL     (+) = IT.CDFILIAL)                        
                                  -- AND (P.CDPRODUTO    (+) = IT.CDPRODUTO)                       
                                   /*AND ((P.DTPOSESTCON = (SELECT MAX(PO.DTPOSESTCON) 
                                                            FROM POSESTCONS PO 
                                                           WHERE PO.CDFILIAL    = IT.CDFILIAL       
                                                             AND PO.CDPRODUTO   = IT.CDPRODUTO      
                                                             AND PO.DTPOSESTCON <= (SYSDATE + 1)))  
                                    OR P.DTPOSESTCON IS NULL)*/                                     
                                   AND (IT.CDPRODUTO  = DT.CDPRODUTO)                               
                                   AND (TO_DATE(IT.DTENTITPED, 'DD/MM/YYYY') = TO_DATE(DT.DTENTITPED, 'DD/MM/YYYY'))  
                                   AND (IT.CDFILIAL      = PP.CDFILIAL (+))                       
                                   AND (IT.CDPRODUTO     = PP.CDPRODUTO(+)) 
                                 UNION ALL 
                                SELECT OP.CDPRODUTO, 
                                       PR.IDPRODPROD, 
                                       OP.DTHRFIMPREOP AS DTMINENTPED, 
                                       --DECODE( P_IDESTOQUE, 'S', NVL(PS.QTESTDIACON, 0), 0)  AS QTDEESTO, 
                                       0 QTVENDAPCP, 
                                       NVL(PF.QTESTOSEGU, 0) AS QTESTOQMIN, 
                                       NVL(PROC.QTPADPROCFAB, 0) AS QTPADPROCFAB, 
                                       NVL(PROC.QTLOTEFABDIA, 0) AS QTLOTEFABDIA, 
                                       NVL(PRODU.QTPRODUCAO, 0) AS QTPRODUCAO, 
                                       NVL(PRODU.QTANDPROD, 0) AS QTANDPROD, 
                                       NVL(PRODU.QTTOTALPROD, 0) AS QTTOTALPROD 
                                  FROM ORDPRODUCAO OP, PARAMPRODMRP P, PRODUTO PR, /*POSESTCONS PS,*/ ESTOSEGU PF, PROCFABRICA PROC, 
                                       (SELECT A.CDFILIAL, 
                                               A.CDPRODUTO, 
                                               A.IDGERAOPCONF, 
                                               SUM(A.QTPRODUCAO) AS QTPRODUCAO, 
                                               SUM(A.QTANDPROD) AS QTANDPROD, 
                                               NVL(SUM(A.QTTOTALPROD), 0) AS QTTOTALPROD 
                                          FROM (SELECT  
                                                       L.CDFILIAL, 
                                                       L.CDPRODUTO, 
                                                       P.IDGERAOPCONF, 
                                                       0 AS QTPRODUCAO, 
                                                       NVL(SUM(L.QTPRODLOTE), 0) AS QTANDPROD, 
                                                       NVL(SUM(L.QTPRODLOTE), 0) AS QTTOTALPROD 
                                                  FROM LOTE L , PARAMPRODMRP P 
                                                 WHERE (L.CDFILIAL     = P_CDFILIAL)   
                                                   AND (L.IDSTPRODLOTE = '3') 
                                                   AND P.CDFILIAL = L.CDFILIAL  
                                                   AND P.CDPRODUTO = L.CDPRODUTO  
                                                   AND P.IDGERAOPCONF = 'S' 
                                                 GROUP BY L.CDFILIAL, L.CDPRODUTO, P.IDGERAOPCONF 
                                                 UNION ALL 
                                                SELECT  
                                                       O.CDFILIAL, 
                                                       O.CDPRODUTO, 
                                                       P.IDGERAOPCONF, 
                                                       NVL(SUM(QTAPRODPREOP),0) AS QTPRODUCAO, 
                                                       0 AS QTANDPROD, 
                                                       NVL(SUM(QTAPRODPREOP), 0) AS QTTOTALPROD 
                                                  FROM ORDPRODUCAO O, PARAMPRODMRP P 
                                                 WHERE (O.CDFILIAL     = P_CDFILIAL  )   
                                                   AND (P.CDFILIAL    = O.CDFILIAL )  
                                                   AND (P.CDPRODUTO   = O.CDPRODUTO)  
                                                   AND (IDSITORDPROD = '1')          
                                                   AND (IDCONFIRMAOP = 'S')  
                                                   AND (P.IDGERAOPCONF = 'S') 
                                                 GROUP BY O.CDFILIAL, O.CDPRODUTO, P.IDGERAOPCONF) A 
                                         GROUP BY A.CDFILIAL, A.CDPRODUTO, A.IDGERAOPCONF) PRODU 
                                 WHERE (OP.CDFILIAL     = P_CDFILIAL)   
                                   AND (PR.CDPRODUTO    = OP.CDPRODUTO)  
                                   AND (PR.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN )  
                                   AND (OP.IDSITORDPROD = '2') 
                                   AND P.CDFILIAL = OP.CDFILIAL  
                                   AND P.CDPRODUTO = OP.CDPRODUTO  
                                   AND P.IDGERAOPCONF = 'S'  
                                  /* AND ((PS.DTPOSESTCON = (SELECT MAX(PO.DTPOSESTCON) 
                                                             FROM POSESTCONS PO 
                                                            WHERE PO.CDFILIAL     = P_CDFILIAL       
                                                              AND PO.CDPRODUTO    = OP.CDPRODUTO      
                                                              AND PO.DTPOSESTCON <= (SYSDATE + 1))) OR PS.DTPOSESTCON IS NULL)  
                                   AND (PS.CDFILIAL (+)    = OP.CDFILIAL)       
                                   AND (PS.CDPRODUTO(+)    = OP.CDPRODUTO) */      
                                   AND (OP.CDFILIAL        = PF.CDFILIAL   (+))  
                                   AND (OP.CDPRODUTO       = PF.CDPRODESTO (+))  
                                   AND (PROC.CDFILIAL      = OP.CDFILIAL)        
                                   AND (PROC.CDPRODUTO     = OP.CDPRODUTO)       
                                   AND (PROC.IDPROFABPADR  = 'S')                
                                   AND (PRODU.CDFILIAL (+) = OP.CDFILIAL)        
                                   AND (PRODU.CDPRODUTO(+) = OP.CDPRODUTO)       
                                   AND ((OP.DTHRFIMPREOP > SYSDATE) OR (OP.DTHRFIMPREOP = SYSDATE)))PED 
                         ORDER BY PED.DTMINENTPED, PED.CDPRODUTO)LOOP 

         SELECT LPAD(TO_CHAR(TO_NUMBER(NVL(MAX(NRORDENAOP),'0')) + 1),10,'0') 
           INTO V_NRORDENAOP 
           FROM CALEPRODMRP 
          WHERE CDFILIAL     = P_CDFILIAL 
            AND DTPROGPRODCP = P_DTMRP;

         V_QTESTDIACON := CASE WHEN P_IDESTOQUE= 'S' THEN POSESTCONS_LOTE_VALIDO(P_CDFILIAL,C_PRODPLAN.CDPRODUTO,'','','S',SYSDATE,C_PRODPLAN.DTMINENTPED) ELSE 0 END; 

         GERA_MRP_PRODUTO(P_CDFILIAL, P_DTMRP, C_PRODPLAN.CDPRODUTO, C_PRODPLAN.IDPRODPROD, 
                          C_PRODPLAN.DTMINENTPED, V_QTESTDIACON, C_PRODPLAN.QTESTOQMIN, 
                          C_PRODPLAN.QTPADPROCFAB, C_PRODPLAN.QTLOTEFABDIA, C_PRODPLAN.QTVENDAPCP, 
                          C_PRODPLAN.QTPRODUCAO, P_DTINI, P_DTFIN, 
                          P_CDPRODINI, P_CDPRODFIN, P_IDMRPPEDPREV, P_IDESTOQUE, P_IDCONSDEMA, 
                          V_NRORDENAOP, '0', C_PRODPLAN.CDPRODUTO, C_PRODPLAN.DTMINENTPED, NULL, 
                          C_PRODPLAN.QTANDPROD, C_PRODPLAN.QTTOTALPROD, 'N','N',P_IDGERSEMIACA); 
      END LOOP; 
   END IF; 


   IF ((INSTR( P_IDMRPPEDPREV, 'P') > 0)OR (INSTR( P_IDMRPPEDPREV, 'A') > 0) )THEN 
      FOR C_REG IN(SELECT ITEM.CDFILIAL, ITEM.NRPEDIDO, ITEM.NRITEMPED 
                     FROM PRODUTO PROD, PEDIDO PED, ITEMPEDIDO ITEM, LISTA L, PRODUTO P 
                    WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                      AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN) 
                      AND (PROD.CDPRODUTO = P.CDPRODESTO)                       
                      AND (PED.CDFILIAL      = P_CDFILIAL)                         
                      AND ((PED.IDSITPEDIDO ='2')OR(PED.IDSITPEDIDO = '6'))        
                      AND (ITEM.CDFILIAL     = PED.CDFILIAL)                       
                      AND (ITEM.NRPEDIDO     = PED.NRPEDIDO)                       
                      AND (L.NRLISTA       = P_STLISTPEDIDO)                       
                      AND (ITEM.NRPEDIDO||'/'||ITEM.NRITEMPED = L.CDLISTA)         
                      AND (P_STTODOPEDIDO <> 'T')                                  
                      AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                      AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                       OR (INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                      AND ((ITEM.IDSITITEMPED = '3') OR (ITEM.IDSITITEMPED = '7'))    
                      AND (ITEM.CDPRODUTO    = P.CDPRODUTO)                    
                      AND (TO_DATE(ITEM.DTENTITPED) BETWEEN  P_DTINI AND P_DTFIN)  
                      AND ((INSTR( P_IDMRPPEDPREV, 'P') > 0)OR (INSTR( P_IDMRPPEDPREV, 'A') > 0) )  
                      AND (NOT EXISTS( SELECT CDFILIAL 
                                         FROM PEDIDOP 
                                        WHERE (CDFILIAL  = ITEM.CDFILIAL) 
                                          AND (NRPEDIDO  = ITEM.NRPEDIDO) 
                                          AND (NRITEMPED = ITEM.NRITEMPED))) 
                    UNION 
                   SELECT ITEM.CDFILIAL, ITEM.NRPEDIDO, ITEM.NRITEMPED 
                     FROM PRODUTO PROD, PEDIDO PED, ITEMPEDIDO ITEM, PRODUTO P 
                    WHERE (NVL(PED.IDPEDINDUSTRIA,'N') = 'N')  
                      AND (PROD.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN)     
                      AND (PROD.CDPRODUTO = P.CDPRODESTO) 
                      AND (PED.CDFILIAL      = P_CDFILIAL)                         
                      AND ((PED.IDSITPEDIDO ='2')OR(PED.IDSITPEDIDO = '6'))        
                      AND (ITEM.CDFILIAL     = PED.CDFILIAL)                       
                      AND (ITEM.NRPEDIDO     = PED.NRPEDIDO)                       
                      AND (P_STTODOPEDIDO  = 'T')                                  
                      AND ((INSTR(P_CDDEPTO, PED.CDDEPTO)>0)OR(P_CDDEPTO IS NULL)) 
                      AND (((P_ORCDE IS NULL)AND(P_ORCATE IS NULL)AND(P_LORC IS NULL)) 
                       OR (INSTR( P_LORC, PED.NRORCAEVENTO)>0)OR (PED.NRORCAEVENTO BETWEEN P_ORCDE AND P_ORCATE)) 
                      AND ((ITEM.IDSITITEMPED = '3') OR (ITEM.IDSITITEMPED = '7'))   
                      AND (ITEM.CDPRODUTO    = P.CDPRODUTO)                    
                      AND (TO_DATE(ITEM.DTENTITPED) BETWEEN  P_DTINI AND P_DTFIN)  
                      AND ((INSTR( P_IDMRPPEDPREV, 'P') > 0)OR (INSTR( P_IDMRPPEDPREV, 'A') > 0) )  
                      AND (NOT EXISTS(SELECT CDFILIAL 
                                        FROM PEDIDOP 
                                       WHERE (CDFILIAL  = ITEM.CDFILIAL) 
                                         AND (NRPEDIDO  = ITEM.NRPEDIDO) 
                                         AND (NRITEMPED = ITEM.NRITEMPED))))LOOP 

         INSERT INTO PEDIDOMRP( CDFILIAL, DTHRPEDIDOMRP, NRPEDIDO, NRITEMPED) 
                VALUES( P_CDFILIAL, P_DTMRP, C_REG.NRPEDIDO, C_REG.NRITEMPED); 

      END LOOP; 
   END IF; 

   IF (INSTR( P_IDMRPPEDPREV, 'S') > 0)THEN 
      FOR C_REG IN (SELECT I.CDFILSOLI, I.CDFILLAN, I.NRSOLICMP, I.CDPRODUTO, I.DTPROGENTR 
                      FROM SOLICITA SO, ITEMSOLI I, PRODUTO P, PRODUTO P1, LISTA L, PARAMPRODMRP PA, 
                           (SELECT CDFILIAL 
                              FROM FILIAL 
                             WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI = 'T'))) F 
                     WHERE (SO.IDBAIXASOL IS NULL) 
                       AND (P_STTSOLICITA IS NULL) 
                       AND (SO.CDFILLANCA = I.CDFILLAN) 
                       AND (SO.CDFILSOLI  = I.CDFILSOLI) 
                       AND (SO.NRSOLICMP  = I.NRSOLICMP) 
                       AND (CDFILIALPED IS NULL) 
                       AND (NRPEDIDO    IS NULL) 
                       AND  I.CDPRODUTO = P1.CDPRODUTO 
                       AND (P.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN ) 
                       AND (P.CDPRODUTO = P1.CDPRODESTO) 
                       AND (IDSOLIAPROV = 'S') 
                       AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                       AND (L.NRLISTA   = P_STLISTASOLI) 
                       AND (I.CDFILLAN||I.CDFILSOLI||I.NRSOLICMP = L.CDLISTA) 
                       AND ( I.CDFILSOLI = F.CDFILIAL) 
                       AND (P_CDFILIAL   = PA.CDFILIAL) 
                       AND (P1.CDPRODESTO  = PA.CDPRODUTO) 
                       AND (INSTR( P_IDMRPPEDPREV, 'S') > 0) 
                       AND ( NOT EXISTS(SELECT NRSOLICMP 
                                          FROM SOLICITAOP 
                                         WHERE CDFILSOLI = I.CDFILSOLI  
                                           AND CDFILLAN  = I.CDFILLAN  
                                           AND NRSOLICMP = I.NRSOLICMP  
                                           AND CDPRODUTO = I.CDPRODUTO  
                                           AND DTPROGENTR = I.DTPROGENTR)) 
                     UNION 
                    SELECT I.CDFILSOLI, I.CDFILLAN, I.NRSOLICMP, I.CDPRODUTO, I.DTPROGENTR 
                      FROM SOLICITA SO, ITEMSOLI I, PRODUTO P, PRODUTO P1, PARAMPRODMRP PA, 
                           (SELECT CDFILIAL 
                              FROM FILIAL 
                             WHERE ((INSTR(P_STLISTAFILI, CDFILIAL)>0)OR (P_STTFILISOLI = 'T'))) F 
                    WHERE (SO.IDBAIXASOL IS NULL) 
                      AND (P_STTSOLICITA = 'T') 
                      AND (SO.CDFILLANCA = I.CDFILLAN) 
                      AND (SO.CDFILSOLI  = I.CDFILSOLI) 
                      AND (SO.NRSOLICMP  = I.NRSOLICMP) 
                      AND (CDFILIALPED IS NULL) 
                      AND (NRPEDIDO    IS NULL) 
                      AND  I.CDPRODUTO = P1.CDPRODUTO 
                      AND (P.CDARVPROD BETWEEN P_CDPRODINI AND P_CDPRODFIN ) 
                      AND (P.CDPRODUTO = P1.CDPRODESTO) 
                      AND (IDSOLIAPROV = 'S') 
                      AND DTPROGENTR BETWEEN P_DTINI AND P_DTFIN 
                      AND (I.CDFILSOLI = F.CDFILIAL) 
                      AND (P_CDFILIAL   = PA.CDFILIAL) 
                      AND (P1.CDPRODESTO  = PA.CDPRODUTO) 
                      AND (INSTR( P_IDMRPPEDPREV, 'S') > 0) 
                      AND (NOT EXISTS(SELECT NRSOLICMP 
                                        FROM SOLICITAOP 
                                       WHERE CDFILSOLI = I.CDFILSOLI  
                                         AND CDFILLAN  = I.CDFILLAN  
                                         AND NRSOLICMP = I.NRSOLICMP  
                                         AND CDPRODUTO = I.CDPRODUTO  
                                         AND DTPROGENTR = I.DTPROGENTR)))LOOP 

         INSERT INTO SOLICITAMRP( CDFILSOLI, CDFILLAN, NRSOLICMP, CDPRODUTO, DTPROGENTR, DTHRSOLICITAMRP, CDFILIAL) 
                          VALUES( C_REG.CDFILSOLI, C_REG.CDFILLAN, C_REG.NRSOLICMP, C_REG.CDPRODUTO, C_REG.DTPROGENTR, P_DTMRP, P_CDFILIAL); 

      END LOOP; 
   END IF; 

   FOR C_MATEPRIMA IN(SELECT INS.CDPRODINSUMO, 
                             TO_DATE(PRG.DTCONCPROMRP) AS DTENTPROD, 
                             NVL(PRF.QTESTOSEGU, 0) AS QTESTOQMIN, 
                             SUM(QTPREVI_MATPRIMA(P_CDFILIAL, PRG.CDPRODUTO, INS.CDPROCFABRIC, INS.CDETAPAPROD, INS.CDPRODINSUMO, PRG.QTAFABRICMRP)) AS QTMATEPRIMA 
                        FROM ESTOSEGU PRF, PRODUTO PROD, PROCFABRICA PF, INSUMETAPA INS, 
                             (SELECT CDPRODUTO, DTCONCPROMRP, QTAFABRICMRP 
                                FROM CALEPRODMRP 
                               WHERE (CDFILIAL     = P_CDFILIAL)  
                                 AND (DTPROGPRODCP = P_DTMRP)) PRG 
                       WHERE (PROD.CDPRODUTO   = PRG.CDPRODUTO)     
                         AND (PF.CDFILIAL      = P_CDFILIAL)        
                         AND (PF.CDPRODUTO     = PROD.CDPRODUTO)    
                         AND (PF.IDPROFABPADR  = 'S')               
                         AND (INS.CDFILIAL     = PF.CDFILIAL)       
                         AND (INS.CDPRODUTO    = PF.CDPRODUTO)      
                         AND (INS.CDPROCFABRIC = PF.CDPROCFABRIC)   
                         AND (NVL(INS.IDSEMIACETAP,'N') <> 'S')     
                         AND (PRF.CDFILIAL   (+) = INS.CDFILIAL)      
                         AND (PRF.CDPRODESTO (+) = INS.CDPRODINSUMO) 
                       GROUP BY INS.CDPRODINSUMO, TO_DATE(PRG.DTCONCPROMRP), NVL(PRF.QTESTOSEGU, 0))LOOP 

      SELECT NVL(SUM(QTPROGENTAF - NVL(QTEFETENTRAF,0)),0) AS QTCOMPRAS 
        INTO V_QTCOMPRAS 
        FROM ITEMAUTF 
       WHERE (CDFILDEST = P_CDFILIAL)                    
         AND (CDPRODUTO = C_MATEPRIMA.CDPRODINSUMO)      
         AND ((QTPROGENTAF - NVL(QTEFETENTRAF,0)) > 0); 

      INSERT INTO PREMATPPROGP 
         (CDFILIAL, DTPROGPRODMP, CDPRODPREVMP, DTUTILPROD, QTEMINMATPRI, QTPREVMATPRI, QTCOMPMATPRI) 
      VALUES 
         (P_CDFILIAL, P_DTMRP, C_MATEPRIMA.CDPRODINSUMO, C_MATEPRIMA.DTENTPROD, C_MATEPRIMA.QTESTOQMIN, C_MATEPRIMA.QTMATEPRIMA, V_QTCOMPRAS); 

   END LOOP; 

   IF (P_IDGERSEMIACA = 'S') THEN 
      FOR C_PROD IN(SELECT CDPRODUTO 
                      FROM PROGPRODU 
                     WHERE DTPROGPRODU = P_DTMRP  
                       AND CDFILIAL = P_CDFILIAL)LOOP 

         DELETE FROM CALEPRODMRP 
               WHERE CDFILIAL = P_CDFILIAL            
                 AND DTPROGPRODCP = P_DTMRP           
                 AND CDPRODUTO    = C_PROD.CDPRODUTO  
                 AND NOT EXISTS (SELECT CDPRODUTO 
                                   FROM INSUMETAPA 
                                  WHERE CDFILIAL = P_CDFILIAL            
                                    AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                                    AND IDSEMIACETAP = 'S'); 

         DELETE FROM PROGPRODU 
               WHERE CDFILIAL    = P_CDFILIAL        
                 AND DTPROGPRODU = P_DTMRP           
                 AND CDPRODUTO   = C_PROD.CDPRODUTO  
                 AND NOT EXISTS(SELECT CDPRODUTO 
                                  FROM INSUMETAPA 
                                 WHERE CDFILIAL = P_CDFILIAL            
                                   AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                                   AND IDSEMIACETAP = 'S'); 

         DELETE FROM CALENDEQUIPAPRO 
               WHERE CDFILIAL      = P_CDFILIAL        
                 AND DTPROGUTEQUIP = P_DTMRP           
                 AND CDPRODUTO     = C_PROD.CDPRODUTO  
                 AND NOT EXISTS(SELECT CDPRODUTO 
                                  FROM INSUMETAPA 
                                 WHERE CDFILIAL = P_CDFILIAL            
                                   AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                                   AND IDSEMIACETAP = 'S'); 
      END LOOP; 

   ELSE IF(P_IDGERSEMIACA = 'P')THEN 
      FOR C_PROD IN(SELECT CDPRODUTO 
                      FROM PROGPRODU 
                     WHERE DTPROGPRODU = P_DTMRP  
                       AND CDFILIAL = P_CDFILIAL)LOOP 

         DELETE FROM CALEPRODMRP 
               WHERE CDFILIAL = P_CDFILIAL  
                 AND DTPROGPRODCP = P_DTMRP  
                 AND CDPRODUTO    = C_PROD.CDPRODUTO  
                 AND EXISTS(SELECT CDPRODUTO 
                              FROM INSUMETAPA 
                             WHERE CDFILIAL     = P_CDFILIAL  
                               AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                               AND IDSEMIACETAP = 'S'); 

         DELETE FROM PROGPRODU 
               WHERE CDFILIAL    = P_CDFILIAL  
                 AND DTPROGPRODU = P_DTMRP     
                 AND CDPRODUTO   = C_PROD.CDPRODUTO  
                 AND EXISTS(SELECT CDPRODUTO 
                              FROM INSUMETAPA 
                             WHERE CDFILIAL     = P_CDFILIAL  
                               AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                               AND IDSEMIACETAP = 'S'); 

         DELETE FROM CALENDEQUIPAPRO 
               WHERE CDFILIAL      = P_CDFILIAL        
                 AND DTPROGUTEQUIP = P_DTMRP           
                 AND CDPRODUTO     = C_PROD.CDPRODUTO  
                 AND EXISTS(SELECT CDPRODUTO 
                              FROM INSUMETAPA 
                             WHERE CDFILIAL = P_CDFILIAL            
                               AND CDPRODINSUMO = C_PROD.CDPRODUTO  
                               AND IDSEMIACETAP = 'S'); 
           END LOOP; 
        END IF; 
   END IF; 
   FOR C_PROG IN (SELECT DISTINCT PROGPRODU.CDPRODUTO 
                    FROM PROGPRODU 
                   WHERE CDFILIAL     = P_CDFILIAL 
                     AND DTPROGPRODU  = P_DTMRP 
                     AND QTESTOQUEPCP <= 0 
                     AND QTAFABRICARR > 0)  LOOP 

      UPDATE PROGPRODU 
         SET QTESTOQUEPCP = QTAFABRICARR - QTAFABRICPCP 
       WHERE TRUNC(DTENTPROD) = (SELECT MAX(TRUNC(DTENTPROD)) 
                                   FROM PROGPRODU 
                                  WHERE CDPRODUTO = C_PROG.CDPRODUTO 
                                    AND CDFILIAL = P_CDFILIAL 
                                    AND DTPROGPRODU = P_DTMRP 
                                    AND QTESTOQUEPCP <= 0) 
         AND CDPRODUTO = C_PROG.CDPRODUTO 
         AND CDFILIAL = P_CDFILIAL 
         AND DTPROGPRODU = P_DTMRP; 

  END LOOP; 
END;
/
