CONTEÚDO

  1. Visão Geral
  2. Exemplo de utilização
  3. Escolha do Mecanismo para Remoção do Semáforo
  4. Pontos de atenção das funções escolhidas e nas formas de bloqueio de registros
    1. Ca100Incl e SimpleLock
    2. StarJob e RpcSetEnv
    3. Mensagem Única
  5. Tabelas Contábeis Envolvidas
  6. Parâmetros do Semáforo Contábil
  7. Funções de Semáforo
  8. Rotinas chamadoras das funções de Semáforo Contábil
  9. Rotinas chamadoras da função GravaLanc
  10. Rotinas chamadoras da função Ca100incl


01. Visão Geral

Com as evoluções tecnológicas do Protheus recebemos a solicitação de remoção do arquivo de semáforo contábil. Para que isso aconteça, surgiu a necessidade de um estudo detalhado das funcionalidades das funções a serem utilizadas e recebemos orientações da área de Tecnologia da TOTVS.


Hoje, na contabilização de integrações existe a função LockByName para o controle de execução desse processo. Este processo cria um registro de identificação do processo na tabela de semáforo contábil, faz o bloqueio deste registro e já libera o LockByName do processo. O bloqueio do registro da tabela do semáforo Contábil é retirado e excluído dessa tabela pelo processo que o bloqueou ao término do processamento. Existem também o controle das contabilizações on line.


A princípio, como primeira solução, fomos orientados a utilizarmos apenas a função LockByName, sem a criação da tabela de semáforo contábil. Com isto surgiram questões como a ocorrência de um bombardeio dessa função e a preocupação de ocasionar uma lentidão generalizada no sistema e/ou a perda de dados. Outra questão trazida a tona foi a função Ca100Incl ser chamada dentro de transação. 

Como segunda solução, a sugestão da  Controladoria,  pela perspectiva de Produto, era a de criar a tabela do semáforo contábil no dicionário de dados, assim não impactaria no que hoje já existe. 


Por fim, após entendimento de todas as questões acima citadas entre as áreas de Controladoria e Tecnologia, fomos orientados a uma terceira solução.

Primeiro, não alterar o local das chamadas da função Ca100Incl dentro do ERP, porém receber o parâmetro aFlagCtb preenchidos com os devidos valores para que os registros contabilizados possam ser marcados como contabilizados nos módulos origem.

Segundo utilizar a função Starjob para pegar o número do documento contábil.

02.Exemplo de Utilização

Esta funcionalidade será utilizada em todos os módulos do ERP em que existe contabilização, Mensagem Única e dentro do próprio módulo Contabilidade Gerencial.

03. Escolha do Mecanismo para Remoção do Semáforo

Após discussões das questões de performance, concorrência, perda de dados, funções dentro de transações, fomos orientados a adotar a solução abaixo que serão feitos em dois pontos.


Na função de contabilização Ca100Incl, na contabilização de integrações, receber do módulo origem o vetor aFlagCTB preenchidos com as devidas posições, aFlagCTB{  'campo da tabela a ser marcado', 'string a gravar', 'alias da tabela a marcar', 'recno a ser marcado' }  para todos os registros de origem a serem contabilizados. Também não alterar o local da chamada dessa função dentro do ERP, podendo algumas chamadas ficarem dentro de transação.  


Outro ponto é na chamada da função que gera o número do próximo documento contábil, ProxDoc.  Como esta função pode estar dentro de uma transação, caso ela não consiga pegar um número de documento contábil disponível, utilizar a função Starjob para gerar 5 ( definido em conjunto com time TEC ) números de documento contábil e novamente tentar pegar um número de documento disponível e bloquear e marcar como usado.

04. Pontos de atenção das funções escolhidas e nas formas de bloqueio de registros


a. Ca100Incl e SimpleLock

Na primeira situação em que a função Ca100Incl é chamada recebendo o vetor aFlagCTB, os elementos do vetor devem ser bloqueados para serem no final atualizados na origem.  O conteúdo de alguns campos da tabela CTK também deverão ser bloqueados, como o CTK_TABORI e CTK_RECORI, pois nem sempre o conteúdo destes campos da tabela CTK são os mesmos do vetor aFlagCTB.  Na grande maioria das vezes serão,  neste caso, se utilizarmos a função SimpleLock ou uma outra que não utilize o LockByName ocultamente, duas vezes, devemos certificar que não ocorrerá nenhum problema. Também devemos certificar que  uma outra conexão não consiga pegar esses registros.


Na segunda situação da  chamada da função Ca100Incl, deve ser dada atenção e aprofundar o entendimento dos fontes onde o vetor aFlagCTB não é passado. Isso ocorre em algumas rotinas de contabilização de integração e dentro do próprio módulo Contábil. Também verificar e/ou identificar para qual outra finalidade esse vetor é utilizado. Por exemplo, se pode ser passadas tabelas de usuário e se existe algum tratamento específico nesta situações.

