Esse estudo visa detalhar as alterações necessárias na rotina de Cálculo de Depreciação (ATFA050) para melhora de performance no processamento.
Hoje já existe no sistema a opção de executar o cálculo da depreciação via procedure, porém esta opção só está disponível quando o cliente seleciona a opção "Não contabiliza" na tela de parâmetros da rotina.
Ou seja, somente o fato de instalar a procedure via configurador não garante que a rotina será executada via procedure. Esta particularidade não é de conhecimento de todos os clientes.
Portanto, foi definido que o trabalho para ganho de performance na rotina ATFA050, será executar o cálculo da depreciação via procedure sempre que essa estiver instalada.
Neste passo, será verificada a melhora de performance da rotina ATFA050 quando executada via procedure.
O teste será feito no mesmo e com a mesma quantidade de registros.
Resultado dos testes:

O processamento com procedure apresentou uma melhora de 79% no cálculo de depreciação com 300 ativos.
Hoje para executar a rotina de apuração de resultados com procedure são necessários dois passos:

2. Passo 2: Executar a rotina com a opção: "Não Contabiliza".

Obs.: Documentação de apoio
Este tratamento pode ser visto neste trecho do código do fonte ATFA050.
Só executa via procedure se mv_par01 = 3 (opção "Não Contabiliza")

De maneira resumida o novo processo só mudará quando a rotina for executada com a procedure instalada e com a opção de contabilização ativada.
Na execução deste cenário, o sistema deve executar o cálculo via procedure e chamar a contabilização offline logo após o término do processamento.
Fluxo resumido do processo:

A chamada da contabilização offline deve ser feita somente para o processo de depreciação.
Esta funcionalidade já existe no fonte CTBATF - Contabilização Offline do Ativo Fixo.
Deve ser verificada a possibilidade de chamar as funções diretamente do fonte CTBATF.
Caso não seja possível devido a exibição de telas ou outras situações, devem ser criadas funções específicas no fonte ATFA050.

Print do ponto descrito no fonte ATFA050

Print do ponto descrito no fonte ATFA050
/* #### Exemplo de Implementação #### */
If mv_par01 < 3
cRotAtF := "02" // Contabiliza somente Depreciação
cAlsTabReg := FunName()+"_"+AllTrim(SM0->M0_CODIGO)+"_"+StrTran(AllTrim(xFilial("SN4"))," ", "_")
dDtInicial := Substr(Dtos(dDatabase),1,6)+"01"
dDtFinal := Dtos(dDataBase)
nConsidFil := mv_par06
aSelFil := {}
aTmpFil := {}
nAtvJaClas := 2 // Considera somente ativos já classificados
If mv_par06==1
aSelFil := LoadSelFil(mv_par07,mv_par08) // Implementar Função
EndIf
//Definição de Quais Processos do Ativo Fixo serão contabilizados na Execução desta Rotina
CTATFDADOS(cRotATF,@cAlsTabReg,dDtInicial,dDtFinal,nConsidFil,aSelFil,aTmpFil,nAtvJaClas)
nIniLote := 0
nFinLote := 0
nQuebraPrc := 2 // Não quebra por Processo
nAglutLanc := mv_par02
nMostraLanc := mv_par01
lUsaFlag := GETMV("MV_CTBFLAG",.F.,.F.)
//Função de contabilização dos registros pendentes de contabilização do ambiente Ativo Fixo.
CTATFCTB(cRotATF, cAlsTabReg ,nIniLote, nFinLote, nQuebraPrc, nAglutLanc, nMostraLanc, lUsaFlag, nConsidFil)
EndIf |
<!-- esconder o menu -->
<style>
div.theme-default .ia-splitter #main {
margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
display: none;
}
#main {
padding-left: 10px;
padding-right: 10px;
overflow-x: hidden;
}
.aui-header-primary .aui-nav, .aui-page-panel {
margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
margin-left: 0px !important;
}
</style>
|