Histórico da Página
CONTEÚDO
- Visão Geral
- Exemplo de utilização
- Escolha do Mecanismo para Remoção do Semáforo
- Pontos de atenção das funções escolhidas e nas fomas de bloqueio de registros
- Ca100Incl e SimpleLock
- StarJob e RpcSetEnv
- Mensagem Única
- Ca100Incl e SimpleLock
- Tabelas Contábeis Envolvidas
- Parâmetros do Semáforo Contábil
- Funções de Semáforo
- Rotinas chamadoras das funções de Semáforo Contábil
- Rotinas chamadoras da função GravaLanc
- 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 fomas 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 ser no final atualizados. 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á, 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 esse registro.
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 termina, 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
CTBA231.PRW
CTBA280.PRW
CTBA281.PRW
CTBA380.PRW
CTBXATU.PRW
CTBXFUNC.PRW
CTBA381.PRW
CTBA410.PRW
10. Rotinas chamadoras da função Ca100incl
ATFA010A.PRW
ATFA012.PRW
ATFA030.PRW
ATFA035.PRW
ATFA036.PRW
ATFA036L.PRW
ATFA036M.PRW
ATFA040.PRW
ATFA045.PRW
ATFA050.PRW
ATFA060.PRW
ATFA070.PRW
ATFA110.PRW
ATFA150.PRW
ATFA170.PRW
ATFA171.PRW
ATFA175.PRW
ATFA220.PRW
ATFA250.PRW
ATFA251.PRW
ATFA350.PRW
ATFA370.PRW
ATFA371.PRW
ATFA380.PRW
ATFA430.PRW
ATFA440.PRW
ATFA450.PRW
ATFA490.PRW
CDAA020.PRW
CONA100A.PRX
CTBA105.PRW
CTBA382.PRW
CTBA500.PRW
CTBA750.PRW
CTBAATF.PRW
CTBAFIN.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
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> |