Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

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çãodas 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.


O Bloqueio no conteúdo campo CTK_RECORI deve ser feito quando o vetor aFlagCTB estiver vazio. E quando o aFlagCTB estiver preenchido efetuar o bloqueio pelo conteúdo deste vetor.


Em relação a SimpleLock não há problema em chamar a função duas vezes e não utiliza a função LockByname de forma oculta. Único cuidado a ser tomado é no momento de tirar o bloqueio de um  registro com a função MsRUnlock.  Caso esteja dentro de transação não há necessidade de executar essa função ( segundo a TEC não existe problema  ).


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.


Não foi encontrada uma outra finalidade para vetor aFlagCTB a não ser a contabilização.


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.

Este ponto será elucidado pelo Product Owner.


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.

Não há necessidade de chamar a função RpcSetEnv. Na função StarJob, no segundo parâmetro, informar GetEnvServer(), assim o job será executado no mesmo ambiente (environment) da conexão (thread) atual. Informar no terceiro parâmetro, true, assim a conexão pai espera a finalização do job. Chamar como abaixo:

StarJob("cNomeJob", GertEnvServ(), .T., "Parâmetros a serem passados para o JOB" ).


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

Existe a possibilidade  finalizar a conexão de uma sessão com a função KillUser.


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?

Documentos não sequenciais - pendência PO.


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.

Não foi verificado nenhum problema em mensagem única. Todos os documentos terão o bloqueios feitos da mesma forma.

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

CTBANFS.PRW

CTBATUR.PRW

EICDUPL.PRW

FATA350.PRX

FECHAMES.PRW

FIN887EvenDEF.prw

FINA014.PRX

FINA040.PRX

FINA050.PRX

FINA060.PRX

FINA061.PRX

FINA070.PRX

FINA074.PRW

FINA080.PRX

FINA084.PRW

FINA085A.PRW

FINA085R.PRW

FINA086.PRW

FINA087A.PRW

FINA088.PRW

FINA089.PRW

FINA090.PRX

FINA091.PRX

FINA097.PRW

FINA098.PRW

FINA099.PRW

FINA100.PRX

FINA110.PRX

FINA136A.PRW

FINA171.PRX

FINA181.PRX

FINA182.PRX

FINA183.PRX

FINA190.PRX

FINA191.PRX

FINA200.PRX

FINA241.PRX

FINA250.PRX

FINA280.PRW

FINA290.PRW

FINA300.PRX

FINA310.PRW

FINA317.PRW

FINA330.PRX

FINA340.PRX

FINA350.PRX

FINA370.PRX

FINA371.PRW

FINA374.PRX

FINA375.PRX

FINA376.PRX

FINA377.PRX

FINA378.PRX

FINA381.PRX

FINA382.PRX

FINA390.PRX

FINA430.PRX

FINA450.PRX

FIAN460.PRX

FINA460A.PRW

FINA470.PRX

FINA471.PRW

FINA473A.PRX

FINA550.PRW

FINA560.PRW

FINA565.PRX

FINA590.PRX

FINA645.PRW

FINA650.PRW

FINA677.PRW

FINA840.PRW

FINA841.PRW

FINA845.PRW

FINA846.PRW

FINA940.PRW

FINA950.PRW

FINA960.PRW

FINI055.PRX

FINXAPI.PRX

FINXINC.PRX

FINXOLD.PRX

FISA048.PRW

FISA0173.PRW

FISA300.PRW

FISX001.PRW

FISXAPUR.PRX

GPEM110.PRX

GPPEM110A.PRX

JURA112.PRX

JURA265.PRW

JURA265B.PRW

LOCXNF.PRW

LOJA010A.PRW

LOJA140.PRX

LOJA220A.PRW

LOJA0330.PRX

LOJA480.PRW

LOJA601.PRW

LOJA720.PRW

LOJR130.PRX

LOJXFUNC.PRW

MATA100.PRW

MATA102.PRW

MATA103.PRW

MATA103FIN.PRW

MATA116.PRW

MATA119.PRW

MATA120.PRX

MATA123.PRX

MATA160.PRX

MATA235.PRX

MATA240.PRX

MATA241.PRX

MATA242.PRX

MATA243.PRW

MATA25.0.PRX

MATA260.PRX

MATA261.PRX

MATA330.PRX

MATA340.PRX

MATA461.PRX

MATA462T.PRW

MATA468N.PRX

MATA500.PRX

MATA521.PRX

MATA530.PRX

MATA680.PRX

MATA681.PRX

MATA682.PRX

MATA685.PRX

MATA901.PRX

MATA905.PRX

MATA906.PRX

MATA910.PRX

MATA920.PRX

MATA997.PRX

MATN410.PRW

MNTUTIL.PRX

OGA360LIQ.PRW

OMSA014.PRW

OMSA314.PRW

PLSCTB10.PRW

PLSCTBFUN.PRW

SIGACUSA.PRX

TECA460.PRX

TECA480.PRX

TMSA070.PRW

TMSA240.PRW

TMSA240.PRW

TMSA250.PRW

TMSA740.PRW

TMSA840.PRW

TURA034.PRW

TURA039.PRW

TURA042A.PRW

TURA061.PRW

TURXFUN.PRW

WMSDTCEstoqueEndereco.prw




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