create or replace PROCEDURE CALCULA_CUSTO_OP (P_CDFILIAL     IN ORDPRODUCAO.CDFILIAL%TYPE, 
                                              P_NRORDPROD    IN ORDPRODUCAO.NRORDPROD%TYPE, 
                                              P_NRSUBORDPROD IN ORDPRODUCAO.NRSUBORDPROD%TYPE, 
                                              P_CDPRODUTO    IN ORDPRODUCAO.CDPRODUTO%TYPE, 
                                              P_NRLOTEESTQ   IN ORDPRODUCAO.NRLOTEESTQ%TYPE, 
                                              P_NRSUBLOTE    IN ORDPRODUCAO.NRSUBLOTE%TYPE) IS 
 
V_EXISTE           INTEGER;
V_VRFATOCONVES     FLOAT; 
V_QTPERDAOP        FLOAT;
VRCUSTOAMOSTRA     FLOAT;
VRCUSTORECURSO     FLOAT; 
VRTOTALANA         FLOAT; 
V_VRCUSHRHABILOP   FLOAT; 
V_TOTPRODUZIDO     FLOAT; 
V_VRCUSTO          FLOAT; 
V_QTPRODUZIDO      FLOAT; 
V_QTREALINSUMO     FLOAT; 
V_PERCENTUAL       FLOAT;  
V_QTDEINSUMO       FLOAT;
V_QTDE_INSUMO      FLOAT;
V_VRCUSRETLOTE     FLOAT;
V_TIPOCUSTO        PARAMAN.NRTPCUSTOOP%TYPE; 
V_IDCUSTINSPROD    PARAMAN.IDCUSTINSPROD%TYPE;
V_NMTPCUSTO        INSPECAO.NMINSPECAO%TYPE; 
V_CDCUSTOINDI      CUSTOINDI.CDCUSTOINDI%TYPE; 
V_IDTPCALCCUSPROD  PARAMAN.IDTPCALCCUSPROD%TYPE; 
V_IDSITPESAGEM     ORDPRODUCAO.IDSITPESAGEM %TYPE; 
V_CDINSUMONPREV    PRODUTO.CDPRODUTO%TYPE; 
V_IDSITORDPROD     ORDPRODUCAO.IDSITORDPROD%TYPE; 
V_SEQUCUSTO        APRCUSTOP.NRAPRCUSTOP%TYPE; 
V_CDCENTCUST       RETIRADAESTO.CDCENTCUST%TYPE;   
V_IDUTBALCWTFECHOP PARAMAN.IDUTBALCWTFECHOP%TYPE;
V_CDFILIAL         FILIAL.CDFILIAL%TYPE;
V_NRORDPROD        ORDPRODUCAO.NRORDPROD%TYPE;
V_NRSUBORDPROD     ORDPRODUCAO.NRSUBORDPROD%TYPE;
V_CDPRODACABADO    PRODUTO.CDPRODUTO%TYPE;
V_CDPROCFABRIC     PROCFABRICA.CDPROCFABRIC%TYPE;
V_QTAPRODPREOP     ORDPRODUCAO.QTAPRODPREOP%TYPE;
V_IDORDPRODCON     ORDPRODUCAO.IDORDPRODCON%TYPE;
V_CDPRODINSUMO     PRODUTO.CDPRODUTO%TYPE; 
V_CDETAPAPROD      INSUMETAPA.CDETAPAPROD%TYPE; 
V_CDPRODUTO        PRODUTO.CDPRODUTO%TYPE; 
V_NMPRODUTO        PRODUTO.NMPRODUTO%TYPE; 
V_DTLANCRETDEV     LOTITRETIEST.DTLANCRETDEV%TYPE; 
V_NRLOTEESTQ       PRODACABADO.NRLOTEESTQ%TYPE;
V_NRSUBLOTE        PRODACABADO.NRSUBLOTE%TYPE;
V_CDSUBPRODETA     SUBPRETAPAOP.CDSUBPRODETA%TYPE;

CURSOR C_PRODACABADO(C_CDFILIAL IN VARCHAR2, C_NRORDPROD IN VARCHAR2, C_NRSUBORDPROD IN VARCHAR2, C_IDSITPESAGEM IN VARCHAR2) IS
SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, O.CDPRODUTO, O.CDPROCFABRIC, (NVL(SUM(O.QTAPRODPREOP),0)) AS QTAPRODPREOP, MAX(P.NRLOTEESTQ), MAX(P.NRSUBLOTE)
  FROM ORDPRODUCAO O, PRODACABADO P
 WHERE O.CDFILIAL     = C_CDFILIAL
   AND O.NRORDPROD    = C_NRORDPROD
   AND O.NRSUBORDPROD = C_NRSUBORDPROD
   AND O.NRORDPROD    = P.NRORDPROD(+)
   AND O.NRSUBORDPROD = P.NRSUBORDPROD(+)
   AND O.CDFILIAL     = P.CDFILIAL(+)
   AND O.CDPRODUTO    = P.CDPRODUTO(+)
   AND C_IDSITPESAGEM <> 'CONCLUIDA'
 GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, O.CDPRODUTO, O.CDPROCFABRIC
 UNION ALL
SELECT P.CDFILIAL, P.NRORDPROD, P.NRSUBORDPROD, P.CDPRODUTO, A.CDPROCFABRIC, (NVL(SUM(P.QTPRACABADO),0)/COUNT(P.CDPRODUTO)) AS QTAPRODPREOP, MAX(P.NRLOTEESTQ), MAX(P.NRSUBLOTE)
  FROM PRODACABADO P, PROCFABRICA A
 WHERE P.CDFILIAL     = C_CDFILIAL
   AND P.NRORDPROD    = C_NRORDPROD
   AND P.NRSUBORDPROD = C_NRSUBORDPROD
   AND P.IDPRODUSUPL  = 'S'
   AND A.CDFILIAL     = P.CDFILIAL
   AND A.CDPRODUTO    = P.CDPRODUTO
   AND A.IDPROFABPADR = 'S'
   AND C_IDSITPESAGEM <> 'CONCLUIDA'
 GROUP BY P.CDFILIAL, P.NRORDPROD, P.NRSUBORDPROD, P.CDPRODUTO, A.CDPROCFABRIC

 UNION ALL

SELECT O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, O.CDPRODUTO, O.CDPROCFABRIC, (NVL(SUM(P.QTLIQACUM),0)/COUNT(P.CDPRODUTO)) AS QTAPRODPREOP, MAX(P.NRLOTEESTQ), MAX(P.NRSUBLOTE)
  FROM ORDPRODUCAO O, PRODACABADO P
 WHERE O.CDFILIAL      = C_CDFILIAL
   AND O.NRORDPROD     = C_NRORDPROD
   AND O.NRSUBORDPROD  = C_NRSUBORDPROD
   AND O.NRORDPROD     = P.NRORDPROD(+)
   AND O.NRSUBORDPROD  = P.NRSUBORDPROD(+)
   AND O.CDFILIAL      = P.CDFILIAL(+)
   AND O.CDPRODUTO     = P.CDPRODUTO(+)
   AND C_IDSITPESAGEM = 'CONCLUIDA'
   AND NVL(P.QTLIQACUM,0) <> 0
 GROUP BY O.CDFILIAL, O.NRORDPROD, O.NRSUBORDPROD, O.CDPRODUTO, O.CDPROCFABRIC
 UNION ALL
SELECT P.CDFILIAL, P.NRORDPROD, P.NRSUBORDPROD, P.CDPRODUTO, A.CDPROCFABRIC, (NVL(SUM(P.QTLIQACUM),0)/COUNT(P.CDPRODUTO)) AS QTAPRODPREOP, MAX(P.NRLOTEESTQ), MAX(P.NRSUBLOTE)
  FROM PRODACABADO P, PROCFABRICA A
 WHERE P.CDFILIAL      = C_CDFILIAL
   AND P.NRORDPROD     = C_NRORDPROD
   AND P.NRSUBORDPROD  = C_NRSUBORDPROD
   AND P.IDPRODUSUPL   = 'S'
   AND A.CDFILIAL      = P.CDFILIAL
   AND A.CDPRODUTO     = P.CDPRODUTO
   AND A.IDPROFABPADR  = 'S'
   AND C_IDSITPESAGEM = 'CONCLUIDA'
   AND NVL(P.QTLIQACUM,0) <> 0
 GROUP BY P.CDFILIAL, P.NRORDPROD, P.NRSUBORDPROD, P.CDPRODUTO, A.CDPROCFABRIC;

CURSOR C_INSUMOS(C_CDFILIAL IN VARCHAR2, C_CDPRODACABADO IN VARCHAR2, C_CDPROCFABRIC IN VARCHAR2, C_QTAPRODPREOP IN FLOAT) IS
SELECT CDPRODINSUMO,
       CDETAPAPROD,
       SUM(QTPREVI_MATPRIMA(C_CDFILIAL, C_CDPRODACABADO, C_CDPROCFABRIC, CDETAPAPROD, CDPRODINSUMO, C_QTAPRODPREOP))
 FROM INSUMETAPA
WHERE CDFILIAL      = C_CDFILIAL
  AND CDPRODUTO     = C_CDPRODACABADO
  AND CDPROCFABRIC  = C_CDPROCFABRIC
GROUP BY CDPRODINSUMO, CDETAPAPROD
ORDER BY CDPRODINSUMO;