Outro ponto, é onde a função Gravalanc é chamada. Essa função é chamada em alguns pontos em que um procedimento e/ou regra de execução deverá ser definido, estamos falando das rotinas de rateio contábil, consolidação, Apuração de Resultados. Por exemplo, se faz sentido processar ao mesmo tempo os mesmos rateios em períodos diferentes mas subsequentes onde os lançamentos do primeiro influenciam na do segundo.


b. Starjob e RpcSetEnv

A função ProxDoc que verifica qual o número do próximo documento contábil disponível e faz o seu bloqueio pode estar dentro de uma transação. Por isso, caso ela não consiga pegar um número de documento contábil disponível,  devemos criar uma função utilizando a função Starjob para gerar 5 ( definido em conjunto com time TEC ) números de documento contábil e voltar para a função ProxDoc até que consiga pegar e bloquear um número de documento disponível.  


Neste caso existe alguns quesitos a serem verificados. Primeiro, se a função StarJob pode ser executada sem antes chamar a função RpcSetEnv.  Pois essa última faz a abertura de um novo ambiente, o que poderia causar lentidão.

Outra questão, se o job iniciado não terminar, qual procedimento deverá ser tomado, já que provavelmente entrará em um 'loop' infinito.

Nessa situação em que o número do documento será gerado por um Job, poderá e provavelmente ocorrerá de o número do documento não ser sequencial. Quais são ou existem restrições em relação a geração de números de documentos não sequenciais?


c . Mensagem Única

Este é um outro ponto que necessitará de muito estudo e conhecimento das funcionalidades do processo de integração de mensagens únicas. Pois a inclusão de lançamentos contábeis, pode vir de outras marcas que não seja Protheus.

05. Tabelas Contábeis Envolvidas

CTF - Capa do Lote Contábil

CTK - Tabela de Contraprova gerada pela função Detprova 


06. Parâmetros do Semáforo Contábil

MV_CTBSER    - “1” -  ligado; “2” desligado; “3” modo teste.

MV_CTBSERT - tempo em milissegundos.

MV_CTBSERD – “.T.” permite exclusão do arquivo; “.F.” Não exclui.

MV_CTBSETZ – “.T.” permite zap/truncate; “.F.” não permite

MV_CT2SMLT – “.T.” configuração para alterações(opção diferente de inclusão) simultâneas.

MV_CTBNFSE -  “1”- ligado, “2”- desligado

07. Funções do Semáforo Contábil

CtbSerialI

CtbSerialF

CtbFimSemaforo

CtbIniSemaforo

CanProcItvl

FreeProcItvl

08. Rotinas chamadoras das funções do Semáforo Contábil

ATFA371.PRX – Contabilização Off line do Ativo

CTBA190.PRW- Reprocessamento Contábil

CTBA210.PRW – Apuração de Resultados

CTBA215.PRW – Estorno da Apuração de Resultados

CTBA220.PRW – Consolidação Geral

CTBA230.PRW – Consolidação Configurada

CTBA280.PRW – Gerar lançamentos referentes ao rateio off line cadastrado.

CTBA281.PRW - Este programa calcula os rateios Off-Line cadastrados. (Rateio por combinacoes)    

CTBA340.PRW – Cálculo de variação monetária ( Translation Effect).

CTBA350.PRW – Efetivar pré-lançamentos. “ON”

CTBA370.PRW – Recalcular valor dos lançamentos contábeis

CTBA380.PRW – Variação Monetária – Apurar diferença Cambial entre as moedas.

CTBA381.PRW – Variação Monetária - Localizações.

CTBA500.PRW – Contabilização txt. “ON”

CTBXATU.PRW – Grava lançamentos Contábeis – CT2

CTBXSEM.PRW – Funções de Semáforos

CTBANFE.PRW – Processamento da Contabilização Off line de Documentos de Entrada.

CTBANFS.PRW – Processamento da Contabilização Off Line de Documentos de Saída.


09. Rotinas chamadoras da função GravaLanc

CTBA211.PRW

CTBA220.PRW

CTBA231.PRW

CTBA280.PRW

CTBA281.PRW

CTBA380.PRW

CTBA381.PRW

CTBA410.PRW

CTBM300.PRW

CTBXATU.PRW

CTBXFUNC.PRW



10. Rotinas chamadoras da função Ca100incl

AR_C200A.PRX

AR_C230A.PRX

ATFA010A.PRW

ATFA012.PRW   

ATFA030.PRX

ATFA031.PRX

ATFA035.PRX

ATFA036.PRW

ATFA036L.PRW

ATFA036M.PRW

ATFA040.PRX

ATFA045.PX

ATFA050.PRX

