CREATE OR REPLACE PROCEDURE CONSISTE_ORCAMENTO_GOP(P_CDFILDEST   IN AUTOFORNE.CDFILDEST%TYPE,
                                                   P_CDFILLANC   IN AUTOFORNE.CDFILLANC%TYPE,
                                                   P_NRDEMANDA   IN AUTOFORNE.NRAUTOFORN%TYPE,
                                                   P_RETORNO     OUT VARCHAR2,
                                                   P_NRORG       IN VARCHAR2 DEFAULT '1',
                                                   P_DATA        IN DATE DEFAULT NULL)
AS
  V_VRJASOLICITADOAF   FLOAT;
  V_VRSOLICITADOAF     FLOAT;
  V_VRJASOLICITADOSO   FLOAT;
  V_VRSOLICITADOSO     FLOAT;
  V_VRJASOLICITADOPE   FLOAT;
  V_VRSOLICITADOPE     FLOAT;

  V_NRCONSISTORCAMENTO NUMBER;
  V_VRCUSTOPROD        FLOAT;

  V_DESC               VARCHAR2(200);

  V_DATAINI            DATE;
  V_DATAFIM            DATE;
  V_DATAAUX            DATE;

  V_NRPERIODOORCAGOP   NUMBER;
  V_IDPERIODOORCA      VARCHAR2(30);

  W_N                  CHAR(1):= 'N';
  W_S                  CHAR(1):= 'S';
  W_0                  CHAR(1):= '0';
  W_1                  CHAR(1):= '1';
  W_2                  CHAR(1):= '2';
  W_3                  CHAR(1):= '3';
  W_4                  CHAR(1):= '4';
  W_5                  CHAR(1):= '5';
  W_6                  CHAR(1):= '6';
  V_NRORCAMENTREALOC   VARCHAR2(20);
  V_MES                NUMBER;
  V_MESFIM             NUMBER;
  V_MESINI             NUMBER;
  V_NRMES              NUMBER;
  V_MESLOOP            DATE;
  V_VRREALIZADO        FLOAT;

  V_TIPOITEM           VARCHAR2(100);

  FUNCTION DATA_ORCA(P_DIA VARCHAR, P_DATA DATE) RETURN DATE
  IS
    V_DATA  DATE;
  BEGIN
     SELECT TO_DATE(CASE WHEN TO_NUMBER(P_DIA) > TO_NUMBER(TO_CHAR(LAST_DAY(P_DATA),'DD'))
                         THEN TO_CHAR(LAST_DAY(P_DATA),'DD')
                         ELSE LPAD(P_DIA,2,W_0)
                    END || TO_CHAR(P.DTMES,'MM/YYYY'),'DD/MM/YYYY')
       INTO V_DATA
       FROM DATA P
      WHERE P_DATA BETWEEN TO_DATE(CASE WHEN TO_NUMBER(P_DIA) > TO_NUMBER(TO_CHAR(LAST_DAY(P_DATA),'DD'))
                                        THEN TO_CHAR(LAST_DAY(P_DATA),'DD')
                                        ELSE LPAD(P_DIA,2,W_0)
                                   END || TO_CHAR(P.DTMES,'MM/YYYY'),'DD/MM/YYYY')
                       AND ADD_MONTHS(TO_DATE(CASE WHEN TO_NUMBER(P_DIA) > TO_NUMBER(TO_CHAR(LAST_DAY(P_DATA),'DD'))
                                                   THEN TO_CHAR(LAST_DAY(P_DATA),'DD')
                                                   ELSE LPAD(P_DIA,2,W_0)
                                              END || TO_CHAR(P.DTMES,'MM/YYYY'),'DD/MM/YYYY'),1)-1
      GROUP BY TO_DATE(CASE WHEN TO_NUMBER(P_DIA) > TO_NUMBER(TO_CHAR(LAST_DAY(P_DATA),'DD'))
                         THEN TO_CHAR(LAST_DAY(P_DATA),'DD')
                         ELSE LPAD(P_DIA,2,W_0)
                    END || TO_CHAR(P.DTMES,'MM/YYYY'),'DD/MM/YYYY');

     RETURN V_DATA;
  END;
BEGIN
   P_RETORNO := 'S';