CURSOR C_CUSESTAPA(C_CDFILIAL IN VARCHAR2, C_NRORDPROD IN VARCHAR2, C_NRSUBORDPROD IN VARCHAR2, C_IDSITPESAGEM IN VARCHAR2, C_TIPOCUSTO IN VARCHAR2, C_CDPRODINSUMO IN VARCHAR2, C_QTDEINSUMO IN FLOAT, C_IDTPCALCCUSPROD IN VARCHAR2, C_CDETAPAPROD IN VARCHAR2, C_IDORDPRODCON IN VARCHAR2) IS
SELECT CDPRODUTO, NMPRODUTO, CDCENTCUST, DTLANCRETDEV, VRCUSTO, QTDE_INSUMO
  FROM (SELECT P.CDPRODUTO, P.NMPRODUTO, R.CDCENTCUST, L.DTLANCRETDEV,
               CALCULA_RATEIO_PROPORCIONAL_MP(C_CDFILIAL, C_NRORDPROD, C_NRSUBORDPROD, C_CDPRODINSUMO, C_QTDEINSUMO, C_IDSITPESAGEM, C_IDORDPRODCON) AS QTDE_INSUMO,
               SUM(DECODE( IDTPRETEST, 'R', L.QTRETLIQPROD, (L.QTRETLIQPROD*(-1))) *
               CASE WHEN NVL(IDCUSTINSPROD,'N') = 'N' THEN
                    ROUND(CUSTO_PRODUTO_LCEST(P_CDFILIAL, I.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE), 2)
               ELSE
                    CASE WHEN VERIFICA_SEMIACABADO(R.CDFILIAL, R.NRORDPROD, R.NRSUBORDPROD, I.CDPRODUTO) = 'S' THEN
                       ROUND(CUSTO_SEMIACABADO(R.CDFILIAL,I.CDPRODUTO,V_TIPOCUSTO, SYSDATE, SYSDATE,'PRO',NULL),2)
                    ELSE
                       ROUND(CUSTO_PRODUTO_ALMOX(P_CDFILIAL, I.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, NULL, NULL), 2)
                    END
               END
               ) / SUM(DECODE( IDTPRETEST, 'R', L.QTRETLIQPROD, (L.QTRETLIQPROD*(-1)))) AS VRCUSTO
          FROM RETIRADAESTO R , ITEMRETIEST I, PRODUTO P, PARAMAN PM, LOTITRETIEST L
         WHERE R.CDFILIAL        = C_CDFILIAL
           AND R.NRORDPROD       = C_NRORDPROD
           AND R.NRSUBORDPROD    = C_NRSUBORDPROD
           AND I.CDPRODUTO       = C_CDPRODINSUMO
           AND R.CDFILIAL        = I.CDFILIAL
           AND R.NRRETEST        = I.NRRETEST
           AND I.CDPRODUTO       = P.CDPRODUTO
           AND R.CDETAPAPROD     = C_CDETAPAPROD
           AND R.CDFILIAL        = PM.CDFILIAL
           AND ((I.CDPRODUTO     <> PM.CDPRODAGUA) OR (PM.CDPRODAGUA IS NULL))
           AND I.CDFILIAL        = L.CDFILIAL
           AND I.NRRETEST        = L.NRRETEST
           AND I.NRSEQRETPROD    = L.NRSEQRETPROD
           AND I.CDPRODUTO       = L.CDPRODUTO
           AND NVL(I.CDTIPORETI,'X') NOT IN (SELECT CDTIPORETI FROM TIPORETI WHERE (CDFUNCUSTO = '099'))
           AND C_IDTPCALCCUSPROD = '1'
         GROUP BY P.CDPRODUTO, P.NMPRODUTO, R.CDCENTCUST, L.DTLANCRETDEV

         UNION

        SELECT DISTINCT P.CDPRODUTO, P.NMPRODUTO, R.CDCENTCUST, L.DTLANCRETDEV,
               C_QTDEINSUMO AS QTDE_INSUMO,
               SUM(DECODE( IDTPRETEST, 'R', L.QTRETLIQPROD, (L.QTRETLIQPROD*(-1))) *
               CASE WHEN NVL(IDCUSTINSPROD,'N') = 'N' THEN
                    ROUND(CUSTO_PRODUTO_LCEST(P_CDFILIAL, I.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, L.CDALMOXARIFE, L.CDLOCALESTOQ, L.NRLOTEESTQ, L.NRSUBLOTE), 2)
               ELSE
                    CASE WHEN VERIFICA_SEMIACABADO(R.CDFILIAL, R.NRORDPROD, R.NRSUBORDPROD, I.CDPRODUTO) = 'S' THEN
                       ROUND(CUSTO_SEMIACABADO(R.CDFILIAL,I.CDPRODUTO,V_TIPOCUSTO, SYSDATE, SYSDATE,'PRO',NULL),2)
                    ELSE
                       ROUND(CUSTO_PRODUTO_ALMOX(P_CDFILIAL, I.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, NULL, NULL), 2)
                    END
               END
               ) / SUM(DECODE( IDTPRETEST, 'R', L.QTRETLIQPROD, (L.QTRETLIQPROD*(-1)))) AS VRCUSTO
          FROM RETIRADAESTO R , ITEMRETIEST I, PRODUTO P, PARAMAN PM, LOTITRETIEST L
         WHERE R.CDFILIAL        = C_CDFILIAL
           AND R.NRORDPROD       = C_NRORDPROD
           AND R.NRSUBORDPROD    = C_NRSUBORDPROD
           AND I.CDPRODUTO       = C_CDPRODINSUMO
           AND R.CDFILIAL        = I.CDFILIAL
           AND R.NRRETEST        = I.NRRETEST
           AND I.CDPRODUTO       = P.CDPRODUTO
           AND R.CDETAPAPROD     = C_CDETAPAPROD
           AND R.CDFILIAL        = PM.CDFILIAL
           AND ((I.CDPRODUTO     <> PM.CDPRODAGUA) OR (PM.CDPRODAGUA IS NULL))
           AND I.CDFILIAL        = L.CDFILIAL
           AND I.NRRETEST        = L.NRRETEST
           AND I.NRSEQRETPROD    = L.NRSEQRETPROD
           AND I.CDPRODUTO       = L.CDPRODUTO
           AND NVL(I.CDTIPORETI,'X') NOT IN (SELECT CDTIPORETI FROM TIPORETI WHERE (CDFUNCUSTO = '099'))
           AND C_IDTPCALCCUSPROD = '2'
         GROUP BY P.CDPRODUTO, P.NMPRODUTO, R.CDCENTCUST, L.DTLANCRETDEV);

/*Cursor para inicializacao da OP*/
CURSOR C_SUBPROD_INIC_OP(C_CDFILIAL IN VARCHAR2, C_NRORDPROD IN VARCHAR2, C_NRSUBORDPROD IN VARCHAR2) IS
SELECT NRLOTEESTQ, NRSUBLOTE, CDSUBPRODETA
  FROM SUBPRETAPAOP
 WHERE CDFILIAL = P_CDFILIAL
   AND NRORDPROD = P_NRORDPROD
   AND NRSUBORDPROD = P_NRSUBORDPROD;

/*Cursor para fechamento da OP*/
CURSOR C_SUBPROD_CONC_OP(C_CDFILIAL IN VARCHAR2, C_NRORDPROD IN VARCHAR2, C_NRSUBORDPROD IN VARCHAR2, C_IDUTBALCWTFECHOP IN VARCHAR2) IS
SELECT SUBPRETAPAOP.NRLOTEESTQ, SUBPRETAPAOP.NRSUBLOTE, SUBPRETAPAOP.CDSUBPRODETA
  FROM SUBPRETAPAOP, PRODACABADO
 WHERE SUBPRETAPAOP.CDFILIAL     = C_CDFILIAL
   AND SUBPRETAPAOP.NRORDPROD    = C_NRORDPROD
   AND SUBPRETAPAOP.NRSUBORDPROD = C_NRSUBORDPROD
   AND SUBPRETAPAOP.CDFILIAL     = PRODACABADO.CDFILIAL
   AND SUBPRETAPAOP.NRORDPROD    = PRODACABADO.NRORDPROD
   AND SUBPRETAPAOP.NRSUBORDPROD = PRODACABADO.NRSUBORDPROD
   AND SUBPRETAPAOP.CDSUBPRODETA = PRODACABADO.CDSUBPRODETA
   AND SUBPRETAPAOP.NRSUBPRETAOP = PRODACABADO.NRSUBPRETAOP
   AND ((NVL(PRODACABADO.QTLIQACUM,0) <> 0 AND C_IDUTBALCWTFECHOP = 'S') OR C_IDUTBALCWTFECHOP = 'N');

