CREATE OR REPLACE PROCEDURE DEMONSTRATIVO_ESTRU(P_CDEMPRESA IN VARCHAR2, -- CODIGO DA EMPRESA
                                               P_CDTIPODEMO IN TIPODEMOESTRU.CDTIPODEMO%TYPE, -- CODIGO DO DEMONSTRATIVO
                                               P_IDSALDO IN VARCHAR2, -- TIPO DO SALDO, ACUMULADO OU PERIODO
                                               P_IDDESCENCER IN VARCHAR2, -- DESCONSIDERA ENCERRAMENTO DE EXERC
                                               P_DATAA IN DATE, -- DATA 1 QUANDO ACUMULADO
                                               P_DATAB IN DATE, -- DATA 2 QUANDO ACUMULADO
                                               P_DATAAINTERA IN DATE,  -- DATA INICIAL DO PRIMEIRO INTERVALO QUANDO PERIODO
                                               P_DATABINTERA IN DATE,  -- DATA FINAL DO PRIMEIRO INTERVALO  QUANDO PERIODO
                                               P_DATAAINTERB IN DATE,  -- DATA INICIAL DO SEGUNDO INTERVALO QUANDO PERIODO
                                               P_DATABINTERB IN DATE,  -- DATA FINAL DO SEGUNDO INTERVALO QUANDO PERIODO
                                               P_VISUITEMZERO VARCHAR2, --   VISUALIZA ITEM ZERADO
                                               P_NIVEL       IN VARCHAR2, -- NIVEL
                                               P_NRDEMO IN OUT NUMBER)    -- PARAMETRO DE SAIDA COM O NUMERO DO DEMONSTRATIVO ZERADO
AS
   V_NRDEMOCTBTEMP VARCHAR2(20);
   V_NRITDEMOCTB   VARCHAR2(20);
   V_DATAREF       DATE;
   V_VRITEMSTRU    NUMBER;
   V_VRITEMSTRU2   NUMBER;
   V_COUNT         NUMBER;
   V_CDEMPRESA     VARCHAR2(02);
   V_IDTIPODEMO    TIPODEMOESTRU.IDTIPODEMO%TYPE;
   V_DATASALDOA   DATE := LAST_DAY(P_DATAA);
   V_DATASALDOB   DATE := LAST_DAY(P_DATAB);
BEGIN
    V_NRDEMOCTBTEMP := TO_NUMBER(P_NRDEMO);
    SELECT IDTIPODEMO
      INTO V_IDTIPODEMO
      FROM TIPODEMOESTRU
     WHERE CDTIPODEMO = P_CDTIPODEMO;
  /* FILTRA A EMPRESA */
   IF LENGTH(P_CDEMPRESA) > 2 THEN
      V_CDEMPRESA := 'XX';
   ELSE
      IF P_CDEMPRESA = 'T' THEN
         V_CDEMPRESA := 'T';
      ELSE
         V_CDEMPRESA := P_CDEMPRESA;
      END IF;
   END IF;
   --raise_application_error(-20501,P_CDEMPRESA||'-'||V_DATASALDOA||'-'||V_DATASALDOB,true);
   --IF V_IDTIPODEMO = 'B' THEN
      FOR C_ITEMSTRU IN (SELECT CDTIPODEMO, CDITEMSTRUCTB, DSITEMSTRUCTB, IDTIPOORIG, IDNATUCONT, CDNUMORDEM, CDNVCONTCTBL, IDVISUALIZA
                           FROM ITEMAPUCONTCTBL
                          WHERE CDTIPODEMO = P_CDTIPODEMO
                            AND IDVISUALIZA = 'S'
                            AND TO_NUMBER(CDNVCONTCTBL) <= TO_NUMBER(P_NIVEL)
                          ORDER BY CDNUMORDEM)LOOP
          IF P_IDSALDO = 'A' THEN
              V_VRITEMSTRU := VALOR_SALDO_CTB(C_ITEMSTRU.CDITEMSTRUCTB,
                                               P_CDEMPRESA,'S', V_DATASALDOA);
              V_VRITEMSTRU2 := VALOR_SALDO_CTB(C_ITEMSTRU.CDITEMSTRUCTB,
                                               P_CDEMPRESA,'S', V_DATASALDOB);
          
    
              INSERT INTO DEMONSTCTBTMP
                         (NRDEMONSTCTBTMP, CDEMPRESA, CDTIPODEMO, CDITEMSTRU,
                          VRITEMSTRU1, VRITEMSTRU2, IDTIPOITEM)
                      VALUES
                         (V_NRDEMOCTBTEMP, V_CDEMPRESA, P_CDTIPODEMO, C_ITEMSTRU.CDITEMSTRUCTB,
                          V_VRITEMSTRU, V_VRITEMSTRU2 ,'A');
          ELSE
             V_VRITEMSTRU := VALOR_SALDO_CTB(C_ITEMSTRU.CDITEMSTRUCTB,
                                               P_CDEMPRESA,'S', P_DATABINTERA);
             V_VRITEMSTRU2 := VALOR_SALDO_CTB(C_ITEMSTRU.CDITEMSTRUCTB,
                                               P_CDEMPRESA,'S', P_DATABINTERB);
    
              INSERT INTO DEMONSTCTBTMP
                         (NRDEMONSTCTBTMP, CDEMPRESA, CDTIPODEMO, CDITEMSTRU,
                          VRITEMSTRU1, VRITEMSTRU2, IDTIPOITEM)
                      VALUES
                         (V_NRDEMOCTBTEMP, V_CDEMPRESA, P_CDTIPODEMO, C_ITEMSTRU.CDITEMSTRUCTB,
                          V_VRITEMSTRU, V_VRITEMSTRU2 ,'A');

          
          END IF;
      END LOOP;
     
   --END IF;
   P_NRDEMO := TO_NUMBER(V_NRDEMOCTBTEMP);
END;
/