--CONTCTBL_PRODUTO filial, CTBL_PRODUTO

   FOR C_FILIAL IN (SELECT IDCONSAFORCFIL, VRPEORCBLOQFIL, NVL(P.IDVERIORCFILI,'NAO_VALIDA') IDVERIORCFILI,
                           NVL(F.NRDIAINIORCAGOP,PO.NRDIAINIORCA) DIAINIORCA, NVL(PO.CDTIPOCUSTO,'03') CDTIPOCUSTO,
                           NVL(PO.IDORCDESPDIVERS,'P') IDORCDESPDIVERS, NVL(PO.IDORCADESPMATRI,'P') IDORCADESPMATRI
                      FROM FILIAL F, PARASUPRI P, PARAMORCAOPERAC PO
                     WHERE F.CDFILIAL = P_CDFILDEST
                       AND P.CDFILIAL = NVL(F.CDFILCENTCMP, F.CDFILIAL)
                       AND F.NRORG    = P_NRORG
                       AND PO.NRORG   = P_NRORG
                       AND F.NRORG    = P.NRORG) LOOP


      IF P_NRDEMANDA IS NOT NULL THEN
         FOR C_AUTOFORNE IN (SELECT DTPROGENTAF
                               FROM ITEMAUTF AF
                              WHERE AF.CDFILDEST  = P_CDFILDEST
                                AND AF.CDFILLANC  = P_CDFILLANC
                                AND AF.NRAUTOFORN = P_NRDEMANDA
                                AND AF.NRORG      = P_NRORG
                              GROUP BY DTPROGENTAF) LOOP

            IF C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_SOL_PED', 'VALIDA_AF_PED', 'VALIDA_SOL', 'VALIDA_PED', 'VALIDA_AF', 'NAO_VALIDA') THEN

               V_DATAINI := DATA_ORCA(C_FILIAL.DIAINIORCA, C_AUTOFORNE.DTPROGENTAF);
               V_DATAFIM := ADD_MONTHS(V_DATAINI,1)-1;

               SELECT MAX(NRPERIODO), MAX(IDPERIODOORCA)
                 INTO V_NRPERIODOORCAGOP, V_IDPERIODOORCA
                 FROM PERIODOORCAGOP P
                WHERE P.NRORG = P_NRORG
                  AND P.CDFILIAL = (SELECT NVL(MAX(PERIODOORCAGOP.CDFILIAL),'P') FROM PERIODOORCAGOP WHERE PERIODOORCAGOP.CDFILIAL = P_CDFILDEST)
                  AND V_DATAINI BETWEEN TO_DATE(CASE WHEN TO_NUMBER(C_FILIAL.DIAINIORCA) > TO_NUMBER(TO_CHAR(LAST_DAY(V_DATAINI),'DD'))
                                                     THEN TO_CHAR(LAST_DAY(V_DATAINI),'DD')
                                                     ELSE LPAD(C_FILIAL.DIAINIORCA,2,W_0)
                                               END || TO_CHAR(P.DTINIPERIORCA,'MM') || TO_CHAR(V_DATAINI, 'YYYY'),'DD/MM/YYYY')
                                    AND ADD_MONTHS(TO_DATE(CASE WHEN TO_NUMBER(C_FILIAL.DIAINIORCA) > TO_NUMBER(TO_CHAR(LAST_DAY(V_DATAINI),'DD'))
                                                                THEN TO_CHAR(LAST_DAY(V_DATAINI),'DD')
                                                                ELSE LPAD(C_FILIAL.DIAINIORCA,2,W_0)
                                                           END || TO_CHAR(P.DTFIMPERIORCA,'MM') || TO_CHAR(V_DATAINI, 'YYYY'),'DD/MM/YYYY'),1)-1;

               FOR C_ORCAMENTO IN (SELECT PROD.CDARVPROD, IDP.CDCONTCTBL, IM.DTORCAMENTO, ABS(IM.VRORCAMENTO) VRORCACONSDESP, ABS(IDP.VRORCAMENTO) VRORCAITEM,
                                          I.IDTIPOORCAOP, I.CDDESPPREV
                                     FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                                 AND I.IDTIPOORCAOP IN ('CONSUMO','DESPENTRADA','DESPDIVERSA')
                                                                                 AND I.NRORG = O.NRORG
                                                         INNER JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                                   AND A.NRORG = O.NRORG
                                                         INNER JOIN ITORCAMESGOP IM ON IM.NRITEMORCAOP = I.NRITEMORCAOP
                                                                                   AND IM.NRORG = I.NRORG
                                                         INNER JOIN ITDETALORCAMESGOP IDP ON IDP.NRITORCAMESGOP = IM.NRITORCAMESGOP
                                                                                   AND IDP.NRORG = IM.NRORG
                                                         LEFT  JOIN PRODUTO PROD ON PROD.CDPRODUTO = IDP.CDPRODUTO
                                                                                AND PROD.NRORG = IDP.NRORG
                                    WHERE O.CDFILIAL = P_CDFILDEST
                                      AND O.IDPERIODOORCA = V_IDPERIODOORCA
                                      AND O.NRPERIODOORCA = V_NRPERIODOORCAGOP
                                      AND O.NRANOORCAGOP = TO_CHAR(V_DATAINI,'YYYY')
                                      AND O.NRORG = P_NRORG
                                      AND C_AUTOFORNE.DTPROGENTAF BETWEEN V_DATAINI AND V_DATAFIM
                                      AND TO_NUMBER(TO_CHAR(V_DATAINI,'MM')) = TO_NUMBER(TO_CHAR(IM.DTORCAMENTO,'MM'))
                                      AND IDP.VRORCAMENTO IS NOT NULL
                                      AND EXISTS (SELECT 1
                                                    FROM ITEMAUTF AF INNER JOIN PRODUTO P ON AF.CDPRODUTO = P.CDPRODUTO
                                                   WHERE AF.CDFILDEST  = P_CDFILDEST
                                                     AND AF.CDFILLANC  = P_CDFILLANC
                                                     AND AF.NRAUTOFORN = P_NRDEMANDA
                                                     AND AF.NRORG      = P_NRORG
                                                     AND P.CDARVPROD LIKE PROD.CDARVPROD||'%'
                                                     AND PROD.CDARVPROD IS NOT NULL
                                                   UNION
                                                  SELECT 1
                                                    FROM ITEMAUTF AF INNER JOIN PRODUTO P ON AF.CDPRODUTO = P.CDPRODUTO
                                                   WHERE AF.CDFILDEST  = P_CDFILDEST
                                                     AND AF.CDFILLANC  = P_CDFILLANC
                                                     AND AF.NRAUTOFORN = P_NRDEMANDA
                                                     AND AF.NRORG      = P_NRORG
                                                     AND CTBL_PRODUTO(AF.CDPRODUTO,'E') LIKE IDP.CDCONTCTBL||'%'
                                                     AND IDP.CDCONTCTBL IS NOT NULL
                                                     AND (NOT EXISTS (SELECT PPR.CDFILIAL
                                                                        FROM PRODUTOROP PPR, PRODUTO PP
                                                                       WHERE PPR.IDTPPRODUTOROP = 'CO'
                                                                         AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                                         AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                                         AND P.CDARVPROD LIKE PP.CDARVPROD||'%')
                                                          OR EXISTS (SELECT PPR.CDFILIAL
                                                                       FROM PRODUTOROP PPR, PRODUTO PP
                                                                      WHERE PPR.IDTPPRODUTOROP = 'OX'
                                                                        AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                                        AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                                        AND P.CDARVPROD LIKE PP.CDARVPROD||'%')))
/*                                                   UNION
                                                  SELECT 1
                                                    FROM ITEMPEDEXOL I INNER JOIN PRODUTO P ON I.CDPRODUTO = P.CDPRODUTO
                                                   WHERE I.CDFILDEST = P_CDFILDEST
                                                     AND I.CDFILLANC = P_CDFILLANC
                                                     AND I.NRPEDEXOL = P_NRDEMANDA
                                                     AND I.NRORG     = P_NRORG
                                                     AND P.CDARVPROD LIKE PROD.CDARVPROD||'%'
                                                   UNION
                                                  SELECT 1
                                                    FROM ITEMSOLI I INNER JOIN PRODUTO P ON I.CDPRODUTO = P.CDPRODUTO
                                                   WHERE I.CDFILSOLI = P_CDFILDEST
                                                     AND I.CDFILLAN  = P_CDFILLANC
                                                     AND I.NRSOLICMP = P_NRDEMANDA
                                                     AND I.NRORG     = P_NRORG
                                                     AND P.CDARVPROD LIKE PROD.CDARVPROD||'%' */ 
                                  ORDER BY I.IDTIPOORCAOP, I.CDDESPPREV, PROD.CDARVPROD, IDP.CDCONTCTBL DESC) LOOP                  

                  V_VRJASOLICITADOAF := 0;
                  V_VRSOLICITADOAF   := 0;
                  V_VRJASOLICITADOSO := 0;
                  V_VRSOLICITADOSO   := 0;
                  V_VRJASOLICITADOPE := 0;
                  V_VRSOLICITADOPE   := 0;

                  IF C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN
                     V_TIPOITEM := 'consumo';
                  ELSE
                     V_TIPOITEM := 'despesa de entrada';
                  END IF;

                  /* Autorização de Fornecimento */
                  IF (C_FILIAL.IDCONSAFORCFIL = W_S) OR C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_AF_PED', 'VALIDA_AF') THEN
                     SELECT SUM((NVL(I.VRPREUNIAF,0) * NVL(I.QTPROGENTAF,0)))
                       INTO V_VRJASOLICITADOAF
                       FROM AUTOFORNE A INNER JOIN ITEMAUTF I ON A.CDFILDEST  = I.CDFILDEST
                                                             AND A.CDFILLANC  = I.CDFILLANC
                                                             AND A.NRAUTOFORN = I.NRAUTOFORN
                                                             AND A.NRORG      = I.NRORG
                                        INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                            AND P.NRORG = I.NRORG
                      WHERE NVL(A.IDBAIXAAF,W_1) NOT IN (W_3,W_4,W_5)
                        AND NVL(I.IDBAIXITMAF,W_1) IN (W_1,W_2)
                        AND I.DTPROGENTAF BETWEEN V_DATAINI AND V_DATAFIM
                        AND A.CDFILDEST = P_CDFILDEST
                        AND ((P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%' AND C_ORCAMENTO.CDARVPROD IS NOT NULL)
                           OR (CTBL_PRODUTO(P.CDPRODUTO,'E') LIKE C_ORCAMENTO.CDCONTCTBL||'%'
                              AND (NOT EXISTS (SELECT PPR.CDFILIAL
                                                 FROM PRODUTOROP PPR, PRODUTO PP
                                                WHERE PPR.IDTPPRODUTOROP = 'CO'
                                                  AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                  AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                  AND P.CDARVPROD LIKE PP.CDARVPROD||'%')
                                   OR EXISTS (SELECT PPR.CDFILIAL
                                                FROM PRODUTOROP PPR, PRODUTO PP
                                               WHERE PPR.IDTPPRODUTOROP = 'OX'
                                                 AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                 AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                 AND P.CDARVPROD LIKE PP.CDARVPROD||'%')) 
                              AND C_ORCAMENTO.CDCONTCTBL IS NOT NULL))
                        AND A.IDSITUATUAAF IS NULL
                        AND IDAFFORALIM = W_N
                        AND NVL(A.IDAFEXPIRADA, W_N) = W_N
                        AND NVL(A.IDSITAFALCADA, 'PENDENTE') <> 'RECUSADA'
                        AND A.NRORG = P_NRORG
                        AND NOT EXISTS (SELECT 1
                                          FROM DUAL
                                         WHERE A.CDFILDEST = P_CDFILDEST
                                           AND A.CDFILLANC = P_CDFILLANC
                                           AND A.NRAUTOFORN = P_NRDEMANDA);

                     SELECT SUM((NVL(I.VRPREUNIAF,0) * NVL(I.QTPROGENTAF,0))) VRPRODUTO
                       INTO V_VRSOLICITADOAF
                       FROM AUTOFORNE A INNER JOIN ITEMAUTF I ON A.CDFILDEST = I.CDFILDEST
                                                             AND A.CDFILLANC = I.CDFILLANC
                                                             AND A.NRAUTOFORN = I.NRAUTOFORN
                                        INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                      WHERE A.CDFILDEST = P_CDFILDEST
                        AND A.CDFILLANC = P_CDFILLANC
                        AND A.NRAUTOFORN = P_NRDEMANDA
                        AND I.DTPROGENTAF BETWEEN V_DATAINI AND V_DATAFIM
                        AND ((P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%' AND C_ORCAMENTO.CDARVPROD IS NOT NULL)
                           OR (CTBL_PRODUTO(P.CDPRODUTO,'E') LIKE C_ORCAMENTO.CDCONTCTBL||'%' 
                              AND C_ORCAMENTO.CDCONTCTBL IS NOT NULL
                              AND (NOT EXISTS (SELECT PPR.CDFILIAL
                                                 FROM PRODUTOROP PPR, PRODUTO PP
                                                WHERE PPR.IDTPPRODUTOROP = 'CO'
                                                  AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                  AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                  AND P.CDARVPROD LIKE PP.CDARVPROD||'%')
                                   OR EXISTS (SELECT PPR.CDFILIAL
                                                FROM PRODUTOROP PPR, PRODUTO PP
                                               WHERE PPR.IDTPPRODUTOROP = 'OX'
                                                 AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                 AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                 AND P.CDARVPROD LIKE PP.CDARVPROD||'%'))));

                     /* Pedido */
/*                     SELECT SUM(NVL(I.QTPROGENPEOL,0)*NVL(CUSTO_PRODUTO(E.CDFILDEST, P.CDPRODUTO, C_FILIAL.CDTIPOCUSTO, I.DTPROGENPEOL, SYSDATE),0))
                       INTO V_VRJASOLICITADOPE
                       FROM PEDIDOEXOL E INNER JOIN ITEMPEDEXOL I ON E.CDFILDEST = I.CDFILDEST
                                                                 AND E.CDFILLANC = I.CDFILLANC
                                                                 AND E.NRPEDEXOL = I.NRPEDEXOL
                                                                 AND E.NRORG     = I.NRORG
                                         INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                             AND P.NRORG     = I.NRORG
                      WHERE E.CDFILDEST = P_CDFILDEST
                        AND (NVL(I.IDBAIXENPEOL, W_1) IN (W_1, W_2))
                        AND NVL(I.IDITEMAJUSTE, W_N) = W_N
                        AND (NVL(E.IDBAIXEXOL, W_0) NOT IN (W_3, W_4, W_5))
                        AND I.DTPROGENPEOL BETWEEN V_DATAINI AND V_DATAFIM
                        AND P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%'
                        AND E.NRORG = P_NRORG
                        AND I.DTPROGENPEOL BETWEEN V_DATAINI AND V_DATAFIM
                        AND NOT EXISTS (SELECT 1
                                          FROM DUAL
                                         WHERE E.CDFILDEST = P_CDFILDEST
                                           AND E.CDFILLANC = P_CDFILLANC
                                           AND E.NRPEDEXOL = P_NRDEMANDA);

                     SELECT SUM(NVL(I.QTPROGENPEOL,0)*NVL(CUSTO_PRODUTO(E.CDFILDEST, P.CDPRODUTO, C_FILIAL.CDTIPOCUSTO, I.DTPROGENPEOL, SYSDATE),0))
                       INTO V_VRSOLICITADOPE
                       FROM PEDIDOEXOL E INNER JOIN ITEMPEDEXOL I ON E.CDFILDEST = I.CDFILDEST
                                                                 AND E.CDFILLANC = I.CDFILLANC
                                                                 AND E.NRPEDEXOL = I.NRPEDEXOL
                                                                 AND E.NRORG     = I.NRORG
                                         INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                             AND P.NRORG     = I.NRORG
                      WHERE E.CDFILDEST = P_CDFILDEST
                        AND E.CDFILLANC = P_CDFILLANC
                        AND E.NRPEDEXOL = P_NRDEMANDA
                        AND E.NRORG     = P_NRORG
                        AND I.DTPROGENPEOL BETWEEN V_DATAINI AND V_DATAFIM
                        AND P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%'; */
                  END IF;
                  /* Solicitação */
/*                  IF C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_SOL_PED', 'VALIDA_SOL') THEN
                     SELECT SUM(NVL(I.QTSOLIPROD,0)*NVL(CUSTO_PRODUTO(S.CDFILSOLI, P.CDPRODUTO, C_FILIAL.CDTIPOCUSTO, I.DTPROGENTR, SYSDATE),0))
                       INTO V_VRJASOLICITADOSO
                       FROM SOLICITA S INNER JOIN ITEMSOLI I ON S.CDFILLANCA = I.CDFILLAN
                                                            AND S.CDFILSOLI  = I.CDFILSOLI
                                                            AND S.NRSOLICMP  = I.NRSOLICMP
                                                            AND S.NRORG      = I.NRORG
                                       INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                           AND P.NRORG     = I.NRORG
                      WHERE S.CDFILSOLI = P_CDFILDEST
                        AND S.NRORG = P_NRORG
                        AND I.DTPROGENTR BETWEEN V_DATAINI AND V_DATAFIM
                        AND P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%'
                        AND (NVL(S.IDSITSCALCADA, 'PENDENTE') <> 'RECUSADA')
                        AND NOT EXISTS (SELECT 1
                                          FROM DUAL
                                         WHERE S.CDFILSOLI = P_CDFILDEST
                                           AND S.CDFILLANCA = P_CDFILLANC
                                           AND S.NRSOLICMP = P_NRDEMANDA)
                        AND NOT EXISTS (SELECT 1
                                          FROM ITEMSOLI
                                         WHERE ITEMSOLI.DTPROGENCONS = I.DTPROGENTR
                                           AND ITEMSOLI.CDPRODUTCONS = I.CDPRODUTO
                                           AND ITEMSOLI.CDFILSOLCONS = I.CDFILSOLI
                                           AND ITEMSOLI.CDFILLANCONS = I.CDFILLAN
                                           AND ITEMSOLI.NRSOLCMPCONS = I.NRSOLICMP
                                           AND ITEMSOLI.NRORG        = I.NRORG);

                     SELECT SUM(NVL(I.QTSOLIPROD,0)*NVL(CUSTO_PRODUTO(S.CDFILSOLI, P.CDPRODUTO, C_FILIAL.CDTIPOCUSTO, I.DTPROGENTR, SYSDATE),0))
                       INTO V_VRSOLICITADOSO
                       FROM SOLICITA S INNER JOIN ITEMSOLI I ON S.CDFILLANCA = I.CDFILLAN
                                                            AND S.CDFILSOLI  = I.CDFILSOLI
                                                            AND S.NRSOLICMP  = I.NRSOLICMP
                                                            AND S.NRORG      = I.NRORG
                                       INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                           AND P.NRORG     = I.NRORG
                      WHERE S.CDFILSOLI  = P_CDFILDEST
                        AND S.CDFILLANCA = P_CDFILLANC
                        AND S.NRSOLICMP  = P_NRDEMANDA
                        AND S.NRORG      = P_NRORG
                        AND I.DTPROGENTR BETWEEN V_DATAINI AND V_DATAFIM
                        AND P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%';
                  END IF;
*/                  


                  V_DESC := NULL;
                  IF (C_ORCAMENTO.VRORCAITEM < (NVL(V_VRJASOLICITADOAF,0)+NVL(V_VRSOLICITADOAF,0)/*+NVL(V_VRJASOLICITADOPE,0)+
                                                NVL(V_VRSOLICITADOPE,0)+NVL(V_VRJASOLICITADOSO,0)+NVL(V_VRSOLICITADOSO,0)*/)) THEN
                     
                     IF C_ORCAMENTO.CDARVPROD IS NOT NULL THEN
                        V_DESC := 'Orçamento de produto do nível '||C_ORCAMENTO.CDARVPROD||' de '||V_TIPOITEM||' foi ultrapassado. Periodo: '||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'MM/YYYY');
                     ELSE
                        V_DESC := 'Orçamento de conta contábil do nível '||FORMATA_CDCONTCTBL(C_ORCAMENTO.CDCONTCTBL)||' de '||V_TIPOITEM||' foi ultrapassado. Periodo: '||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'MM/YYYY');                     
                     END IF;

                     P_RETORNO := 'N';
                  END IF;
                  IF V_DESC IS NULL AND
                     (C_ORCAMENTO.VRORCACONSDESP < (NVL(V_VRJASOLICITADOAF,0)+NVL(V_VRSOLICITADOAF,0)/*+NVL(V_VRJASOLICITADOPE,0)+
                                                    NVL(V_VRSOLICITADOPE,0)+NVL(V_VRJASOLICITADOSO,0)+NVL(V_VRSOLICITADOSO,0)*/)) THEN
                     V_DESC := 'Orçamento de '||V_TIPOITEM||' foi ultrapassado. Periodo: '||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'MM/YYYY');

                     P_RETORNO := 'N';
                  END IF;

                  IF P_RETORNO <> 'N' THEN
                     V_VRREALIZADO := (NVL(V_VRJASOLICITADOAF,0)+NVL(V_VRSOLICITADOAF,0)/*+NVL(V_VRJASOLICITADOPE,0)+
                                       NVL(V_VRSOLICITADOPE,0)+NVL(V_VRJASOLICITADOSO,0)+NVL(V_VRSOLICITADOSO,0)*/);
                  ELSE
                     V_VRREALIZADO := NVL(V_VRJASOLICITADOAF,0)/*+NVL(V_VRJASOLICITADOPE,0)+NVL(V_VRJASOLICITADOSO,0)*/;
                  END IF;

                  UPDATE ORCAMENTREALOC
                     SET VRORCAMENTO = C_ORCAMENTO.VRORCAITEM,
                         VRREALIZADO = V_VRREALIZADO,
                         VRREALOCADO = 0,
                         VRORCAREALOC = 0,
                         VRDIFERENCA = C_ORCAMENTO.VRORCAITEM - V_VRREALIZADO
                   WHERE CDFILIAL = P_CDFILDEST
                     AND IDTPDEMANDA = 'AF'
                     AND IDORIGEM = CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END
                     AND DTMESPERIODO = C_ORCAMENTO.DTORCAMENTO
                     AND (CDNVLARVPROD = C_ORCAMENTO.CDARVPROD OR CDNVLCONTCTBL = C_ORCAMENTO.CDCONTCTBL)
                     AND ((CDDESPPREV = C_ORCAMENTO.CDDESPPREV AND C_ORCAMENTO.CDDESPPREV IS NOT NULL) OR (CDDESPPREV IS NULL));

                  IF SQL%ROWCOUNT = 0 THEN
                     NOVO_CODIGO('ORCAMENTREALOC', V_NRORCAMENTREALOC);

                     INSERT INTO ORCAMENTREALOC (NRORCAMENTREALOC, CDFILIAL, IDTPDEMANDA, IDORIGEM,
                                                 DTMESPERIODO, CDNVLARVPROD, CDDESPPREV, VRORCAMENTO,
                                                 VRORCAREALOC, VRREALIZADO, VRREALOCADO, VRDIFERENCA, NRORG,
                                                 CDNVLCONTCTBL)
                          VALUES (V_NRORCAMENTREALOC, P_CDFILDEST, 'AF', CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END,
                                  C_ORCAMENTO.DTORCAMENTO, C_ORCAMENTO.CDARVPROD, C_ORCAMENTO.CDDESPPREV, C_ORCAMENTO.VRORCAITEM,
                                  0, V_VRREALIZADO, 0, C_ORCAMENTO.VRORCACONSDESP - V_VRREALIZADO, P_NRORG,
                                  C_ORCAMENTO.CDCONTCTBL);

                     V_MES := 0;

                     SELECT TO_NUMBER(TO_CHAR(DTFIMPERIORCA,'MM')), TO_NUMBER(TO_CHAR(DTINIPERIORCA,'MM'))
                       INTO V_MESFIM, V_MESINI
                       FROM PERIODOORCAGOP
                      WHERE CDFILIAL = (SELECT NVL(MAX(PERIODOORCAGOP.CDFILIAL),'P') FROM PERIODOORCAGOP WHERE PERIODOORCAGOP.CDFILIAL = P_CDFILDEST)
                        AND C_ORCAMENTO.DTORCAMENTO BETWEEN TO_DATE(TO_CHAR(DTINIPERIORCA,'DD/MM')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY'),'DD/MM/YYYY')
                                                        AND TO_DATE(TO_CHAR(DTFIMPERIORCA,'DD/MM')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY'),'DD/MM/YYYY');

                     WHILE V_MESINI <= V_MESFIM LOOP
                        V_NRMES   := TO_NUMBER(TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'MM'));
                        V_MESLOOP := '01/'||LPAD(TO_CHAR(V_MESINI),2,'0')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY');

                        IF V_MESINI <> V_NRMES THEN
                           NOVO_CODIGO('ORCAMENTREALOC', V_NRORCAMENTREALOC);

                           INSERT INTO ORCAMENTREALOC (NRORCAMENTREALOC, CDFILIAL, IDTPDEMANDA, IDORIGEM,
                                                       DTMESPERIODO, CDNVLARVPROD, CDDESPPREV, VRORCAMENTO,
                                                       VRORCAREALOC, VRREALIZADO,VRREALOCADO,VRDIFERENCA,NRORG,
                                                       CDNVLCONTCTBL)
                                VALUES (V_NRORCAMENTREALOC, P_CDFILDEST, 'AF', CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END,
                                        V_MESLOOP,C_ORCAMENTO.CDARVPROD, C_ORCAMENTO.CDDESPPREV, 0,
                                        0, 0, 0, 0, P_NRORG,
                                        C_ORCAMENTO.CDCONTCTBL);
                        END IF;
                        V_MESINI := V_MESINI +1;
                     END LOOP;
                  END IF;

                  /* Validação item a item */
                  IF V_DESC IS NOT NULL THEN
                     IF (C_FILIAL.IDCONSAFORCFIL = W_S) OR C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_AF_PED', 'VALIDA_AF') THEN
                        FOR C_ITEMAUTF IN (SELECT I.CDPRODUTO, CTBL_PRODUTO(I.CDPRODUTO, 'E') CDCONTCTBL, SUM((NVL(I.VRPREUNIAF,0) * NVL(I.QTPROGENTAF,0))) VRPRODUTO
                                             FROM AUTOFORNE A INNER JOIN ITEMAUTF I ON A.CDFILDEST  = I.CDFILDEST
                                                                                   AND A.CDFILLANC  = I.CDFILLANC
                                                                                   AND A.NRAUTOFORN = I.NRAUTOFORN
                                                                                   AND A.NRORG      = I.NRORG
                                                              INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                                                  AND P.NRORG     = I.NRORG
                                            WHERE A.CDFILDEST  = P_CDFILDEST
                                              AND A.CDFILLANC  = P_CDFILLANC
                                              AND A.NRAUTOFORN = P_NRDEMANDA
                                              AND A.NRORG      = P_NRORG
                                              AND I.DTPROGENTAF BETWEEN V_DATAINI AND V_DATAFIM
                                              AND ((P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%' AND C_ORCAMENTO.CDARVPROD IS NOT NULL)
                                                OR (CTBL_PRODUTO(P.CDPRODUTO,'E') LIKE C_ORCAMENTO.CDCONTCTBL||'%' 
                                                  AND C_ORCAMENTO.CDCONTCTBL IS NOT NULL
                                                  AND (NOT EXISTS (SELECT PPR.CDFILIAL
                                                                     FROM PRODUTOROP PPR, PRODUTO PP
                                                                    WHERE PPR.IDTPPRODUTOROP = 'CO'
                                                                      AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                                      AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                                      AND P.CDARVPROD LIKE PP.CDARVPROD||'%')
                                                       OR EXISTS (SELECT PPR.CDFILIAL
                                                                    FROM PRODUTOROP PPR, PRODUTO PP
                                                                   WHERE PPR.IDTPPRODUTOROP = 'OX'
                                                                     AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                                                     AND PPR.CDPRODUTO = PP.CDPRODUTO
                                                                     AND P.CDARVPROD LIKE PP.CDARVPROD||'%'))))
                                            GROUP BY I.CDPRODUTO, CTBL_PRODUTO(I.CDPRODUTO, 'E')) LOOP

                           NOVO_CODIGO('CONSISTORCAMENTO', V_NRCONSISTORCAMENTO, 1);
                           INSERT INTO CONSISTORCAMENTO (NRCONSISTORCAMENTO, CDFILDEST, CDFILLANC, NRDEMANDA, IDTPDEMANDA,
                                                         DTDEMANDA, CDPRODUTO, VRORCAMENTO, VRSOLICITADO, DSERROCONSORCA,
                                                         IDORIGEMCONS, VRCONSUMOITEM, VRPRODUTO, CDNVLARVPROD, NRORG,
                                                         CDCONTCTBL, CDNVLCONTCTBL)
                                VALUES (V_NRCONSISTORCAMENTO, P_CDFILDEST, P_CDFILLANC, P_NRDEMANDA, 'AF',
                                        C_ORCAMENTO.DTORCAMENTO, C_ITEMAUTF.CDPRODUTO, C_ORCAMENTO.VRORCACONSDESP, V_VRSOLICITADOAF, V_DESC,
                                        CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END, C_ORCAMENTO.VRORCAITEM,
                                        C_ITEMAUTF.VRPRODUTO, C_ORCAMENTO.CDARVPROD, P_NRORG, 
                                        C_ITEMAUTF.CDCONTCTBL, C_ORCAMENTO.CDCONTCTBL);
                        END LOOP;
                     END IF;

                     /* Solicitação */
/*                     IF C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_SOL_PED', 'VALIDA_SOL') THEN
                        FOR C_SOLICITA IN (SELECT P.CDPRODUTO, SUM(NVL(I.QTSOLIPROD,0)*
                                                  NVL(CUSTO_PRODUTO(S.CDFILSOLI, P.CDPRODUTO, C_FILIAL.CDTIPOCUSTO, S.DTSOLCMP, SYSDATE),0)) VRPRODUTO
                                             FROM SOLICITA S INNER JOIN ITEMSOLI I ON S.CDFILLANCA = I.CDFILLAN
                                                                                  AND S.CDFILSOLI = I.CDFILSOLI
                                                                                  AND S.NRSOLICMP = I.NRSOLICMP
                                                                                  AND S.NRORG     = I.NRORG
                                                             INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                                                 AND P.NRORG     = I.NRORG
                                            WHERE S.CDFILSOLI  = P_CDFILDEST
                                              AND S.CDFILLANCA = P_CDFILLANC
                                              AND S.NRSOLICMP  = P_NRDEMANDA
                                              AND S.NRORG      = P_NRORG
                                              AND NVL(S.IDBAIXASOL,1) = 1
                                              AND NVL(I.IDBAIXITMSOL,1) = 1
                                              AND I.DTPROGENTR BETWEEN V_DATAINI AND V_DATAFIM
                                              AND P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%'
                                            GROUP BY P.CDPRODUTO) LOOP

                           NOVO_CODIGO('CONSISTORCAMENTO', V_NRCONSISTORCAMENTO, 1);
                           INSERT INTO CONSISTORCAMENTO (NRCONSISTORCAMENTO, CDFILDEST, CDFILLANC, NRDEMANDA, IDTPDEMANDA,
                                                         DTDEMANDA, CDPRODUTO, VRORCAMENTO, VRSOLICITADO, DSERROCONSORCA,
                                                         IDORIGEMCONS, VRCONSUMOITEM, VRPRODUTO, CDNVLARVPROD, NRORG)
                                VALUES (V_NRCONSISTORCAMENTO, P_CDFILDEST, P_CDFILLANC, P_NRDEMANDA, 'SOLICITACAO',
                                        C_ORCAMENTO.DTORCAMENTO, C_SOLICITA.CDPRODUTO, C_ORCAMENTO.VRORCACONSDESP, V_VRSOLICITADOSO, V_DESC,
                                        CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END, C_ORCAMENTO.VRORCAITEM,
                                        C_SOLICITA.VRPRODUTO, C_ORCAMENTO.CDARVPROD, P_NRORG);
                        END LOOP;
                     END IF; */
                  END IF;
               END LOOP;
            END IF;
         END LOOP;
      ELSE
         V_VRREALIZADO := 0;

         SELECT NVL(P_DATA, CASE WHEN NVL(P.IDUTILDTPROC,'N') = 'S'
                                 THEN NVL(PF.DTPROCESSA,SYSDATE)
                                 ELSE SYSDATE
                            END) DT
           INTO V_DATAAUX
           FROM PARAMFILIAL PF, PARAMGERAL P
          WHERE PF.CDFILIAL = P_CDFILDEST
            AND PF.NRORG = P.NRORG
            AND PF.NRORG = P_NRORG;

         V_DATAINI := DATA_ORCA(C_FILIAL.DIAINIORCA, V_DATAAUX);
         V_DATAFIM := ADD_MONTHS(V_DATAINI,1)-1;

         SELECT MAX(NRPERIODO), MAX(IDPERIODOORCA)
           INTO V_NRPERIODOORCAGOP, V_IDPERIODOORCA
           FROM PERIODOORCAGOP P
          WHERE P.NRORG = P_NRORG
            AND P.CDFILIAL = (SELECT NVL(MAX(PERIODOORCAGOP.CDFILIAL),'P') FROM PERIODOORCAGOP WHERE PERIODOORCAGOP.CDFILIAL = P_CDFILDEST)
            AND V_DATAINI BETWEEN TO_DATE(CASE WHEN TO_NUMBER(C_FILIAL.DIAINIORCA) > TO_NUMBER(TO_CHAR(LAST_DAY(V_DATAINI),'DD'))
                                               THEN TO_CHAR(LAST_DAY(V_DATAINI),'DD')
                                               ELSE LPAD(C_FILIAL.DIAINIORCA,2,W_0)
                                         END || TO_CHAR(P.DTINIPERIORCA,'MM') || TO_CHAR(V_DATAINI, 'YYYY'),'DD/MM/YYYY')
                              AND ADD_MONTHS(TO_DATE(CASE WHEN TO_NUMBER(C_FILIAL.DIAINIORCA) > TO_NUMBER(TO_CHAR(LAST_DAY(V_DATAINI),'DD'))
                                                          THEN TO_CHAR(LAST_DAY(V_DATAINI),'DD')
                                                          ELSE LPAD(C_FILIAL.DIAINIORCA,2,W_0)
                                                     END || TO_CHAR(P.DTFIMPERIORCA,'MM') || TO_CHAR(V_DATAINI, 'YYYY'),'DD/MM/YYYY'),1)-1;

         FOR C_ORCAMENTO IN (SELECT PROD.CDARVPROD, IDP.CDCONTCTBL, IM.DTORCAMENTO, ABS(SUM(IM.VRORCAMENTO)) VRORCACONSDESP, ABS(SUM(IDP.VRORCAMENTO)) VRORCAITEM,
                                    I.IDTIPOORCAOP, I.CDDESPPREV
                               FROM ORCAMENTOGOP O INNER JOIN ITEMORCAGOP I ON I.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                           AND I.IDTIPOORCAOP IN ('CONSUMO','DESPENTRADA','DESPDIVERSA')
                                                                           AND I.NRORG = O.NRORG
                                                   INNER JOIN APROVAORCAGOP A ON A.NRORCAMENTOGOP = O.NRORCAMENTOGOP
                                                                             AND A.NRORG = O.NRORG
                                                   INNER JOIN ITORCAMESGOP IM ON IM.NRITEMORCAOP = I.NRITEMORCAOP
                                                                             AND IM.NRORG = I.NRORG
                                                   INNER JOIN ITDETALORCAMESGOP IDP ON IDP.NRITORCAMESGOP = IM.NRITORCAMESGOP
                                                                             AND IDP.NRORG = IM.NRORG
                                                   LEFT JOIN PRODUTO PROD ON PROD.CDPRODUTO = IDP.CDPRODUTO
                                                                          AND PROD.NRORG = IDP.NRORG
                              WHERE O.CDFILIAL = P_CDFILDEST
                                AND O.IDPERIODOORCA = V_IDPERIODOORCA
                                AND O.NRPERIODOORCA = V_NRPERIODOORCAGOP
                                AND O.NRORG = P_NRORG
                                AND O.NRANOORCAGOP = TO_CHAR(V_DATAINI,'YYYY') 
                                AND TO_NUMBER(TO_CHAR(V_DATAAUX,'MM')) = TO_NUMBER(TO_CHAR(IM.DTORCAMENTO,'MM'))
                              GROUP BY PROD.CDARVPROD, IDP.CDCONTCTBL, IM.DTORCAMENTO, I.IDTIPOORCAOP, I.CDDESPPREV) LOOP                              

            IF (C_FILIAL.IDCONSAFORCFIL = W_S) OR C_FILIAL.IDVERIORCFILI IN ('VALIDA_SOL_AF_PED', 'VALIDA_SOL_AF', 'VALIDA_AF_PED', 'VALIDA_AF') THEN
               SELECT SUM((NVL(I.VRPREUNIAF,0) * NVL(I.QTPROGENTAF,0)))
                 INTO V_VRJASOLICITADOAF
                 FROM AUTOFORNE A INNER JOIN ITEMAUTF I ON A.CDFILDEST  = I.CDFILDEST
                                                       AND A.CDFILLANC  = I.CDFILLANC
                                                       AND A.NRAUTOFORN = I.NRAUTOFORN
                                                       AND A.NRORG      = I.NRORG
                                  INNER JOIN PRODUTO P ON P.CDPRODUTO = I.CDPRODUTO
                                                      AND P.NRORG = I.NRORG
                WHERE NVL(A.IDBAIXAAF,W_1) NOT IN (W_3,W_4,W_5)
                  AND NVL(I.IDBAIXITMAF,W_1) IN (W_1,W_2)
                  AND I.DTPROGENTAF BETWEEN V_DATAINI AND V_DATAFIM
                  AND A.CDFILDEST = P_CDFILDEST
                  AND ((P.CDARVPROD LIKE C_ORCAMENTO.CDARVPROD||'%' AND C_ORCAMENTO.CDARVPROD IS NOT NULL)
                      OR (CTBL_PRODUTO(P.CDPRODUTO,'E') LIKE C_ORCAMENTO.CDCONTCTBL||'%' 
                        AND C_ORCAMENTO.CDCONTCTBL IS NOT NULL
                        AND (NOT EXISTS (SELECT PPR.CDFILIAL
                                           FROM PRODUTOROP PPR, PRODUTO PP
                                          WHERE PPR.IDTPPRODUTOROP = 'CO'
                                            AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                            AND PPR.CDPRODUTO = PP.CDPRODUTO
                                            AND P.CDARVPROD LIKE PP.CDARVPROD||'%')
                             OR EXISTS (SELECT PPR.CDFILIAL
                                          FROM PRODUTOROP PPR, PRODUTO PP
                                         WHERE PPR.IDTPPRODUTOROP = 'OX'
                                           AND PPR.CDFILIAL = TIPOPARAM_DRO(P_CDFILDEST)
                                           AND PPR.CDPRODUTO = PP.CDPRODUTO
                                           AND P.CDARVPROD LIKE PP.CDARVPROD||'%'))))
                  AND A.IDSITUATUAAF IS NULL
                  AND IDAFFORALIM = W_N
                  AND NVL(A.IDAFEXPIRADA, W_N) = W_N
                  AND NVL(A.IDSITAFALCADA, 'PENDENTE') <> 'RECUSADA'
                  AND A.NRORG = P_NRORG;

               V_VRREALIZADO := V_VRJASOLICITADOAF;
            END IF;

            UPDATE ORCAMENTREALOC
               SET VRREALIZADO = V_VRREALIZADO,
                   VRREALOCADO = 0,
                   VRORCAREALOC = 0,
                   VRDIFERENCA = C_ORCAMENTO.VRORCAITEM - V_VRREALIZADO,
                   VRORCAMENTO = C_ORCAMENTO.VRORCAITEM
             WHERE CDFILIAL = P_CDFILDEST
               AND IDTPDEMANDA = 'AF'
               AND IDORIGEM = CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END
               AND DTMESPERIODO = C_ORCAMENTO.DTORCAMENTO
               AND (CDNVLARVPROD = C_ORCAMENTO.CDARVPROD OR CDNVLCONTCTBL = C_ORCAMENTO.CDCONTCTBL)
               AND ((CDDESPPREV = C_ORCAMENTO.CDDESPPREV AND C_ORCAMENTO.CDDESPPREV IS NOT NULL) OR (CDDESPPREV IS NULL));

            IF SQL%ROWCOUNT = 0 THEN
               NOVO_CODIGO('ORCAMENTREALOC', V_NRORCAMENTREALOC);

               INSERT INTO ORCAMENTREALOC (NRORCAMENTREALOC, CDFILIAL, IDTPDEMANDA, IDORIGEM,
                                           DTMESPERIODO, CDNVLARVPROD, CDDESPPREV, VRORCAMENTO,
                                           VRORCAREALOC, VRREALIZADO, VRREALOCADO, VRDIFERENCA, NRORG,
                                           CDNVLCONTCTBL)
                    VALUES (V_NRORCAMENTREALOC, P_CDFILDEST, 'AF', CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END,
                            C_ORCAMENTO.DTORCAMENTO, C_ORCAMENTO.CDARVPROD, C_ORCAMENTO.CDDESPPREV, C_ORCAMENTO.VRORCAITEM,
                            0, V_VRREALIZADO, 0, C_ORCAMENTO.VRORCACONSDESP - V_VRREALIZADO, P_NRORG,
                            C_ORCAMENTO.CDCONTCTBL);                            

               V_MES := 0;

               SELECT TO_NUMBER(TO_CHAR(DTFIMPERIORCA,'MM')), TO_NUMBER(TO_CHAR(DTINIPERIORCA,'MM'))
                 INTO V_MESFIM, V_MESINI
                 FROM PERIODOORCAGOP
                WHERE CDFILIAL = (SELECT NVL(MAX(PERIODOORCAGOP.CDFILIAL),'P') FROM PERIODOORCAGOP WHERE PERIODOORCAGOP.CDFILIAL = P_CDFILDEST)
                  AND C_ORCAMENTO.DTORCAMENTO BETWEEN TO_DATE(TO_CHAR(DTINIPERIORCA,'DD/MM')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY'),'DD/MM/YYYY')
                                                  AND TO_DATE(TO_CHAR(DTFIMPERIORCA,'DD/MM')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY'),'DD/MM/YYYY');

               WHILE V_MESINI <= V_MESFIM LOOP
                  V_NRMES   := TO_NUMBER(TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'MM'));
                  V_MESLOOP := '01/'||LPAD(TO_CHAR(V_MESINI),2,'0')||TO_CHAR(C_ORCAMENTO.DTORCAMENTO,'YYYY');

                  IF V_MESINI <> V_NRMES THEN
                     NOVO_CODIGO('ORCAMENTREALOC', V_NRORCAMENTREALOC);

                     INSERT INTO ORCAMENTREALOC (NRORCAMENTREALOC, CDFILIAL, IDTPDEMANDA, IDORIGEM,
                                                 DTMESPERIODO, CDNVLARVPROD, CDDESPPREV, VRORCAMENTO,
                                                 VRORCAREALOC, VRREALIZADO,VRREALOCADO,VRDIFERENCA,NRORG,
                                                 CDNVLCONTCTBL)
                          VALUES (V_NRORCAMENTREALOC, P_CDFILDEST, 'AF', CASE WHEN C_ORCAMENTO.IDTIPOORCAOP = 'CONSUMO' THEN 'CONSUMO' ELSE 'DESPESA' END,
                                  V_MESLOOP,C_ORCAMENTO.CDARVPROD, C_ORCAMENTO.CDDESPPREV, 0,
                                  0, 0, 0, 0, P_NRORG,
                                  C_ORCAMENTO.CDCONTCTBL);
                  END IF;
                  V_MESINI := V_MESINI +1;
               END LOOP;
            END IF;
         END LOOP;
      END IF;
   END LOOP;
   COMMIT;
END;
/

-- VERSAO --
BEGIN ATUVEROBJ('CONSISTE_ORCAMENTO_GOP','6.39.011'); END;
/