BEGIN
   SELECT MAX(NRTPCUSTOOP), MAX(IDTPCALCCUSPROD), MAX(IDUTBALCWTFECHOP), NVL(MAX(IDCUSTINSPROD),'S')
     INTO V_TIPOCUSTO, V_IDTPCALCCUSPROD, V_IDUTBALCWTFECHOP, V_IDCUSTINSPROD
     FROM PARAMAN
    WHERE CDFILIAL = P_CDFILIAL;

   SELECT MAX(IDSITORDPROD), NVL(MAX(IDSITPESAGEM),'N'), NVL(MAX(IDORDPRODCON),'N')
     INTO V_IDSITORDPROD, V_IDSITPESAGEM, V_IDORDPRODCON
     FROM ORDPRODUCAO
    WHERE CDFILIAL     = P_CDFILIAL
      AND NRORDPROD    = P_NRORDPROD
      AND NRSUBORDPROD = P_NRSUBORDPROD;

   IF V_IDSITORDPROD <> '3' THEN

      BEGIN
         SELECT COUNT(1)
           INTO V_EXISTE
           FROM APRCUSTOPPREV
          WHERE CDFILIAL     = P_CDFILIAL
            AND NRORDPROD    = P_NRORDPROD
            AND NRSUBORDPROD = P_NRSUBORDPROD;
      EXCEPTION
         WHEN NO_DATA_FOUND THEN
            V_EXISTE := 0;
      END;

      IF ((V_EXISTE = 0) OR (V_EXISTE = '')) THEN
         /*TABELA PARA GUARDAR OS VALORES PREVISTOS DA OP*/
         INSERT INTO APRCUSTOPPREV
         (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO, NRLOTEESTQ, NRSUBLOTE, CDPRODUTO, CDAPRCUSTOP, NMAPRCUSTOP, QTAPRCUSTOP, VRUNICUSTOP, VRAPRCUSTOP, QTHRAPRCUST, CDTIPOPERDA, CDCENTCUST, IDSTATUSCTBOP, CDEMPRCTBOP, CDLOTECTBOP, DTLANCRETDEV, IDSITMATPRIMA)
         SELECT CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO, NRLOTEESTQ, NRSUBLOTE, CDPRODUTO, CDAPRCUSTOP, NMAPRCUSTOP, QTAPRCUSTOP, VRUNICUSTOP, VRAPRCUSTOP, QTHRAPRCUST, CDTIPOPERDA, CDCENTCUST, IDSTATUSCTBOP, CDEMPRCTBOP, CDLOTECTBOP, DTLANCRETDEV, IDSITMATPRIMA
           FROM APRCUSTOP
          WHERE CDFILIAL     = P_CDFILIAL
            AND NRORDPROD    = P_NRORDPROD
            AND NRSUBORDPROD = P_NRSUBORDPROD;
      END IF;

      DELETE FROM APRCUSTOP
       WHERE CDFILIAL     = P_CDFILIAL
         AND NRORDPROD    = P_NRORDPROD
         AND NRSUBORDPROD = P_NRSUBORDPROD;

      DELETE FROM APRCUSOPERA 
       WHERE CDFILIAL     = P_CDFILIAL 
         AND NRORDPROD    = P_NRORDPROD 
         AND NRSUBORDPROD = P_NRSUBORDPROD; 

      V_SEQUCUSTO := 0; 

      SELECT MIN(CDETAPAPROD) INTO V_CDETAPAPROD 
        FROM ETAFABRICOP 
       WHERE CDFILIAL     = P_CDFILIAL 
         AND NRORDPROD    = P_NRORDPROD
         AND NRSUBORDPROD = P_NRSUBORDPROD;

      /*Cursor para inicializacao da OP, isto e, de 1-Pendente para em 2-Andamento*/
      IF V_IDSITORDPROD = '1' THEN
         OPEN C_SUBPROD_INIC_OP(P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD);

      /*Cursor para fechamento da OP, isto e, de 2-Andamento para 3-Concluida*/
      ELSE
         OPEN C_SUBPROD_CONC_OP(P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, V_IDUTBALCWTFECHOP);
      END IF;

      LOOP

         /*LOOP-FETCH para inicializacao da OP, isto e, de 1-Pendente para em 2-Andamento*/
         IF V_IDSITORDPROD = '1' THEN

            FETCH C_SUBPROD_INIC_OP INTO V_NRLOTEESTQ, V_NRSUBLOTE, V_CDSUBPRODETA;
            EXIT WHEN C_SUBPROD_INIC_OP%NOTFOUND;

         /*LOOP-FETCH para fechamento da OP, isto e, de 2-Andamento para 3-Concluida*/
         ELSE

            FETCH C_SUBPROD_CONC_OP INTO V_NRLOTEESTQ, V_NRSUBLOTE, V_CDSUBPRODETA;
            EXIT WHEN C_SUBPROD_CONC_OP%NOTFOUND;

         END IF;


         IF (V_NRLOTEESTQ = P_NRLOTEESTQ) AND (V_NRSUBLOTE  = P_NRSUBLOTE) THEN

            FOR C_CUSTCALC IN (SELECT AUDITORIA.CDETAPAPROD, AUDITORIA.NRLOTEESTQ, AUDITORIA.NRSUBLOTE, AUDITORIA.IDORIGAUDIT, AUDITORIA.NRAUDITORIA
                                 FROM AUDITORIA
                                WHERE AUDITORIA.CDFILIAL     = P_CDFILIAL
                                  AND AUDITORIA.NRORDPROD    = P_NRORDPROD
                                  AND AUDITORIA.NRSUBORDPROD = P_NRSUBORDPROD) LOOP

               FOR C_INSPECAO IN (SELECT INSPECAO.IDORIGINSPEC,
                                         INSPECAO.CDINSPECAO,
                                         INSPECAO.NMINSPECAO,
                                         ROUND(INSPECAO.VRCUSTOINSP, 5) AS VRCUSTOINSP,
                                         NVL(IDCOMPOECUSTO, 'N') AS IDCOMPOECUSTO,
                                         INSPECAUDIT.NRAUDITORIA,
                                         INSPECAUDIT.NRINSPECAUDI
                                    FROM INSPECAO, INSPECAUDIT
                                   WHERE INSPECAUDIT.CDFILIAL    = P_CDFILIAL
                                     AND INSPECAUDIT.NRAUDITORIA = C_CUSTCALC.NRAUDITORIA
                                     AND INSPECAUDIT.CDINSPECAO  = INSPECAO.CDINSPECAO ) LOOP

                  V_NMTPCUSTO := SUBSTR(C_INSPECAO.NMINSPECAO,1,60);

                  IF  C_INSPECAO.IDORIGINSPEC = 'QUA'  THEN

                     SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI
                       FROM  CUSTOINDI
                      WHERE CDFUNCUSTO = '005';

                     IF NOT V_CDCUSTOINDI IS NULL THEN

                        V_SEQUCUSTO := V_SEQUCUSTO + 1;

                        INSERT INTO APRCUSTOP
                           (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDPRODUTO,
                            NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO,
                            NRLOTEESTQ, NRSUBLOTE, CDAPRCUSTOP, NMAPRCUSTOP,
                            QTAPRCUSTOP, VRAPRCUSTOP, QTHRAPRCUST)
                        VALUES
                           (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD,  C_CUSTCALC.CDETAPAPROD, P_CDPRODUTO,
                            LPAD(V_SEQUCUSTO, 10, '0'), V_CDCUSTOINDI, '005',
                            C_CUSTCALC.NRLOTEESTQ, C_CUSTCALC.NRSUBLOTE, C_INSPECAO.CDINSPECAO,
                            V_NMTPCUSTO, 1 , C_INSPECAO.VRCUSTOINSP, 0);
                     END IF;
                  ELSE
                     IF  C_INSPECAO.IDORIGINSPEC = 'ANA'  THEN

                        VRTOTALANA := 0;
                        SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI
                          FROM  CUSTOINDI
                         WHERE CDFUNCUSTO = '004';

                        IF NOT V_CDCUSTOINDI IS NULL THEN

                           V_SEQUCUSTO := V_SEQUCUSTO + 1;

                           IF C_INSPECAO.IDCOMPOECUSTO = 'S' THEN

                              SELECT SUM(NVL(VRCUSTOAMOSTRA, 0)) AS VRCUSTOAMOSTRA
                                INTO VRCUSTOAMOSTRA
                                FROM FORMULAUDITANA F
                               WHERE F.CDFILIAL    = P_CDFILIAL
                                 AND F.NRAUDITORIA = C_INSPECAO.NRAUDITORIA
                                 AND F.NRLANCTOESTQ IS NOT NULL;

                              SELECT SUM(NVL(VRCUSTORECURSO, 0)) AS VRCUSTORECURSO
                                INTO VRCUSTORECURSO
                                FROM RECURAUDITANA R
                               WHERE R.CDFILIAL    = P_CDFILIAL
                                 AND R.NRAUDITORIA = C_INSPECAO.NRAUDITORIA;

                              VRTOTALANA := ROUND(NVL(VRCUSTOAMOSTRA,0) + NVL(VRCUSTORECURSO,0),5);

                              IF VRTOTALANA <> 0 THEN
                                 INSERT INTO APRCUSTOP
                                    (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDPRODUTO,
                                     NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO,
                                     NRLOTEESTQ, NRSUBLOTE, CDAPRCUSTOP, NMAPRCUSTOP,
                                     QTAPRCUSTOP, VRAPRCUSTOP, QTHRAPRCUST)
                                 VALUES
                                    (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_CUSTCALC.CDETAPAPROD, P_CDPRODUTO,
                                     LPAD(V_SEQUCUSTO, 10, '0'), V_CDCUSTOINDI, '004',
                                     C_CUSTCALC.NRLOTEESTQ, C_CUSTCALC.NRSUBLOTE, C_INSPECAO.CDINSPECAO,
                                     V_NMTPCUSTO, 1 , VRTOTALANA, 0);
                              END IF;
                           END IF;
                           V_SEQUCUSTO := V_SEQUCUSTO + 1;

                           INSERT INTO APRCUSTOP
                              (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDPRODUTO,
                               NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO,
                               NRLOTEESTQ, NRSUBLOTE, CDAPRCUSTOP, NMAPRCUSTOP,
                               QTAPRCUSTOP, VRAPRCUSTOP, QTHRAPRCUST)
                           VALUES
                              (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_CUSTCALC.CDETAPAPROD, P_CDPRODUTO,
                               LPAD(V_SEQUCUSTO, 10, '0'), V_CDCUSTOINDI, '004',
                               C_CUSTCALC.NRLOTEESTQ, C_CUSTCALC.NRSUBLOTE, C_INSPECAO.CDINSPECAO,
                               V_NMTPCUSTO, 1 , C_INSPECAO.VRCUSTOINSP, 0);
                        END IF;
                     ELSE
                        IF C_INSPECAO.IDORIGINSPEC = 'TAR' THEN
                           FOR C_RECURSO IN(SELECT RECURETAPAOP.CDEQUIPPRO AS CDRECURSO,
                                                   EQUIPAPROD.NMEQUIPPRO AS NMTPCUSTO,
                                                   '003' AS CDFUNCUSTO,
                                                   ROUND(RECURETAPAOP.QTHRREARECOP, 5) AS QTHRREARECOP,
                                                   ROUND(VRCUSTOEQUIP, 5) AS VRCUSTO, RECURETAPAOP.QTOPERADORES,
                                                   RECURETAPAOP.CDOPERADOR
                                              FROM RECURETAPAOP, EQUIPAPROD
                                             WHERE RECURETAPAOP.CDFILIAL      = P_CDFILIAL
                                               AND RECURETAPAOP.NRAUDITORIA   = C_INSPECAO.NRAUDITORIA
                                               AND RECURETAPAOP.NRINSPECAUDI  = C_INSPECAO.NRINSPECAUDI
                                               AND RECURETAPAOP.IDRECURETAOP  = 'E'
                                               AND RECURETAPAOP.CDEQUIPPRO    = EQUIPAPROD.CDEQUIPPRO
                                             UNION ALL
                                            SELECT RECURETAPAOP.CDHABILIDADE AS CDRECURSO,
                                                   HABILIDADE.NMHABILIDADE AS NMTPCUSTO,
                                                   '002' AS CDFUNCUSTO,
                                                   ROUND(RECURETAPAOP.QTHRREARECOP, 5) AS QTHRREARECOP,
                                                   ROUND(NVL(VRCUSHRHABILOP,VRCUSHRHABIL), 5) AS VRCUSTO, RECURETAPAOP.QTOPERADORES,
                                                   RECURETAPAOP.CDOPERADOR
                                              FROM RECURETAPAOP, HABILIDADE, HABILOPER
                                             WHERE RECURETAPAOP.CDFILIAL      = P_CDFILIAL
                                               AND RECURETAPAOP.NRAUDITORIA   = C_INSPECAO.NRAUDITORIA
                                               AND RECURETAPAOP.NRINSPECAUDI  = C_INSPECAO.NRINSPECAUDI
                                               AND RECURETAPAOP.IDRECURETAOP  = 'H'
                                               AND RECURETAPAOP.CDHABILIDADE  = HABILIDADE.CDHABILIDADE
                                               AND RECURETAPAOP.CDHABILIDADE  = HABILOPER.CDHABILIDADE(+)
                                               AND RECURETAPAOP.CDOPERADOR    = HABILOPER.CDOPERADOR(+))LOOP

                              SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI
                                FROM  CUSTOINDI
                               WHERE CDFUNCUSTO = C_RECURSO.CDFUNCUSTO;

                              IF NOT V_CDCUSTOINDI IS NULL THEN

                                 V_SEQUCUSTO := V_SEQUCUSTO + 1;

                                 INSERT INTO APRCUSTOP
                                    (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDPRODUTO,
                                     NRAPRCUSTOP, CDCUSTOINDI, CDFUNCUSTO,
                                     NRLOTEESTQ, NRSUBLOTE, CDAPRCUSTOP, NMAPRCUSTOP,
                                     QTAPRCUSTOP, VRAPRCUSTOP, QTHRAPRCUST)
                                 VALUES
                                    (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_CUSTCALC.CDETAPAPROD, P_CDPRODUTO,
                                     LPAD(V_SEQUCUSTO, 10, '0'), V_CDCUSTOINDI, C_RECURSO.CDFUNCUSTO,
                                     C_CUSTCALC.NRLOTEESTQ, C_CUSTCALC.NRSUBLOTE, C_RECURSO.CDRECURSO,
                                     C_RECURSO.NMTPCUSTO, NVL(C_RECURSO.QTOPERADORES,1) , C_RECURSO.VRCUSTO, NVL(C_RECURSO.QTHRREARECOP,0));

                                 IF C_RECURSO.CDFUNCUSTO = '002' THEN
                                    IF (C_RECURSO.CDOPERADOR IS NOT NULL) THEN
                                       IF C_RECURSO.VRCUSTO > 0 THEN
                                          V_EXISTE := 0;
                                          SELECT COUNT(1)
                                            INTO V_EXISTE
                                            FROM APRCUSOPERA
                                           WHERE CDFILIAL      = P_CDFILIAL
                                             AND NRORDPROD     = P_NRORDPROD
                                             AND NRSUBORDPROD  = P_NRSUBORDPROD
                                             AND CDETAPAPROD   = C_CUSTCALC.CDETAPAPROD
                                             AND NRAPRCUSTOP   = C_RECURSO.CDRECURSO
                                             AND CDOPERADOR    = C_RECURSO.CDOPERADOR;

                                          IF V_EXISTE > 0 THEN
                                             UPDATE APRCUSOPERA
                                                SET VRCUSTOOPER = VRCUSTOOPER + C_RECURSO.VRCUSTO,
                                                    QTHROPER    = QTHROPER + NVL(C_RECURSO.QTHRREARECOP,0)
                                              WHERE CDFILIAL      = P_CDFILIAL
                                                AND NRORDPROD     = P_NRORDPROD
                                                AND NRSUBORDPROD  = P_NRSUBORDPROD
                                                AND CDETAPAPROD   = C_CUSTCALC.CDETAPAPROD
                                                AND NRAPRCUSTOP   = C_RECURSO.CDRECURSO
                                                AND CDOPERADOR    = C_RECURSO.CDOPERADOR;
                                          ELSE
                                             INSERT INTO APRCUSOPERA
                                             (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, NRAPRCUSTOP, CDOPERADOR, VRCUSTOOPER, QTHROPER)
                                             VALUES
                                             (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_CUSTCALC.CDETAPAPROD,C_RECURSO.CDRECURSO, C_RECURSO.CDOPERADOR, C_RECURSO.VRCUSTO, NVL(C_RECURSO.QTHRREARECOP,0));
                                          END IF;
                                       END IF;
                                    END IF;

                                    CUSTO_HABILIDADE(P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_RECURSO.CDRECURSO, LPAD(V_SEQUCUSTO, 10, '0'), C_CUSTCALC.CDETAPAPROD);
                                 END IF;

                              END IF;

                           END LOOP;
                        END IF;
                     END IF;
                  END IF;
               END LOOP;
            END LOOP;

         ELSE

            SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI
              FROM  CUSTOINDI
             WHERE CDFUNCUSTO = '099';

            IF (NOT V_CDCUSTOINDI IS NULL) AND (NOT V_CDETAPAPROD IS NULL) THEN

               V_SEQUCUSTO := V_SEQUCUSTO + 1;

               INSERT INTO APRCUSTOP
                  (CDFILIAL, NRORDPROD, NRSUBORDPROD, CDETAPAPROD, CDPRODUTO, NRAPRCUSTOP, NRLOTEESTQ, NRSUBLOTE, CDCUSTOINDI, CDFUNCUSTO)
               VALUES
                  (P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, V_CDETAPAPROD, V_CDSUBPRODETA, LPAD(V_SEQUCUSTO, 10, '0'), V_NRLOTEESTQ, V_NRSUBLOTE, V_CDCUSTOINDI, '099');
            END IF;
         END IF;
      END LOOP;

      /*Close do Cursor para inicializacao da OP, isto e, de 1-Pendente para em 2-Andamento*/
      IF V_IDSITORDPROD = '1' THEN

         CLOSE C_SUBPROD_INIC_OP;

      /*Close do Cursor para fechamento da OP, isto e, de 2-Andamento para 3-Concluida*/
      ELSE

         CLOSE C_SUBPROD_CONC_OP;

      END IF;

      SELECT MAX(CDCUSTOINDI)
        INTO V_CDCUSTOINDI
        FROM CUSTOINDI
       WHERE CDFUNCUSTO = '001';

      IF NOT V_CDCUSTOINDI IS NULL THEN

         --CALCULO DO RATEIO DOS INSUMOS PREVISTOS
         --SE O CLIENTE NAO UTILIZAR BALANCA NO FECHAMENTO DA OP
         IF NVL(V_IDUTBALCWTFECHOP,'N') = 'N' THEN
            FOR C_RETIRADA IN
                  (SELECT CDCENTCUST, DTLANCRETDEV, CDPRODUTO, NMPRODUTO, CDETAPAPROD, QTRETI, IDTPRETEST, VRCUSTPROD,CDALMOXARIFE,CDLOCALESTOQ
                  FROM (SELECT CDCENTCUST, DTLANCRETDEV, CDPRODUTO, NMPRODUTO, CDETAPAPROD, SUM(QTRETI) AS QTRETI, IDTPRETEST, VRCUSTPROD, CDALMOXARIFE, CDLOCALESTOQ
                          FROM(
                        SELECT RETIRADAESTO.CDCENTCUST, LOTITRETIEST.DTLANCRETDEV,
                               LOTITRETIEST.CDPRODUTO, PRODUTO.NMPRODUTO, RETIRADAESTO.CDETAPAPROD,
                               DECODE( NVL(V_IDTPCALCCUSPROD, '1'), '1', ROUND(LOTITRETIEST.QTRETLIQPROD, 5), ROUND(ITEMRETIEST.QTPRERETPROD, 5)) AS QTRETI,
                               LOTITRETIEST.IDTPRETEST,LOTITRETIEST.CDALMOXARIFE, LOTITRETIEST.CDLOCALESTOQ, IDCUSTINSPROD,
                               CASE WHEN NVL(IDCUSTINSPROD,'N') = 'N' THEN
                                    ROUND(CUSTO_PRODUTO_LCEST(P_CDFILIAL, ITEMRETIEST.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, LOTITRETIEST.CDALMOXARIFE, LOTITRETIEST.CDLOCALESTOQ, LOTITRETIEST.NRLOTEESTQ, LOTITRETIEST.NRSUBLOTE), 2)
                               ELSE
                                    CASE WHEN VERIFICA_SEMIACABADO(RETIRADAESTO.CDFILIAL, RETIRADAESTO.NRORDPROD, RETIRADAESTO.NRSUBORDPROD, ITEMRETIEST.CDPRODUTO) = 'S' THEN
                                       ROUND(CUSTO_SEMIACABADO(RETIRADAESTO.CDFILIAL,ITEMRETIEST.CDPRODUTO,V_TIPOCUSTO, SYSDATE, SYSDATE,'PRO',NULL),2)
                                    ELSE
                                       ROUND(CUSTO_PRODUTO_ALMOX(P_CDFILIAL, ITEMRETIEST.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, NULL, NULL), 2)
                                    END
                               END AS VRCUSTPROD


                          FROM PRODUTO, RETIRADAESTO, ITEMRETIEST, LOTITRETIEST, PARAMAN
                         WHERE
                            RETIRADAESTO.CDFILIAL      = P_CDFILIAL                AND
                            RETIRADAESTO.NRORDPROD     = P_NRORDPROD               AND
                            RETIRADAESTO.NRSUBORDPROD  = P_NRSUBORDPROD            AND
                            RETIRADAESTO.CDFILIAL      = ITEMRETIEST.CDFILIAL      AND
                            RETIRADAESTO.NRRETEST      = ITEMRETIEST.NRRETEST      AND
                            ITEMRETIEST.CDFILIAL       = LOTITRETIEST.CDFILIAL     AND
                            ITEMRETIEST.NRRETEST       = LOTITRETIEST.NRRETEST     AND
                            ITEMRETIEST.NRSEQRETPROD   = LOTITRETIEST.NRSEQRETPROD AND
                            ITEMRETIEST.CDPRODUTO      = LOTITRETIEST.CDPRODUTO    AND
                            RETIRADAESTO.CDFILIAL      = PARAMAN.CDFILIAL          AND
                            ITEMRETIEST.CDPRODUTO NOT IN (SELECT I.CDPRODUTO
                                                            FROM ITEMPEDTERC I, ORDPRODUCAO O
                                                            WHERE O.CDFILIAL     = P_CDFILIAL
                                                              AND O.NRORDPROD    = P_NRORDPROD
                                                              AND O.NRSUBORDPROD = P_NRSUBORDPROD
                                                              AND I.CDFILIAL     = O.CDFILIAL
                                                              AND I.NRPEDIDO     = O.NRPEDIDO) AND
                            (((ITEMRETIEST.CDPRODUTO <> PARAMAN.CDPRODAGUA)        OR
                              (PARAMAN.CDPRODAGUA IS NULL))                        AND
                               ITEMRETIEST.CDPRODUTO NOT IN (SELECT CDPRODUTO
                                                               FROM MULTPRODUTOS
                                                              WHERE CDFILIAL = P_CDFILIAL)) AND 
                            ITEMRETIEST.CDPRODUTO      = PRODUTO.CDPRODUTO         AND
                            ITEMRETIEST.CDTIPORETI     NOT IN (SELECT CDTIPORETI
                                                                FROM TIPORETI
                                                               WHERE (CDFUNCUSTO = '099'))
                        ) GROUP BY CDCENTCUST, DTLANCRETDEV, CDPRODUTO, NMPRODUTO, CDETAPAPROD, IDTPRETEST, VRCUSTPROD, CDALMOXARIFE, CDLOCALESTOQ 
                        UNION

                        SELECT RETIRADAESTO.CDCENTCUST, ITEMRETIEST.DTRETPROD,
                               ITEMRETIEST.CDPRODUTO, PRODUTO.NMPRODUTO, RETIRADAESTO.CDETAPAPROD,
                               ROUND(ITEMRETIEST.QTPRERETPROD, 5) AS QTRETI,
                               'R' AS IDTPRETEST,(((ROUND(ITEMRETIEST.QTPRERETPROD, 5) / 1000) * PM.VRPRODAGUA) / ITEMRETIEST.QTPRERETPROD) AS VRCUSTOPROD,
                               '' CDALMOXARIFE,'' CDLOCALESTOQ
                          FROM PRODUTO, RETIRADAESTO, ITEMRETIEST, PARAMAN PM
                         WHERE RETIRADAESTO.CDFILIAL      = P_CDFILIAL
                           AND RETIRADAESTO.NRORDPROD     = P_NRORDPROD
                           AND RETIRADAESTO.NRSUBORDPROD  = P_NRSUBORDPROD
                           AND RETIRADAESTO.CDFILIAL      = ITEMRETIEST.CDFILIAL
                           AND RETIRADAESTO.NRRETEST      = ITEMRETIEST.NRRETEST
                           AND ITEMRETIEST.CDPRODUTO      = PRODUTO.CDPRODUTO
                           AND RETIRADAESTO.CDFILIAL      = PM.CDFILIAL
                           AND ITEMRETIEST.CDPRODUTO      = PM.CDPRODAGUA
                           AND PM.IDPRODUTOUNICO          = 'S'
                           AND ITEMRETIEST.CDTIPORETI     NOT IN (SELECT CDTIPORETI
                                                                    FROM TIPORETI
                                                                   WHERE (CDFUNCUSTO = '099')
                                                                  )

                        UNION

                        SELECT RETIRADAESTO.CDCENTCUST, ITEMRETIEST.DTRETPROD,
                               ITEMRETIEST.CDPRODUTO, PRODUTO.NMPRODUTO, RETIRADAESTO.CDETAPAPROD,
                               ROUND(ITEMRETIEST.QTPRERETPROD, 5) AS QTRETI,
                               'R' AS IDTPRETEST,(((ROUND(ITEMRETIEST.QTPRERETPROD, 5) / 1000) * MP1.VRPRODAGUA) / ITEMRETIEST.QTPRERETPROD) AS VRCUSTOPROD,
                               '' CDALMOXARIFE, '' CDLOCALESTOQ
                          FROM PRODUTO, RETIRADAESTO, ITEMRETIEST, PARAMAN PM, MULTPRODUTOS MP1
                         WHERE RETIRADAESTO.CDFILIAL      = P_CDFILIAL
                           AND RETIRADAESTO.NRORDPROD     = P_NRORDPROD
                           AND RETIRADAESTO.NRSUBORDPROD  = P_NRSUBORDPROD
                           AND RETIRADAESTO.CDFILIAL      = ITEMRETIEST.CDFILIAL
                           AND RETIRADAESTO.NRRETEST      = ITEMRETIEST.NRRETEST
                           AND ITEMRETIEST.CDPRODUTO      = PRODUTO.CDPRODUTO
                           AND RETIRADAESTO.CDFILIAL      = PM.CDFILIAL
                           AND ITEMRETIEST.CDPRODUTO      IN (SELECT CDPRODUTO
                                                                FROM MULTPRODUTOS MP2
                                                               WHERE CDFILIAL = P_CDFILIAL
                                                                 AND MP2.CDPRODUTO = MP1.CDPRODUTO
                                                                 AND MP2.CDFILIAL = MP1.CDFILIAL)
                           AND PM.IDMULTPRODUTOS          = 'S'
                           AND ITEMRETIEST.CDFILIAL       = MP1.CDFILIAL
                           AND ITEMRETIEST.CDTIPORETI     NOT IN (SELECT CDTIPORETI
                                                                    FROM TIPORETI
                                                                   WHERE (CDFUNCUSTO = '099')
                                                                  )

                        ))LOOP

               V_SEQUCUSTO := V_SEQUCUSTO + 1; 

               IF C_RETIRADA.IDTPRETEST = 'D' THEN 
                  C_RETIRADA.QTRETI := C_RETIRADA.QTRETI * -1; 
               END IF;
               
               INSERT INTO APRCUSTOP 
                  (CDFILIAL, 
                   NRORDPROD, 
                   NRSUBORDPROD, 
                   CDETAPAPROD, 
                   CDPRODUTO, 
                   NRAPRCUSTOP, 
                   CDCUSTOINDI, 
                   CDFUNCUSTO, 
                   NRLOTEESTQ, 
                   NRSUBLOTE, 
                   CDAPRCUSTOP, 
                   NMAPRCUSTOP, 
                   QTAPRCUSTOP, 
                   VRAPRCUSTOP, 
                   CDCENTCUST, 
                   DTLANCRETDEV,
                   IDSITMATPRIMA)
               VALUES 
                  (P_CDFILIAL, 
                   P_NRORDPROD, 
                   P_NRSUBORDPROD, 
                   C_RETIRADA.CDETAPAPROD, 
                   P_CDPRODUTO,   
                   LPAD(V_SEQUCUSTO, 10, '0'), 
                   V_CDCUSTOINDI, 
                   '001', 
                   P_NRLOTEESTQ, 
                   P_NRSUBLOTE, 
                   C_RETIRADA.CDPRODUTO,  
                   C_RETIRADA.NMPRODUTO, 
                   C_RETIRADA.QTRETI, 
                   C_RETIRADA.VRCUSTPROD, 
                   C_RETIRADA.CDCENTCUST, 
                   C_RETIRADA.DTLANCRETDEV,
                   'PREVISTA');

            END LOOP; 
         ELSE
            OPEN C_PRODACABADO(P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, V_IDSITPESAGEM);
            LOOP
                FETCH C_PRODACABADO INTO V_CDFILIAL, V_NRORDPROD, V_NRSUBORDPROD, V_CDPRODACABADO, V_CDPROCFABRIC, V_QTAPRODPREOP, V_NRLOTEESTQ, V_NRSUBLOTE;
                EXIT WHEN C_PRODACABADO%NOTFOUND;

                OPEN C_INSUMOS(V_CDFILIAL, V_CDPRODACABADO, V_CDPROCFABRIC, V_QTAPRODPREOP);
                LOOP
                   FETCH C_INSUMOS INTO V_CDPRODINSUMO, V_CDETAPAPROD, V_QTDEINSUMO;
                   EXIT WHEN C_INSUMOS%NOTFOUND;

                   OPEN C_CUSESTAPA(V_CDFILIAL, V_NRORDPROD, V_NRSUBORDPROD, V_IDSITPESAGEM, V_TIPOCUSTO, V_CDPRODINSUMO, V_QTDEINSUMO, 
                                    V_IDTPCALCCUSPROD, V_CDETAPAPROD, V_IDORDPRODCON);
                   LOOP
                      FETCH C_CUSESTAPA INTO V_CDPRODUTO, V_NMPRODUTO, V_CDCENTCUST, V_DTLANCRETDEV, V_VRCUSTO, V_QTDE_INSUMO;
                      EXIT WHEN C_CUSESTAPA%NOTFOUND;

                         V_SEQUCUSTO := V_SEQUCUSTO + 1;

                         INSERT INTO APRCUSTOP 
                            (CDFILIAL, 
                             NRORDPROD, 
                             NRSUBORDPROD, 
                             CDETAPAPROD, 
                             CDPRODUTO, 
                             NRAPRCUSTOP, 
                             CDCUSTOINDI, 
                             CDFUNCUSTO, 
                             NRLOTEESTQ, 
                             NRSUBLOTE, 
                             CDAPRCUSTOP, 
                             NMAPRCUSTOP, 
                             QTAPRCUSTOP, 
                             VRAPRCUSTOP, 
                             CDCENTCUST, 
                             DTLANCRETDEV,
                             IDSITMATPRIMA) 
                          VALUES 
                             (V_CDFILIAL, 
                              V_NRORDPROD, 
                              V_NRSUBORDPROD, 
                              V_CDETAPAPROD, 
                              V_CDPRODACABADO,   
                              LPAD(V_SEQUCUSTO, 10, '0'), 
                              V_CDCUSTOINDI, 
                              '001', 
                              V_NRLOTEESTQ, 
                              V_NRSUBLOTE, 
                              V_CDPRODINSUMO,  
                              V_NMPRODUTO, 
                              V_QTDE_INSUMO, 
                              V_VRCUSTO, 
                              V_CDCENTCUST, 
                              V_DTLANCRETDEV,
                              'PREVISTA');

                   END LOOP;
                   CLOSE C_CUSESTAPA;                

                END LOOP;
                CLOSE C_INSUMOS;

            END LOOP;
            CLOSE C_PRODACABADO;
         END IF;
      END IF; 

      SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI 
        FROM CUSTOINDI 
       WHERE CDFUNCUSTO = '099'; 

      IF NOT V_CDCUSTOINDI IS NULL THEN 

         FOR C_PERDAS IN (SELECT P.CDPRODPERDA, 
                                 PROD.NMPRODUTO, 
                                 PROD.SGUNIDADE, 
                                 P.CDETAPAPROD, 
                                 ROUND(P.QTPERDAOP, 5) AS QTPERDAOP, 
                                 P.CDTIPOPERDA, 
                                 P.SGUNIDADE AS SGUNIDADIC, 
                                 ROUND(CUSTO_PRODUTO(P_CDFILIAL, P.CDPRODPERDA, V_TIPOCUSTO, SYSDATE, SYSDATE), 5) AS VRCUSTPROD 
                            FROM PRODUTO PROD, PERDAOP P 
                           WHERE P.CDFILIAL     = P_CDFILIAL     
                             AND P.NRORDPROD    = P_NRORDPROD    
                             AND P.NRSUBORDPROD = P_NRSUBORDPROD 
                             AND P.CDPRODPERDA  = PROD.CDPRODUTO ) LOOP 

            IF NOT C_PERDAS.SGUNIDADIC IS NULL THEN 
               IF (C_PERDAS.SGUNIDADIC <> C_PERDAS.SGUNIDADE) THEN 

                  SELECT MIN(VRFATOCONVES) 
                    INTO V_VRFATOCONVES 
                    FROM (SELECT VRFATOCONVES 
                           FROM CONVPRODUTO 
                          WHERE (CDPRODUTO = C_PERDAS.CDPRODPERDA) 
                            AND (SGUNIDADE = C_PERDAS.SGUNIDADIC) 
                          UNION ALL 
                         SELECT VRFTCONVER VRFATOCONVES 
                           FROM CONVUNID
                          WHERE (SGUNIDPARA = C_PERDAS.SGUNIDADE)  
                            AND (SGUNIDDE   = C_PERDAS.SGUNIDADIC) 
                            AND (NOT EXISTS(SELECT SGUNIDADE 
                                              FROM CONVPRODUTO 
                                             WHERE (CDPRODUTO = C_PERDAS.CDPRODPERDA) 
                                               AND (SGUNIDADE = SGUNIDDE)))); 

                  V_QTPERDAOP := C_PERDAS.QTPERDAOP * V_VRFATOCONVES; 
               END IF; 
            ELSE 
               V_QTPERDAOP := C_PERDAS.QTPERDAOP; 
            END IF; 

            V_SEQUCUSTO := V_SEQUCUSTO + 1; 

            INSERT INTO APRCUSTOP 
               (CDFILIAL    , 
                NRORDPROD   , 
                NRSUBORDPROD, 
                CDETAPAPROD , 
                CDPRODUTO   , 
                NRAPRCUSTOP , 
                CDCUSTOINDI , 
                CDFUNCUSTO  , 
                NRLOTEESTQ  , 
                NRSUBLOTE   , 
                CDAPRCUSTOP , 
                NMAPRCUSTOP , 
                QTAPRCUSTOP , 
                VRAPRCUSTOP , 
                CDTIPOPERDA) 
            VALUES 
               (P_CDFILIAL           , 
                P_NRORDPROD          , 
                P_NRSUBORDPROD       , 
                C_PERDAS.CDETAPAPROD , 
                P_CDPRODUTO          , 
                LPAD(V_SEQUCUSTO, 10, '0'), 
                V_CDCUSTOINDI        , 
                '099'                , 
                P_NRLOTEESTQ         , 
                P_NRSUBLOTE          , 
                C_PERDAS.CDPRODPERDA , 
                C_PERDAS.NMPRODUTO   , 
                V_QTPERDAOP          , 
                C_PERDAS.VRCUSTPROD  , 
                C_PERDAS.CDTIPOPERDA); 
         END LOOP;  
      END IF; 
      IF V_IDTPCALCCUSPROD = '1' THEN 

      SELECT MAX(CDCUSTOINDI) INTO V_CDCUSTOINDI 
        FROM CUSTOINDI 
       WHERE CDFUNCUSTO = '001'; 

      FOR C_INSUMONPREV IN ( (SELECT DISTINCT PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO 
                                  FROM RETIRADAESTO RT, PRODUTO PR, ITEMRETIEST IT, LOTITRETIEST LT 
                                 WHERE RT.NRRETEST  = IT.NRRETEST 
                                   AND RT.CDFILIAL  = IT.CDFILIAL 
                                   AND PR.CDPRODUTO = IT.CDPRODUTO 
                                   AND LT.CDFILIAL  = IT.CDFILIAL 
                                   AND LT.CDPRODUTO = IT.CDPRODUTO 
                                   AND LT.NRRETEST  = RT.NRRETEST 
                                   AND RT.NRORDPROD = P_NRORDPROD 
                                   AND RT.CDFILIAL = P_CDFILIAL 
                                   AND RT.NRSUBORDPROD = P_NRSUBORDPROD 
                                 MINUS 
                                SELECT PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO 
                                  FROM PRODUTO PR, INSUMETAPA IP, ORDPRODUCAO OP, PROCFABRICA PF, PRODACABADO PA 
                                 WHERE PR.CDPRODUTO = IP.CDPRODINSUMO 
                                   AND PA.CDPRODUTO = IP.CDPRODUTO 
                                   AND OP.CDFILIAL = IP.CDFILIAL 
                                   AND OP.CDFILIAL = PF.CDFILIAL 
                                   AND OP.CDPROCFABRIC = PF.CDPROCFABRIC 
                                   AND IP.CDPROCFABRIC = PF.CDPROCFABRIC 
                                   AND PA.CDPRODUTO = PF.CDPRODUTO 
                                   AND OP.NRORDPROD = PA.NRORDPROD 
                                   AND OP.CDFILIAL = PA.CDFILIAL 
                                   AND OP.NRSUBORDPROD = PA.NRSUBORDPROD 
                                   AND OP.NRORDPROD = P_NRORDPROD 
                                   AND OP.CDFILIAL = P_CDFILIAL 
                                   AND OP.NRSUBORDPROD = P_NRSUBORDPROD) 
                                 UNION 
                                SELECT CDPRODUTO, CDARVPROD, NMPRODUTO  
                                  FROM (SELECT DISTINCT PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO  
                                          FROM RETIRADAESTO RT, PRODUTO PR, ITEMRETIEST IT, LOTITRETIEST LT  
                                         WHERE RT.NRRETEST  = IT.NRRETEST  
                                           AND RT.CDFILIAL  = IT.CDFILIAL  
                                           AND PR.CDPRODUTO = IT.CDPRODUTO  
                                           AND LT.CDFILIAL  = IT.CDFILIAL  
                                           AND LT.CDPRODUTO = IT.CDPRODUTO  
                                           AND LT.NRRETEST  = RT.NRRETEST  
                                           AND RT.NRORDPROD = P_NRORDPROD  
                                           AND RT.CDFILIAL = P_CDFILIAL  
                                           AND RT.NRSUBORDPROD = P_NRSUBORDPROD 
                                     INTERSECT 
                                        SELECT PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO  
                                          FROM PRODUTO PR, INSUMETAPA IP, ORDPRODUCAO OP, PROCFABRICA PF, PRODACABADO PA 
                                         WHERE PR.CDPRODUTO = IP.CDPRODINSUMO  
                                           AND OP.CDPRODUTO = IP.CDPRODUTO  
                                           AND OP.CDFILIAL = IP.CDFILIAL  
                                           AND OP.CDFILIAL = PF.CDFILIAL  
                                           AND OP.CDPROCFABRIC = PF.CDPROCFABRIC  
                                           AND IP.CDPROCFABRIC = PF.CDPROCFABRIC  
                                           AND OP.CDPRODUTO = PF.CDPRODUTO 
                                           AND OP.NRORDPROD = PA.NRORDPROD 
                                           AND OP.CDFILIAL = PA.CDFILIAL 
                                           AND OP.NRSUBORDPROD = PA.NRSUBORDPROD 
                                           AND NVL(PA.QTLIQACUM,0) = 0 
                                           AND V_IDSITPESAGEM = 'CONCLUIDA' 
                                           AND PA.NRORDPROD = P_NRORDPROD  
                                           AND PA.CDFILIAL = P_CDFILIAL  
                                           AND PA.NRSUBORDPROD = P_NRSUBORDPROD) A 
                                 WHERE NOT EXISTS (SELECT DISTINCT PR.CDPRODUTO, PR.CDARVPROD, PR.NMPRODUTO  
                                                     FROM PRODUTO PR, INSUMETAPA IP, ORDPRODUCAO OP, PROCFABRICA PF, PRODACABADO PA 
                                                    WHERE PR.CDPRODUTO = IP.CDPRODINSUMO  
                                                      AND PA.CDPRODUTO = IP.CDPRODUTO  
                                                      AND OP.CDFILIAL = IP.CDFILIAL  
                                                      AND OP.CDFILIAL = PF.CDFILIAL  
                                                      AND OP.CDPROCFABRIC = PF.CDPROCFABRIC  
                                                      AND IP.CDPROCFABRIC = PF.CDPROCFABRIC  
                                                      AND PA.CDPRODUTO = PF.CDPRODUTO 
                                                      AND OP.NRORDPROD = PA.NRORDPROD 
                                                      AND OP.CDFILIAL = PA.CDFILIAL 
                                                      AND OP.NRSUBORDPROD = PA.NRSUBORDPROD 
                                                      AND NVL(PA.QTLIQACUM,0) > 0 
                                                      AND V_IDSITPESAGEM = 'CONCLUIDA' 
                                                      and IP.CDPRODINSUMO  = A.CDPRODUTO 
                                                      AND OP.NRORDPROD = P_NRORDPROD  
                                                      AND op.CDFILIAL = P_CDFILIAL  
                                                      AND OP.NRSUBORDPROD = P_NRSUBORDPROD) 
                               ) 
         LOOP 
            BEGIN 
               SELECT I.CDPRODUTO, MAX(RT.CDETAPAPROD), MAX(RT.CDCENTCUST) 
                 INTO V_CDINSUMONPREV, V_CDETAPAPROD, V_CDCENTCUST 
                 FROM RETIRADAESTO RT, ITEMRETIEST I, LOTITRETIEST L 
                WHERE RT.CDFILIAL     = P_CDFILIAL 
                  AND RT.NRORDPROD    = P_NRORDPROD 
                  AND RT.NRSUBORDPROD = P_NRSUBORDPROD 
                  AND I.CDPRODUTO     = C_INSUMONPREV.CDPRODUTO 
                  AND RT.CDFILIAL     = I.CDFILIAL 
                  AND RT.NRRETEST     = I.NRRETEST 
                  AND I.CDFILIAL      = L.CDFILIAL 
                  AND I.NRRETEST      = L.NRRETEST 
                  AND I.NRSEQRETPROD  = L.NRSEQRETPROD 
                  AND I.CDPRODUTO     = L.CDPRODUTO 
                  AND L.IDTPRETEST = 'R' 
                  GROUP BY I.CDPRODUTO; 
            EXCEPTION
               WHEN NO_DATA_FOUND THEN
                  V_CDETAPAPROD := '';
                  V_VRCUSTO := 0;
                  V_CDCENTCUST := '';
            END;

            FOR C_TOTRETLOTE IN ( SELECT LT.CDALMOXARIFE, LT.CDLOCALESTOQ, LT.NRLOTEESTQ, LT.NRSUBLOTE, 
                                         SUM(DECODE(LT.IDTPRETEST, 'R', QTRETLIQPROD, 'D', ((-1)*QTRETLIQPROD))) AS SUMQTREALINSUMO
                                    FROM LOTITRETIEST LT, RETIRADAESTO RE 
                                   WHERE LT.NRRETEST     = RE.NRRETEST 
                                     AND LT.CDFILIAL     = RE.CDFILIAL 
                                     AND RE.NRORDPROD    = P_NRORDPROD 
                                     AND RE.NRSUBORDPROD = P_NRSUBORDPROD 
                                     AND LT.CDPRODUTO    = C_INSUMONPREV.CDPRODUTO
                                     AND LT.CDFILIAL     = P_CDFILIAL 
                                  GROUP BY LT.CDALMOXARIFE, LT.CDLOCALESTOQ, LT.NRLOTEESTQ, LT.NRSUBLOTE 
                                           
                                 ) 
            LOOP     

               SELECT SUM(QTPRODUZIDO)
                 INTO V_TOTPRODUZIDO 
                 FROM (SELECT NVL(SUM(P.QTPRACABADO), 0) AS QTPRODUZIDO 
                         FROM PRODACABADO P 
                        WHERE P.NRORDPROD    = P_NRORDPROD 
                          AND P.NRSUBORDPROD = P_NRSUBORDPROD 
                          AND P.CDFILIAL     = P_CDFILIAL 
                          AND V_IDSITPESAGEM <> 'CONCLUIDA' 
                        UNION ALL 
                       SELECT NVL(SUM(P.QTLIQACUM), 0) AS QTPRODUZIDO 
                         FROM PRODACABADO P 
                        WHERE P.NRORDPROD    = P_NRORDPROD 
                          AND P.NRSUBORDPROD = P_NRSUBORDPROD 
                          AND P.CDFILIAL     = P_CDFILIAL 
                          AND V_IDSITPESAGEM = 'CONCLUIDA'); 

               IF (V_TOTPRODUZIDO IS NULL) OR (V_TOTPRODUZIDO = 0) THEN 
                  SELECT SUM(O.QTAPRODPREOP) 
                    INTO V_TOTPRODUZIDO 
                    FROM ORDPRODUCAO O 
                   WHERE O.NRORDPRODCON = P_NRORDPROD 
                     AND O.NRSUBOPCON   = P_NRSUBORDPROD 
                     AND O.CDFILIAL     = P_CDFILIAL; 
               END IF; 

               FOR C_PRODACABADO IN ( SELECT O.CDFILIAL, O.CDPRODUTO, O.CDPROCFABRIC , 
                                             NVL(SUM(O.QTAPRODPREOP),0) AS QTPRODUZIDO, COUNT(O.CDPRODUTO) QTOP,
                                             MAX(O.NRLOTEESTQ) AS NRLOTEESTQ, MAX(O.NRSUBLOTE) AS NRSUBLOTE 
                                        FROM ORDPRODUCAO O, PRODACABADO P 
                                       WHERE O.NRORDPROD = P_NRORDPROD 
                                         AND O.NRSUBORDPROD   = P_NRSUBORDPROD 
                                         AND O.CDFILIAL     = P_CDFILIAL 
                                         AND O.NRORDPROD(+) = P.NRORDPROD
                                         AND O.NRSUBORDPROD(+)   = P.NRSUBORDPROD 
                                         AND O.CDFILIAL(+)     = P.CDFILIAL 
                                         AND O.CDPRODUTO(+)    = P.CDPRODUTO 
                                         AND V_IDSITPESAGEM <> 'CONCLUIDA' 
                                       GROUP BY O.CDFILIAL, O.CDPRODUTO, O.CDPROCFABRIC 
                                       UNION ALL 
                                      SELECT P.CDFILIAL, P.CDPRODUTO, A.CDPROCFABRIC , 
                                             NVL(SUM(P.QTPRACABADO),0)/COUNT(P.CDPRODUTO) AS QTPRODUZIDO, COUNT(P.CDPRODUTO) QTOP,
                                             MAX(P.NRLOTEESTQ) AS NRLOTEESTQ, MAX(P.NRSUBLOTE) AS NRSUBLOTE 
                                        FROM PRODACABADO P, PROCFABRICA A 
                                       WHERE P.CDFILIAL     = P_CDFILIAL 
                                         AND P.NRORDPROD    = P_NRORDPROD 
                                         AND P.NRSUBORDPROD = P_NRSUBORDPROD 
                                         AND P.IDPRODUSUPL  = 'S' 
                                         AND A.CDFILIAL     = P.CDFILIAL 
                                         AND A.CDPRODUTO    = P.CDPRODUTO 
                                         AND A.IDPROFABPADR = 'S' 
                                         AND V_IDSITPESAGEM <> 'CONCLUIDA' 
                                    GROUP BY P.CDFILIAL, P.CDPRODUTO, A.CDPROCFABRIC 

                                    UNION ALL 

                                      SELECT O.CDFILIAL, O.CDPRODUTO, O.CDPROCFABRIC , 
                                             NVL(SUM(P.QTLIQACUM),0)/COUNT(O.CDPRODUTO) AS QTPRODUZIDO, COUNT(O.CDPRODUTO) QTOP,
                                             MAX(O.NRLOTEESTQ) AS NRLOTEESTQ, MAX(O.NRSUBLOTE) AS NRSUBLOTE 
                                        FROM ORDPRODUCAO O, PRODACABADO P 
                                       WHERE O.NRORDPROD = P_NRORDPROD 
                                         AND O.NRSUBORDPROD   = P_NRSUBORDPROD 
                                         AND O.CDFILIAL     = P_CDFILIAL 
                                         AND O.NRORDPROD(+) = P.NRORDPROD 
                                         AND O.NRSUBORDPROD(+)   = P.NRSUBORDPROD 
                                         AND O.CDFILIAL(+)     = P.CDFILIAL 
                                         AND O.CDPRODUTO(+)    = P.CDPRODUTO 
                                         AND V_IDSITPESAGEM = 'CONCLUIDA' 
                                         AND NVL(P.QTLIQACUM,0) <> 0 
                                       GROUP BY O.CDFILIAL, O.CDPRODUTO, O.CDPROCFABRIC 
                                       UNION ALL 
                                      SELECT P.CDFILIAL, P.CDPRODUTO, A.CDPROCFABRIC ,
                                             NVL(SUM(P.QTLIQACUM),0)/COUNT(P.CDPRODUTO) AS QTPRODUZIDO, COUNT(P.CDPRODUTO) QTOP,
                                             MAX(P.NRLOTEESTQ) AS NRLOTEESTQ, MAX(P.NRSUBLOTE) AS NRSUBLOTE 
                                        FROM PRODACABADO P, PROCFABRICA A 
                                       WHERE P.CDFILIAL     = P_CDFILIAL 
                                         AND P.NRORDPROD    = P_NRORDPROD 
                                         AND P.NRSUBORDPROD = P_NRSUBORDPROD 
                                         AND P.IDPRODUSUPL  = 'S' 
                                         AND A.CDFILIAL     = P.CDFILIAL 
                                         AND A.CDPRODUTO    = P.CDPRODUTO 
                                         AND A.IDPROFABPADR = 'S' 
                                         AND V_IDSITPESAGEM = 'CONCLUIDA' 
                                         AND NVL(P.QTLIQACUM,0) <> 0 
                                    GROUP BY P.CDFILIAL, P.CDPRODUTO, A.CDPROCFABRIC 
                                    ORDER BY CDPRODUTO 
                                     )
               LOOP

                 V_QTPRODUZIDO := C_PRODACABADO.QTPRODUZIDO;
                 IF (V_QTPRODUZIDO IS NULL) OR (V_QTPRODUZIDO = 0) THEN
                     SELECT SUM(QTPRODUZIDO)
                       INTO V_QTPRODUZIDO
                       FROM (SELECT NVL(SUM(P.QTPRACABADO), 0)   AS QTPRODUZIDO
                               FROM PRODACABADO P
                              WHERE P.NRORDPROD    = P_NRORDPROD
                                AND P.NRSUBORDPROD = P_NRSUBORDPROD
                                AND P.CDFILIAL     = P_CDFILIAL
                                AND P.CDPRODUTO    = C_PRODACABADO.CDPRODUTO
                                AND V_IDSITPESAGEM <> 'CONCLUIDA'
                              UNION ALL
                             SELECT NVL(SUM(P.QTLIQACUM), 0)   AS QTPRODUZIDO
                               FROM PRODACABADO P
                              WHERE P.NRORDPROD    = P_NRORDPROD
                                AND P.NRSUBORDPROD = P_NRSUBORDPROD
                                AND P.CDFILIAL     = P_CDFILIAL
                                AND P.CDPRODUTO    = C_PRODACABADO.CDPRODUTO
                                AND V_IDSITPESAGEM = 'CONCLUIDA');
                  END IF;
                  V_PERCENTUAL := V_QTPRODUZIDO /V_TOTPRODUZIDO;

                  V_QTREALINSUMO := ROUND(V_PERCENTUAL * C_TOTRETLOTE.SUMQTREALINSUMO,5);

                  IF V_IDCUSTINSPROD = 'N' THEN
                    V_VRCUSRETLOTE := ROUND(CUSTO_PRODUTO_LCEST(P_CDFILIAL, C_INSUMONPREV.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, C_TOTRETLOTE.CDALMOXARIFE, C_TOTRETLOTE.CDLOCALESTOQ, C_TOTRETLOTE.NRLOTEESTQ, C_TOTRETLOTE.NRSUBLOTE), 2);
                  ELSE
                    IF VERIFICA_SEMIACABADO(P_CDFILIAL, P_NRORDPROD, P_NRSUBORDPROD, C_INSUMONPREV.CDPRODUTO) = 'S' THEN
                       V_VRCUSRETLOTE := ROUND(CUSTO_SEMIACABADO(P_CDFILIAL,C_INSUMONPREV.CDPRODUTO,V_TIPOCUSTO, SYSDATE, SYSDATE,'PRO',NULL),2);
                    ELSE
                       V_VRCUSRETLOTE := ROUND(CUSTO_PRODUTO_ALMOX(P_CDFILIAL, C_INSUMONPREV.CDPRODUTO, V_TIPOCUSTO, SYSDATE, SYSDATE, NULL, NULL), 2);
                    END IF;
                 END IF;


                  V_SEQUCUSTO := V_SEQUCUSTO + 1;      
                 INSERT INTO APRCUSTOP 
                             (CDFILIAL, 
                              NRORDPROD, 
                              NRSUBORDPROD, 
                              CDETAPAPROD, 
                              CDPRODUTO, 
                              NRAPRCUSTOP, 
                              CDCUSTOINDI, 
                              CDFUNCUSTO, 
                              NRLOTEESTQ, 
                              NRSUBLOTE, 
                              CDAPRCUSTOP, 
                              NMAPRCUSTOP, 
                              QTAPRCUSTOP, 
                              VRAPRCUSTOP, 
                              CDCENTCUST,
                              IDSITMATPRIMA)
                          VALUES 
                             (P_CDFILIAL, 
                              P_NRORDPROD, 
                              P_NRSUBORDPROD, 
                              V_CDETAPAPROD, 
                              C_PRODACABADO.CDPRODUTO, 
                              LPAD(V_SEQUCUSTO, 10, '0'), 
                              V_CDCUSTOINDI, 
                              '001', 
                              C_PRODACABADO.NRLOTEESTQ, 
                              C_PRODACABADO.NRSUBLOTE,
                              C_INSUMONPREV.CDPRODUTO,
                              C_INSUMONPREV.NMPRODUTO, 
                              V_QTREALINSUMO, 
                              ROUND(V_VRCUSRETLOTE,5), 
                              V_CDCENTCUST,
                              'N_PREVISTA'); 

               END LOOP; 
            END LOOP; 
         END LOOP; 
      END IF; 
   END IF; 
END;
/
