CREATE OR ALTER PROCEDURE SPI_GERAR_CONTA (
    ESTAB_ID INTEGER)
AS
DECLARE VARIABLE I           INTEGER;
DECLARE VARIABLE A           INTEGER;
DECLARE VARIABLE ANALITICA   VARCHAR(10);
DECLARE VARIABLE CODECD      INTEGER;
DECLARE VARIABLE CODREDUZIDO VARCHAR(15);
DECLARE VARIABLE CONTA       VARCHAR(11);
DECLARE VARIABLE DESCRICAO   VARCHAR(140);
DECLARE VARIABLE GRUPOCONTA  INTEGER;
DECLARE VARIABLE GRUPOLALUR  INTEGER;
DECLARE VARIABLE ID          INTEGER;
DECLARE VARIABLE NATUREZA    VARCHAR(1);
DECLARE VARIABLE ANO_ATT     INTEGER;
DECLARE VARIABLE ANO_SALDO   INTEGER;
DECLARE VARIABLE ANO_ATU     INTEGER;
BEGIN
  I = 1;
  A = 12;
  SELECT MAX(A.ANO)ANOATU From TbContabil_Saldo_Diario A Having Sum(Abs(A.Saldo)) > 0 INTO ANO_SALDO;
  SELECT EXTRACT(YEAR FROM CURRENT_DATE) FROM RDB$DATABASE INTO ANO_ATU;
  ANO_ATT = ANO_ATU;
  WHILE(ANO_ATU <= ANO_SALDO) DO BEGIN
     FOR SELECT B.ANALITICA, B.CODECD, B.CODREDUZIDO, B.CONTA, B.DESCRICAO, B.GRUPOCONTA, B.GRUPOLALUR, B.ID, B.NATUREZA FROM TBCONTACONTABIL B
         ORDER BY B.CONTA INTO ANALITICA, CODECD, CODREDUZIDO, CONTA, DESCRICAO, GRUPOCONTA, GRUPOLALUR, ID, NATUREZA DO BEGIN
         I = 1;
         WHILE(I <= A) DO BEGIN
            IF (ANO_ATU > ANO_SALDO) THEN
                BEGIN
                 INSERT INTO TBCONTABIL_SALDO_DIARIO(ESTABELECIMENTO_ID,CONTA,MES,ANO,SALDO,CONTA_ID) VALUES (:ESTAB_ID, :CONTA, :I, :ANO_ATT, 0.00, :ID);
                 I = I + 1;
                END
            ELSE
                BEGIN
                 INSERT INTO TBCONTABIL_SALDO_DIARIO(ESTABELECIMENTO_ID,CONTA,MES,ANO,SALDO,CONTA_ID) VALUES (:ESTAB_ID, :CONTA, :I, :ANO_ATU, 0.00, :ID);
                 I = I + 1;
                END
            END
         END
     ANO_ATU = ANO_ATU + 1;
     END
END;
