CREATE OR REPLACE PROCEDURE ETLRESUFOOD_PROD (P_DTINI IN DATE,
                                              P_DTFINA IN DATE)
IS
   V_COUNTER       NUMBER       NOT NULL := 0;
   V_DTFIM         DATE;
   V_DTINI         DATE;
   V_CDSEQUENCIAL VARCHAR2(20);
   V_DATAFINAL     DATE;
   V_NRTIPOCUSTO1  NUMBER;
   V_NRTIPOCUSTO2  NUMBER;
   V_NRTIPOCUSTO3  NUMBER;
   V_MES           VARCHAR2(10);
   V_ANO           VARCHAR2(10);
   V_NMTIPOCUSTO1  TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTO2  TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_NMTIPOCUSTO3  TIPOCUSTO.NMTIPOCUSTO%TYPE;
   V_VALIDA VARCHAR2(100);
   V_NMPRODESTO    PRODUTO.NMPRODUTO%TYPE;
BEGIN

   V_MES  :=  TO_CHAR(P_DTINI,'MM');
   V_ANO  :=  TO_CHAR(P_DTINI,'YYYY');

   V_NMTIPOCUSTO1 := ' ';
   V_NMTIPOCUSTO2 := ' ';
   V_NMTIPOCUSTO3 := ' ';

   DELETE FROM ETLRESULPRATPROD;

   COMMIT;

   V_DTINI := ADD_MONTHS(LAST_DAY(P_DTINI) + 1, -1);

   FOR C_NRTPCUS IN --> Seleciona 3 tipos de custo parametrizados
      (SELECT ROWNUM AS LINHA, NRTIPOCUSTO, NMTIPOCUSTO
         FROM(SELECT TO_NUMBER(CDTIPOCUSTO) NRTIPOCUSTO, NMTIPOCUSTO
                FROM TIPOCUSTO
               WHERE IDTPCUSTOGSC = 'S'
               ORDER BY NRTIPOCUSTO)
       )
   LOOP
      IF C_NRTPCUS.LINHA    = 1 THEN
         V_NRTIPOCUSTO1    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO1    := C_NRTPCUS.NMTIPOCUSTO;
      ELSIF C_NRTPCUS.LINHA = 2 THEN
         V_NRTIPOCUSTO2    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO2    := C_NRTPCUS.NMTIPOCUSTO;
      ELSIF C_NRTPCUS.LINHA = 3 THEN
         V_NRTIPOCUSTO3    := C_NRTPCUS.NRTIPOCUSTO;
         V_NMTIPOCUSTO3    := C_NRTPCUS.NMTIPOCUSTO;
      END IF;

   END LOOP;

   WHILE (V_DTINI  <=  P_DTFINA) LOOP
      V_DTFIM      :=   LAST_DAY( V_DTINI);
      V_MES        :=   TO_CHAR(V_DTFIM,'MM');
      V_ANO        :=   TO_CHAR(V_DTFIM,'YYYY');

      FOR C_ETL IN (SELECT FL.CDFILIAL, FL.CDAREAGERE, NVL(FL.DTINICIALBI, TO_DATE('01/01/2023','DD/MM/YYYY')) DTINICIALBI,
                           FL.CDSUPERVISOR, FL.CDGOPERAC, FL.CDEMPRESA,
                           FL.CDSEGMER, P.IDCOMCUSPERC,
                           TRUNC(DECODE(PG.IDUTILDTPROC, 'N', SYSDATE, NVL(P.DTPROCESSA,SYSDATE))) AS DTPROCESSA
                      FROM FILIAL FL, PARAMFILIAL P, PARAMGERAL PG
                     WHERE P.CDFILIAL = FL.CDFILIAL
                       AND FL.IDFUNCAOFILI IS NULL
                      -- AND FL.DTINICIALBI  IS NOT NULL
                      -- AND TRUNC(P.DTPROCESSA) >= V_DTINI
      ) LOOP
         IF ADD_MONTHS(LAST_DAY(C_ETL.DTINICIALBI) + 1, -1) <= V_DTINI THEN

            NOVO_CODIGO('CONSPLAN'||C_ETL.CDFILIAL, V_CDSEQUENCIAL, 1);
            V_CDSEQUENCIAL := SUBSTR(V_CDSEQUENCIAL, 11, 10);

            IF (TRUNC(C_ETL.DTPROCESSA - 1) <= TRUNC(V_DTFIM)) THEN  --> CONSIDERA UM DIA ANTES DA DATA DE PROCESSAMENTO
               V_DATAFINAL := TRUNC(C_ETL.DTPROCESSA - 1);
            ELSE
               V_DATAFINAL := TRUNC(V_DTFIM);
            END IF;

            FOR C_SERVICO IN (SELECT SE.CDSERVFILI, SE.IDSERVPRINC, SE.NMSERVICO,
                                     SUM(CA.QTCOMESTICAR) AS TOTCOMENSAIS, SUM(CA.QTCOMEFETCAR) AS TOTEFETIVOS
                                FROM CARDADIA CA, SERVICO SE
                               WHERE CA.CDFILIAL = C_ETL.CDFILIAL
                                 AND CA.CDFILIAL = SE.CDFILIAL
                                 AND CA.CDSERVFILI = SE.CDSERVFILI
                                 AND CA.DTCARDAPIO BETWEEN V_DTINI AND V_DTFIM
                               GROUP BY SE.CDSERVFILI, SE.NMSERVICO,  SE.IDSERVPRINC

            ) LOOP

               DELETE FROM CONSPLAN
               WHERE CDFILICPLA = C_ETL.CDFILIAL
                 AND NRCONSPLAN = V_CDSEQUENCIAL;

               COMMIT;

               CONSUMO_PLANEJADO_PLA(C_ETL.CDFILIAL,
                                     C_SERVICO.CDSERVFILI,
                                     V_DTINI,
                                     V_DTFIM,
                                     'C',
                                     'CFP',
                                     'P',
                                      0,
                                     'N',
                                      V_CDSEQUENCIAL,
                                     '0',
                                     'zzzzzzzzzz',
                                     '', --> Nenhum operador ser� necess�rio aqui
                                     '_'||TO_CHAR(V_DTINI, 'YYYYMMDD')||'_',
                                     '_'||TO_CHAR(V_DTFIM, 'YYYYMMDD')||'_'
                                     );

               V_VALIDA := '';
               FOR C_PRODUTO IN (
                  SELECT PR.CDFILIAL, PR.CDSERVFILI, PR.DTCARDAPIO,
                         PR.CDFILAUXPRAT, PR.CDPRATO, PT.NMPRATO,
                         PR.CDPRODUTO, P.CDPRODESTO, P.NMPRODUTO,
                         CD.QTCOMESTICAR, CD.QTCOMEFETCAR,
                         SUM(PR.CUSTOPLAN1) AS CUSTOPLAN1, SUM(PR.CUSTOPLAN2) AS CUSTOPLAN2, SUM(PR.CUSTOPLAN3) AS CUSTOPLAN3,
                         SUM(PR.CUSTOREAL1) AS CUSTOREAL1, SUM(PR.CUSTOREAL2) AS CUSTOREAL2, SUM(PR.CUSTOREAL3) AS CUSTOREAL3,
                         SUM(PR.QTPLANEJADA) AS QTPLANEJADA, SUM(PR.QTREALIZADA) AS QTREALIZADA
                    FROM PRATO PT,
                      (SELECT CDFILIAL, CDSERVFILI, DTCARDAPIO,
                         SUM(DECODE(C_ETL.IDCOMCUSPERC, 'C', QTCLIESTICAR, QTCOMESTICAR)) AS QTCOMESTICAR,
                         SUM(DECODE(C_ETL.IDCOMCUSPERC, 'C', QTCLIEFETCAR, QTCOMEFETCAR)) AS QTCOMEFETCAR
                       FROM CARDADIA
                       WHERE (CDFILIAL = C_ETL.CDFILIAL)
                         AND (CDSERVFILI = C_SERVICO.CDSERVFILI)
                         AND (DTCARDAPIO BETWEEN V_DTINI AND V_DTFIM)
                       GROUP BY CDFILIAL, CDSERVFILI, DTCARDAPIO) CD,
                      (SELECT CDFILIAL, CDSERVFILI, CDFILAUXPRAT,
                              CDPRATO, DTCARDAPIO, CDPRODUTO,
                              SUM(CUSTOPLAN1) CUSTOPLAN1, SUM(CUSTOPLAN2) CUSTOPLAN2, SUM(CUSTOPLAN3) CUSTOPLAN3,
                              SUM(CUSTOREAL1) CUSTOREAL1, SUM(CUSTOREAL2) CUSTOREAL2, SUM(CUSTOREAL3) CUSTOREAL3,
                              SUM(QTPLANEJADA) QTPLANEJADA, SUM(QTREALIZADA) QTREALIZADA
                       FROM
                         (SELECT
                            CP.CDFILICPLA CDFILIAL,
                            CP.CDSERVCPLA CDSERVFILI,
                            CP.DTCONSPLAN DTCARDAPIO,
                            CP.CDFAPRATCPLA AS CDFILAUXPRAT,
                            CP.CDPRATCONSPL AS CDPRATO,
                            (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO1,
                                           DECODE(PG.IDUTCARDPADR, 'S', CD.DTREFECUSTMES, CP.DTCONSPLAN),
                                           SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN1,
                            (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO2,
                                           DECODE(PG.IDUTCARDPADR, 'S', CD.DTREFECUSTMES, CP.DTCONSPLAN),
                                           SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN2,
                            (CUSTO_PRODUTO(CP.CDFILICPLA, CP.CDPRODCPLA, V_NRTIPOCUSTO3,
                                           DECODE(PG.IDUTCARDPADR, 'S', CD.DTREFECUSTMES, CP.DTCONSPLAN),
                                           SYSDATE) * CP.QTCONSPLAN) AS CUSTOPLAN3,
                            0 AS CUSTOREAL1,
                            0 AS CUSTOREAL2,
                            0 AS CUSTOREAL3,
                            CP.CDPRODCPLA CDPRODUTO,
                            CP.QTCONSPLAN AS QTPLANEJADA,
                            0 AS QTREALIZADA
                         FROM
                            CONSPLAN CP, PARAMGERAL PG,
                            (SELECT CD.CDFILIAL, CD.CDSERVFILI, CD.DTMESCARD, MAX(CM.DTREFECUSTMES) AS DTREFECUSTMES
                             FROM CARDADIA CD, CARDAMES CM
                             WHERE (CD.CDFILIAL = C_ETL.CDFILIAL)
                               AND (CD.CDSERVFILI = C_SERVICO.CDSERVFILI)
                               AND (CD.DTCARDAPIO BETWEEN V_DTINI AND V_DTFIM)
                               AND (CD.CDFILIAL   = CM.CDFILIAL(+))
                               AND (CD.CDSERVFILI = CM.CDSERVFILI(+))
                               AND (CD.DTMESCARD  = CM.DTMESCARDAPIO(+))
                             GROUP BY CD.CDFILIAL, CD.CDSERVFILI, CD.DTMESCARD) CD
                         WHERE (CP.CDFILICPLA = C_ETL.CDFILIAL)
                           AND (CP.NRCONSPLAN = V_CDSEQUENCIAL)
                           AND (CD.CDFILIAL = CP.CDFILICPLA)
                           AND (CD.CDSERVFILI = CP.CDSERVCPLA)
                           AND (PG.CDPARGERAL = '0001')
                           AND (CD.DTMESCARD = ADD_MONTHS(LAST_DAY(CP.DTCONSPLAN) + 1, -1))
                         UNION ALL
                         SELECT
                            CD.CDFILIAL,
                            CD.CDSERVFILI,
                            CD.DTCARDAPIO,
                            '    ' AS CDFILAUXPRAT,
                            '          ' AS CDPRATO,
                            DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * (CD.QTCOMESTICAR/C_SERVICO.TOTCOMENSAIS), 5)) AS CUSTOPLAN1,
                            DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * (CD.QTCOMESTICAR/C_SERVICO.TOTCOMENSAIS), 5)) AS CUSTOPLAN2,
                            DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(CNE.VRPLANNESTO * (RNE.PERATENESTO/100) * (CD.QTCOMESTICAR/C_SERVICO.TOTCOMENSAIS), 5)) AS CUSTOPLAN3,
                            0 AS CUSTOREAL1,
                            0 AS CUSTOREAL2,
                            0 AS CUSTOREAL3,
                            CNE.CDPRODUTO AS CDPRODUTO,
                            0 AS QTPLANEJADA,
                            0 AS QTREALIZADA
                         FROM
                            CARDADIA  CD,
                            RATENESTO RNE,
                            CUSTNESTO CNE,
                            DATA      DT
                         WHERE (DT.DTDATA BETWEEN V_DTINI AND V_DTFIM)
                           AND (TO_CHAR(DT.DTDATA, 'MMYYYY') = TO_CHAR(CNE.DTCUSTNESTO, 'MMYYYY'))
                           AND (CNE.CDFILIAL = C_ETL.CDFILIAL)
                           AND (RNE.CDSERVFILI = C_SERVICO.CDSERVFILI)
                           AND (CNE.CDPRODUTO = RNE.CDPRODUTO)
                           AND (CD.CDFILIAL = RNE.CDFILIAL)
                           AND (CD.CDSERVFILI = RNE.CDSERVFILI)
                           AND (CD.DTCARDAPIO = DT.DTDATA)
                           AND (NOT C_SERVICO.TOTCOMENSAIS IS NULL AND C_SERVICO.TOTCOMENSAIS <> 0)
                         UNION ALL
                         SELECT
                            C.CDFILIAL,
                            C.CDSERVFILI,
                            C.DTCARDAPIO,
                            C.CDFILAUXPRAT,
                            C.CDPRATO,
                            0 CUSTOPLAN1,
                            0 CUSTOPLAN2,
                            0 CUSTOPLAN3,
                            DECODE(V_NRTIPOCUSTO1, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO1, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL1,
                            DECODE(V_NRTIPOCUSTO2, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO2, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL2,
                            DECODE(V_NRTIPOCUSTO3, NULL, 0, (C.QTRETIRADA * CUSTO_PRODUTO(C.CDFILIAL, C.CDPRODUTO, V_NRTIPOCUSTO3, C.DTCARDAPIO, SYSDATE))) AS CUSTOREAL3,
                            C.CDPRODUTO,
                            0 AS QTPLANEJADA,
                            C.QTRETIRADA AS QTREALIZADA
                         FROM
                            (SELECT
                               CA.CDFILIAL,
                               CA.CDSERVFILI,
                               CA.DTCARDAPIO,
                               IR.CDFILAUXPRAT,
                               IR.CDPRATO,
                               SUM(IR.QTRETIRADA * PRA.VRFATOCONV) AS QTRETIRADA,
                               PRB.CDPRODUTO
                            FROM
                               CARDADIA CA,
                               PRODUTO  PRA,
                               PRODUTO  PRB,
                               RETIRADA RE,
                               ITEMRETI IR
                            WHERE (CA.CDFILIAL = C_ETL.CDFILIAL )
                              AND (CA.CDSERVFILI = C_SERVICO.CDSERVFILI)
                              AND (CA.DTCARDAPIO BETWEEN V_DTINI AND V_DTFIM)
                              AND (CA.CDFILIAL = RE.CDFILIAL)
                              AND (CA.NRCARDAPIO = RE.NRCARDAPIO)
                              AND (RE.CDFILIAL = IR.CDFILIAL)
                              AND (RE.NRCARDAPIO = IR.NRCARDAPIO)
                              AND (RE.NRRETIRADA = IR.NRRETIRADA)
                              AND (PRB.CDPRODUTO = PRA.CDPRODESTO)
                              AND (PRA.CDPRODUTO = IR.CDPRODUTO)
                            GROUP BY
                               CA.CDFILIAL,
                               CA.CDSERVFILI,
                               CA.DTCARDAPIO,
                               IR.CDFILAUXPRAT,
                               IR.CDPRATO,
                               PRB.CDPRODUTO
                            ) C

                         UNION ALL
                         SELECT
                            RNE.CDFILIAL,
                            RNE.CDSERVFILI,
                            DT.DTDATA      AS DTCARDAPIO,
                            '    ' AS CDFILAUXPRAT,
                            '          ' AS CDPRATO,
                            0 AS CUSTOPLAN1,
                            0 AS CUSTOPLAN2,
                            0 AS CUSTOPLAN3,
                            DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL1,
                            DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL2,
                            DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(CNE.VRREALNESTO * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL3,
                            CNE.CDPRODUTO AS CDPRODUTO,
                            0 AS QTPLANEJADA,
                            0 AS QTREALIZADA
                         FROM
                            CARDADIA  CA,
                            RATENESTO RNE,
                            CUSTNESTO CNE,
                            DATA      DT
                         WHERE (DT.DTDATA BETWEEN V_DTINI AND V_DTFIM)
                           AND (CNE.CDFILIAL = C_ETL.CDFILIAL)
                           AND (TO_CHAR(DT.DTDATA, 'MMYYYY') = TO_CHAR(CNE.DTCUSTNESTO, 'MMYYYY'))
                           AND (NOT CNE.VRREALNESTO IS NULL)
                           AND (RNE.CDFILIAL = C_ETL.CDFILIAL)
                           AND (RNE.CDSERVFILI = C_SERVICO.CDSERVFILI)
                           AND (RNE.CDPRODUTO = CNE.CDPRODUTO)
                           AND (CA.CDFILIAL = C_ETL.CDFILIAL)
                           AND (CA.CDSERVFILI = RNE.CDSERVFILI)
                           AND (CA.DTCARDAPIO = DT.DTDATA)
                           AND (NOT C_SERVICO.TOTEFETIVOS IS NULL AND C_SERVICO.TOTEFETIVOS <> 0)
                         UNION ALL
                         SELECT
                            RNE.CDFILIAL,
                            RNE.CDSERVFILI,
                            DT.DTDATA       AS DTCARDAPIO,
                            '    ' AS CDFILAUXPRAT,
                            '          ' AS CDPRATO,
                            0 AS CUSTOPLAN1,
                            0 AS CUSTOPLAN2,
                            0 AS CUSTOPLAN3,
                            DECODE(V_NRTIPOCUSTO1, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL1,
                            DECODE(V_NRTIPOCUSTO2, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL2,
                            DECODE(V_NRTIPOCUSTO3, NULL, 0, ROUND(TCN.VRTOTAITEM * (RNE.PERATENESTO/100) * (CA.QTCOMEFETCAR/C_SERVICO.TOTEFETIVOS), 5)) AS CUSTOREAL3,
                            TCN.CDPRODUTO CDPRODUTO,
                            0 AS QTPLANEJADA,
                            0 AS QTREALIZADA
                         FROM
                            DATA        DT,
                            RATENESTO   RNE,
                            CARDADIA    CA,
                            (SELECT
                                 TO_CHAR(NF.DTENTRSAID, 'MMYYYY') AS DTMESNF,
                                 IP.CDPRODUTO,
                                 SUM(IP.VRTOTAITEM) AS VRTOTAITEM
                              FROM
                                 NOTAFISCAL  NF,
                                 ITEMPRODUTO IP
                              WHERE (IP.CDFILIAL = NF.CDFILIAL)
                                AND (IP.NRLANCTONF = NF.NRLANCTONF)
                                AND (NF.CDFILIRECE = C_ETL.CDFILIAL)
                                AND (NF.IDENTRSAIDOP = 'E')
                                AND (NF.DTENTRSAID BETWEEN V_DTINI AND V_DTFIM)
                              GROUP BY
                                 TO_CHAR(NF.DTENTRSAID, 'MMYYYY'),
                                 IP.CDPRODUTO
                            ) TCN
                         WHERE (DT.DTDATA BETWEEN V_DTINI AND V_DTFIM)
                           AND (TO_CHAR(DT.DTDATA, 'MMYYYY') = TCN.DTMESNF)
                           AND (RNE.CDFILIAL = C_ETL.CDFILIAL)
                           AND (RNE.CDSERVFILI = C_SERVICO.CDSERVFILI)
                           AND (CA.CDFILIAL = C_ETL.CDFILIAL)
                           AND (CA.CDSERVFILI = RNE.CDSERVFILI)
                           AND (CA.DTCARDAPIO = DT.DTDATA)
                           AND (CA.DTCARDAPIO = DT.DTDATA)
                           AND (TCN.CDPRODUTO = RNE.CDPRODUTO)
                           AND (NOT C_SERVICO.TOTEFETIVOS IS NULL AND C_SERVICO.TOTEFETIVOS <> 0)
                           AND (NOT EXISTS (SELECT CDFILIAL
                                         FROM CUSTNESTO
                                         WHERE CDFILIAL = C_ETL.CDFILIAL
                                           AND DTCUSTNESTO = DT.DTDATA
                                           AND CDPRODUTO = RNE.CDPRODUTO
                                           AND NOT VRREALNESTO IS NULL))
                            )
                       GROUP BY
                         CDFILIAL,
                         CDSERVFILI,
                         DTCARDAPIO,
                         CDFILAUXPRAT,
                         CDPRATO,
                         CDPRODUTO ) PR,
                     PRODUTO P
                   WHERE CD.CDFILIAL = PR.CDFILIAL
                     AND CD.CDSERVFILI = PR.CDSERVFILI
                     AND CD.DTCARDAPIO = PR.DTCARDAPIO
                     AND PR.CDPRATO = PT.CDPRATO(+)
                     AND PR.CDFILAUXPRAT = PT.CDFILAUXPRAT(+)
                     AND PR.CDPRODUTO = P.CDPRODUTO
                   GROUP BY
                      PR.CDFILIAL,
                      PR.CDSERVFILI,
                      PR.DTCARDAPIO,
                      PR.CDFILAUXPRAT,
                      PR.CDPRATO,
                      PT.NMPRATO,
                      PR.CDPRODUTO,
                      P.CDPRODESTO,
                      P.NMPRODUTO,
                      CD.QTCOMESTICAR, 
                      CD.QTCOMEFETCAR
                   ORDER BY PR.CDFILIAL, PR.CDSERVFILI, PR.DTCARDAPIO
                   ) LOOP
                   
                     BEGIN                   
                        IF (C_PRODUTO.CDPRODUTO = C_PRODUTO.CDPRODESTO) THEN
                           V_NMPRODESTO := C_PRODUTO.NMPRODUTO;
                        ELSE
                           SELECT 
                              NMPRODUTO
                           INTO
                              V_NMPRODESTO
                           FROM 
                              PRODUTO
                           WHERE
                              CDPRODUTO = C_PRODUTO.CDPRODESTO;
                        END IF;
                     EXCEPTION
                        WHEN OTHERS THEN
                           V_NMPRODESTO := '';
                     END;

                      IF (V_VALIDA <> C_ETL.CDFILIAL || C_SERVICO.CDSERVFILI || TO_CHAR(C_PRODUTO.DTCARDAPIO, 'DD/MM/YYYY')) THEN
                          INSERT INTO ETLRESULPRATPROD(
                             CDFILIAL, CDSERVFILI, IDSERVPRINC, NMSERVRESU,
                             DSDTCARDAPIO, CDFILAUXPRAT, CDPRATO, NMPRATRESU,
                             CDPRODUTO, NMPRODESTO, QTCOMESTCARRESU, QTCOMEFETCARRESU,
                             VRCUSTPLANRESU1, VRCUSTPLANRESU2, VRCUSTPLANRESU3,
                             VRCUSTREALRESU1, VRCUSTREALRESU2, VRCUSTREALRESU3,
                             QTPLANEJADA, QTREALIZADA, 
                             CDANOBI, CDMESBI
                          )
                          VALUES(
                             C_ETL.CDFILIAL, C_SERVICO.CDSERVFILI, C_SERVICO.IDSERVPRINC, C_SERVICO.NMSERVICO,
                             TO_CHAR(C_PRODUTO.DTCARDAPIO, 'DD/MM/YYYY'), NULL, NULL, NULL,
                             NULL, NULL, C_PRODUTO.QTCOMESTICAR, C_PRODUTO.QTCOMEFETCAR,
                             0, 0, 0,
                             0, 0, 0,
                             0, 0,
                             V_ANO, V_MES);
                      END IF;
                      V_VALIDA := C_ETL.CDFILIAL || C_SERVICO.CDSERVFILI || TO_CHAR(C_PRODUTO.DTCARDAPIO, 'DD/MM/YYYY');

                      INSERT INTO ETLRESULPRATPROD(
                         CDFILIAL, CDSERVFILI, IDSERVPRINC, NMSERVRESU,
                         DSDTCARDAPIO, CDFILAUXPRAT, CDPRATO, NMPRATRESU,
                         CDPRODUTO, NMPRODESTO, QTCOMESTCARRESU, QTCOMEFETCARRESU,
                         VRCUSTPLANRESU1, VRCUSTPLANRESU2, VRCUSTPLANRESU3,
                         VRCUSTREALRESU1, VRCUSTREALRESU2, VRCUSTREALRESU3,
                         QTPLANEJADA, QTREALIZADA,
                         CDANOBI, CDMESBI
                      )
                      VALUES(
                         C_ETL.CDFILIAL, C_SERVICO.CDSERVFILI, C_SERVICO.IDSERVPRINC, C_SERVICO.NMSERVICO,
                         TO_CHAR(C_PRODUTO.DTCARDAPIO, 'DD/MM/YYYY'), C_PRODUTO.CDFILAUXPRAT, C_PRODUTO.CDPRATO, C_PRODUTO.NMPRATO,
                         C_PRODUTO.CDPRODUTO, C_PRODUTO.CDPRODESTO||' '||V_NMPRODESTO, 0, 0,
                         C_PRODUTO.CUSTOPLAN1, C_PRODUTO.CUSTOPLAN2, C_PRODUTO.CUSTOPLAN3,
                         C_PRODUTO.CUSTOREAL1, C_PRODUTO.CUSTOREAL2, C_PRODUTO.CUSTOREAL3,
                         C_PRODUTO.QTPLANEJADA, C_PRODUTO.QTREALIZADA,
                         V_ANO, V_MES
                     );

               END LOOP; --Fim do loop por produto

               DELETE FROM CONSPLAN
               WHERE CDFILICPLA = C_ETL.CDFILIAL
                 AND NRCONSPLAN = V_CDSEQUENCIAL;

               COMMIT;

            END LOOP;   -- fim do loop por servico

            DELETE FROM CONSPLAN
            WHERE NRCONSPLAN = V_CDSEQUENCIAL;

         END IF;        -- Final da compara��o com data de BI

         COMMIT;        -- Commit para cada Filial
      END LOOP;         -- fim do loop por Filial

      COMMIT;           -- Commit para cada m�s
      V_DTINI := ADD_MONTHS(V_DTINI,1);
   END LOOP;            -- loop por m�s

   --------------------------ATUALIZANDO O NOME DOS FATOS----------------------------

   --Updata o nome dos fatos de acordo com o tipo de custo parametrizado...

   IF (V_NMTIPOCUSTO1 <> ' ') THEN
      UPDATE ITEMDW
         SET NMITEMDW = 'Planejado (' || V_NMTIPOCUSTO1 || ')'
       WHERE CDITEMDW = 'VRCUSTPLANRESU1';

       UPDATE ITEMDW
         SET NMITEMDW = 'Realizado (' || V_NMTIPOCUSTO1 || ')'
       WHERE CDITEMDW = 'VRCUSTREALRESU1';

   END IF;

   IF (V_NMTIPOCUSTO2 <> ' ') THEN
      UPDATE ITEMDW
         SET NMITEMDW = 'Planejado (' || V_NMTIPOCUSTO2 || ')'
       WHERE CDITEMDW = 'VRCUSTPLANRESU2';

       UPDATE ITEMDW
         SET NMITEMDW = 'Realizado (' || V_NMTIPOCUSTO2 || ')'
       WHERE CDITEMDW = 'VRCUSTREALRESU2';

   END IF;

   IF (V_NMTIPOCUSTO3 <> ' ') THEN
      UPDATE ITEMDW
         SET NMITEMDW = 'Planejado (' || V_NMTIPOCUSTO3 || ')'
       WHERE CDITEMDW = 'VRCUSTPLANRESU3';

       UPDATE ITEMDW
         SET NMITEMDW = 'Realizado (' || V_NMTIPOCUSTO3 || ')'
       WHERE CDITEMDW = 'VRCUSTREALRESU3';
   END IF;
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('ETLRESUFOOD_PROD','5.09.105'); END;
/

