Esse estudo visa detalhar as alterações necessárias na rotina de Cálculo de Depreciação (ATFA050) para melhorar a performance em seu 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 a opção "Não contabiliza" é selecionada 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 por ela.
Esta particularidade não é de conhecimento de todos os clientes e isso acaba gerando insatisfação com a performance da rotina.
Dessa forma, foi definido que o trabalho para ganho de performance na rotina ATFA050 será: executar o cálculo da depreciação via procedure sempre que esta estiver instalada.
Neste passo, será verificada a melhora de performance da rotina ATFA050 quando executada via procedure.
O teste será feito no mesmo período 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 calculo de depreciação (ATFA050) 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")

A regra atual gera um problema para o cliente, pois por estar com a procedure instalada ele imagina que já está utilizando a rotina por ela.
Porém, se o parâmetro mv_par01 estiver configurado diferente de 3 (mv_par01<>3), a rotina é executada pelo ADVPL padrão.
Portanto, deve ser criada uma regra para, caso a procedure esteja instalada, sempre executar a rotina por ela.
A alteração deve ser feita no ponto após a execução da rotina via procedure. Se o cliente escolheu contabilizar (mv_par01<3), deve ser chamada a contabilização dos itens depreciados.
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.
Fluxo resumido do processo:

Observações:
A chamada da contabilização deve ser feita somente para o processo de depreciação. Não deve contabilizar inclusões e outros movimentos, por exemplo.
Esta funcionalidade já existe no fonte CTBATF - Contabilização Offline do Ativo Fixo (Tipo de Função 02 - Depreciação).
Deve ser verificada a possibilidade de chamar as funções de contabilização 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, baseadas nas funções do CTBATF.

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>
|