ATFA060.PRX

ATFA070.PRX

ATFA081.PRX

ATFA110.PRW

ATFA150.PRX

ATFA170.PRX

ATFA171.PRX

ATFA175.PRW

ATFA220.PRX

ATFA250.PRX

ATFA251.PRX

ATFA350.PRW

ATFA360.PRW

ATFA370.PRX

ATFA371.PRX

ATFA380.PRW

ATFA430.PRW

ATFA440.PRW

ATFA450.PRW

ATFA490.PRW

CDAA020.PRW

CNTA090.PRW

CNTA100.PRW

CNTA120.PRW

CNTA121.PRW

CNTA290.PRW

CNTXFUN.PRX

CONA100A.PRX

CTBA105.PRW

CTBA382.PRW

CTBA500.PRW

CTBA750.PRW

CTBAATF.PRW

CTBAFIN.PRW

CTBANFE.PRW

CTBATUR.PRW

FIN887EvenDEF.prw

FINA040.prw

FINA050.prw

FINA060.prw

FINA061.PRW

FINA070.PRW

FINA080.PRW

FINA090.PRW

FINA091.PRW

FINA097.PRW

FINA100.PRW

FINA110.PRW

FINA136A.PRW

FINA171.PRW

FINA181.PRW

FINA182.PRW

FINA183.PRW

FINA190.PRW

FINA191.PRW

FINA200.PRW

FINA241.PRW

FINA250.PRW

FINA280.PRW

FINA290.PRW

FINA300.PRW

FINA317.PRW

FINA330.PRW

FINA340.PRW

FINA350.PRW

FINA370.PRW

FINA374.PRW

FINA375.PRW

FINA376.PRW

FINA377.PRW

FINA381.PRW

FINA382.PRW

FINA390.PRW

FINA430.PRW

FINA450.PRW

FIAN460.PRW

FINA460A.PRW

FINA470.PRW

FINA473A.PRW

FINA550.PRW

FINA560.PRW

FINA565.PRW

FINA590.PRW

FINA645.PRW

FINA677.PRW

FINA846.PRW

FINA940.PRW

FINA950.PRW

FINA960.PRW

FINXAPI.PRX

ATFA031.PRX

ATFA081.PRX

ATFA360.PRW

FINA014.PRX

FINA074.PRW

FINA084.PRW

FINA085A.PRW

FINA85R.PRW

FINA086.PRW

FINA087A.PRW

FINA088.PRW

FINA089.PRW

FINA098.PRW

FINA099.PRW

FINA310.PRW

FINA371.PRW

FINA471.PRW

FINA650.PRW

FINA840.PRW

FINA841.PRW

FINA845.PRW

FINA846.PRW

FINA850.PRW

FINI055.PRW

LOJA010A.PRW

LOJA140.PRX

LOJA220A.PRW

LOJA0330.PRX

LOJA480.PRW

LOJA601.PRW

LOJA720.PRW

LOJR130.PRX

LOJXFUNC.PRW

WMSDTCESTOQUEENDERECO.PRW

OMSA014.PRW

OMSA314.PRW

OGA360LIQ.PRW

TMSA070.PRW

TMSA240.PRW

TMSA250.PRW

TMSA740.PRW

TMSA840.PRW

CNTA090.PRW

CNTA0100.PRW

CNTA120.PRW

CNTA121.PRW

CNTA290.PRW

CNTXFUN.PRX

SIGACUSA.PRX

MATA100.PRW

MATA103.PRW

MATA116.PRW

MATA119.PRW

MATA120.PRW

MATA160.PRW

MATA235.PRW

CTBANFE.PRW

MATA240.PRW

MATA241.PRW

MATA242.PRW

MATA243.PRW

MATA260.PRW

MATA261.PRW

MATA340.PRW

TURA034.PRW

TURA039.PRW

TURA042A.PRW

TURA061.PRW

TURXFUN.PRW

JURA112.PRW

JURA265.PRW

JURA265B.PRW

FISA173.PRW

AR_C200A.PRX

AR_C230A.PRX

MATA462T.PRW

MATA901.PRW

CTBANFS.PRW

FATA350.PRX

MATA460.PRX

MATA461.PRX

MATA500.PRX

MATA520.PRX

MATA521.PRX

MATA530.PRX

MATN410.PW

TECA460.PRX

TECA480.PRX

LOCXNF.PRW

MATA123.PRX

MATA468N.PRW

PLSCTB10.PRW

PLSCTBFUN.PRW

MATA330.PRX

MATA333.PRX

MATA102.PRW

GPEM110.PRX

GPEM110A.PRX

EICDUPL.PRW

MNTUTIL.PRW

FECHAMES.PRW

MATA250.PRX

MATA680.PRX

MATA681.PRX

MATA682.PRW

MATA685.PRX


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