TMS – Razão Contábil – Diferença no Saldo Inicial do Razão Contábil
Incidente
No módulo CTB, ao gerar o relatório Razão Contábil, ele é gerado com o Saldo Inicial Incorreto.
Causa
Esse incidente pode ocorrer, quando as Triggers relacionadas ao Saldo desta tabela não estiverem criadas.
Solução
Para solucionar esse incidente deverá executar os seguintes scripts para criação das Triggers:
1. TR_INS_CTBLOTIT:
CREATE TRIGGER [dbo].[TR_INS_CTBLOTIT] ON [dbo].[CTBLotIt]
FOR INSERT
AS
SET NOCOUNT ON
Declare
@Situacao Int,
@CdEmpresa Int,
@VlMovimento Numeric(14,4),
@QtReg Int,
@CdContaDeb Int,
@CdContaCred Int
DECLARE TR_TABTEMP CURSOR FOR SELECT CDEMPRESA, ISNULL(CDPLANOCONTACRED,0), ISNULL(CDPLANOCONTADEB,0), ISNULL(VLMOVIMENTO,0), ISNULL(INSITUACAO,0) FROM INSERTED
OPEN TR_TABTEMP
FETCH NEXT FROM TR_TABTEMP INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
WHILE @@FETCH_STATUS = 0
BEGIN
IF (@Situacao = 0) /* Se movimento não estiver cancelado */
BEGIN
/*Atualiza Debito*/
if @CdContaDeb > 0
BEGIN
Select @QtReg = Count(*) from CTBSDO where CdPlanoConta = @CdContaDeb
and CdEmpresa = @CdEmpresa
if @QtReg = 0
insert into ctbsdo (cdempresa,cdplanoconta,dtreferencia,vlsaldo)
values(@CdEmpresa,@CdContadeb,getdate(),@Vlmovimento)
else
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) + @VlMovimento
where cdplanoconta = @CdContaDeb
and cdempresa = @CdEmpresa
END
/*Atualiza Credito*/
IF @CdContaCred > 0
BEGIN
Select @QtReg = Count(*) from CTBSDO where CdPlanoConta = @CdContaCred
and CdEmpresa = @CdEmpresa
if @QtReg = 0
insert into ctbsdo (cdempresa,cdplanoconta,dtreferencia,vlsaldo)
values(@CdEmpresa,@CdContaCred,getdate(),-(@Vlmovimento))
else
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) - @VlMovimento
where cdplanoconta = @CdContaCred
and cdempresa = @CdEmpresa
END
END
FETCH NEXT FROM TR_TABTEMP INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
END
DEALLOCATE TR_TABTEMP
GO;
2. TR_UPD_CTBLOTIT
CREATE TRIGGER [dbo].[TR_UPD_CTBLOTIT] ON [dbo].[CTBLotIt]
FOR UPDATE
AS
SET NOCOUNT ON
Declare
@CdEmpresa Int,
@QtReg Int,
@VlMovimento Numeric(14,4),
@CdContaDeb Int,
@CdContaCred Int,
@InSaldo Int,
@Situacao Int
DECLARE TR_TABTEMP_DEL CURSOR FOR SELECT CDEMPRESA, ISNULL(CDPLANOCONTACRED,0), ISNULL(CDPLANOCONTADEB,0), ISNULL(VLMOVIMENTO,0), ISNULL(INSITUACAO,0) FROM DELETED
OPEN TR_TABTEMP_DEL
FETCH NEXT FROM TR_TABTEMP_DEL INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
WHILE @@FETCH_STATUS = 0
BEGIN
if (@Situacao = 0) /* Se movimento não estiver cancelado */
begin
/*Conta Debito*/
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) - @Vlmovimento
where cdplanoconta = @CdContadeb
and cdempresa = @CdEmpresa
/*Conta Credito*/
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) + @Vlmovimento
where cdplanoconta = @CdContaCred
and cdempresa = @CdEmpresa
end
FETCH NEXT FROM TR_TABTEMP_DEL INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
END
DEALLOCATE TR_TABTEMP_DEL
DECLARE TR_TABTEMP_INS CURSOR FOR SELECT CDEMPRESA, ISNULL(CDPLANOCONTACRED,0), ISNULL(CDPLANOCONTADEB,0), ISNULL(VLMOVIMENTO,0), ISNULL(INSITUACAO,0) FROM INSERTED
OPEN TR_TABTEMP_INS
FETCH NEXT FROM TR_TABTEMP_INS INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
WHILE @@FETCH_STATUS = 0
BEGIN
if (@Situacao = 0) /* Se movimento não estiver cancelado */
begin
/*Atualiza Debito*/
if @CdContaDeb > 0
BEGIN
Select @QtReg = Count(*) from CTBSDO where CdPlanoConta = @CdContaDeb
and CdEmpresa = @CdEmpresa
if @QtReg = 0
insert into ctbsdo (cdempresa,cdplanoconta,dtreferencia,vlsaldo)
values(@CdEmpresa,@CdContadeb,getdate(),@Vlmovimento)
else
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) + @VlMovimento
where cdplanoconta = @CdContaDeb
and cdempresa = @CdEmpresa
END
/*Atualiza Credito*/
if @CdContaCred > 0
BEGIN
Select @QtReg = Count(*) from CTBSDO where CdPlanoConta = @CdContaCred
and CdEmpresa = @CdEmpresa
if @QtReg = 0
insert into ctbsdo (cdempresa,cdplanoconta,dtreferencia,vlsaldo)
values(@CdEmpresa,@CdContaCred,getdate(),-(@Vlmovimento))
else
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) - @VlMovimento
where cdplanoconta = @CdContaCred
and cdempresa = @CdEmpresa
END
end
FETCH NEXT FROM TR_TABTEMP_INS INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
END
DEALLOCATE TR_TABTEMP_INS
GO;
3. TR_DEL_CTBLOTIT
CREATE TRIGGER [dbo].[TR_DEL_CTBLOTIT] ON [dbo].[CTBLotIt]
FOR DELETE
AS
SET NOCOUNT ON
Declare
@Situacao Int,
@VlMovimento Numeric(14,4),
@CdEmpresa Int,
@CdContaDeb Int,
@CdContaCred Int
DECLARE TR_TABTEMP CURSOR FOR SELECT CDEMPRESA, CDPLANOCONTACRED, CDPLANOCONTADEB, VLMOVIMENTO, ISNULL(INSITUACAO,0) FROM DELETED
OPEN TR_TABTEMP
FETCH NEXT FROM TR_TABTEMP INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
WHILE @@FETCH_STATUS = 0
BEGIN
if (@Situacao = 0)
begin
/*Conta Debito*/
IF @CdContaDeb > 0
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) - ISNULL(@Vlmovimento,0)
where cdplanoconta = @CdContadeb
and cdempresa = @CdEmpresa
/*Conta Credito*/
IF @CdContaCred > 0
update ctbsdo set vlsaldo = ISNULL(vlsaldo,0) + ISNULL(@Vlmovimento,0)
where cdplanoconta = @CdContaCred
and cdempresa = @CdEmpresa
end
FETCH NEXT FROM TR_TABTEMP INTO @CdEmpresa, @CdContaCred, @CdContaDeb, @VlMovimento, @Situacao
END
DEALLOCATE TR_TABTEMP
GO;
3. Após criar as Triggers, no módulo CTB, acesse Movimentações / Contabilidade / Movimentação Contábil;
3.1. Crie um lançamento contábil:
4. No módulo CTB, acesse Utilitários / Análise de diferenças nos saldos contábeis:
4.1. Informe a Conta Contábil;
4.2. Clique em Analisar Saldos:
4.3. Acesse a guia Resultado de Análise de Saldos;
4.4. Marque a conta apresentada;
4.5. Clique em Recuperar Saldos.
Atenção! Antes de realizar qualquer alteração, analise o impacto que poderá ter em outros lançamentos/processos do sistema