Árvore de páginas

Versões comparadas

Chave

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

...

b. StarJob e RpcSetEnv

b.1 Tirando fazer

Mensagem Única

  1. Tabelas Contábeis Envolvidas
  2. Parâmetros do Semáforo Contábil
  3. Funções de Semáforo
  4. Rotinas chamadoras das funções de Semáforo Contábil
  5. Rotinas chamadoras da função GravaLanc
  6. 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.

Dúvidas 

5. Solicitação de Coexistência de versões Protheus anteriores ou iguais a 12.1.31

a. Coexistência de diversas Versões Protheus

b. Tabela de Documento contábil, CTF

c. Não alteração dos fontes de outros módulos nos processos de Contabilizações off line , versões maiores ou iguais a P12.1.031

d. Fontes com ajustes no módulo Contábil 

6. Mensagem Única

7. Tabelas Contábeis Envolvidas

8. Desenvolvimento/Codificação

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

10. Funções de Semáforo 

11. Rotinas chamadoras das funções de Semáforo Contábil

12. Rotinas chamadoras da função GravaLanc

13. 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.Nas contabilizações on line nos processos dos módulos de controladoria esse controle de semáforo será retirado. Caso, algum módulo necessite de controle de semáforo em seus processos on line, estes deverão ser criados pelo processo da origem de acordo com as suas necessidades.


A 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.  Essa solução foi rejeitada pelo time da Engenharia que questionou a necessidade de uma tabela para controle de semáforo.


Após entendimento de 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.

...

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.

...

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.

a.1 Como fazer

Em relação às dúvidas e questionamentos sobre as funções Ca100Incl e SimpleLock  abaixo seguem os esclarecimentos.

O Bloqueio no conteúdo campo CTK_RECORI deve ser feito quando o vetor aFlagCTB estiver vazio. 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  ).

Image Removed

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

Em relação a definição e/ou regra de execução de alguns processos contábeis o Product Owner será o responsável.

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?

b.1 Como fazer

Criar um campo na tabela CTF para identificar se o Documento está sendo usado. CTF_USADO 

Criar uma função que chame a ProxDoc. 

As dúvidas relacionadas às funções StartJob e RpcSetEnv seguem abaixo

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. Como abaixo:

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

Considerar que conexão principal irá aguardar o término da execução do Job . Caso este não termine,  finalizar o job com a função KillUser.

KillUser ("UserName", "ComputerName", "ThreadID", "ServerName") - para obter 3 os parâmetros dessa função utilize GetUserInfoArray. Esta retorna um vetor multidimensional com as informações de cada um dos processos em execução no server. Para obter o "ServerName" utilizar a GetSrvInfo que retorna um vetor com as informações do Server.

Na situação em que o números dos Documentos não serão  sequenciais fica na pendência do Product Owner.

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 

...


Na última reunião, foi solicitada um estudo de viabilidades sobre a coexistência de várias versões do Protheus,  até que existam apenas versões iguais ou superiores a 12.1.31.  Foi solicitado também, o estudo para verificar a possibilidade  não efetuar nenhuma alteração nos outros módulos  que fazem contabilizações off line.

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.


Roteiro para aplicação das nova funcionalidades nas versões iguais ou maiores a 12.1.031.

1 - Aplicar o pacote de atualização de dicionário Código: 007415, caso o pacote não tenha sido incorporado a versão.

2 - Aplicar a atualização dos fontes ( ptm ) para utilização das novas funcionalidades.

3 - Executar o UPDDISTR da versão com o SDF diferencial da versão.

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, inicialmente, 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 executá-la e gerar os novos números de documentos contábeis e novamente tentar pegar um número de documento disponível e bloquear e marcar como usado.


Porém, na reunião com o time da Engenharia, foi solicitado a verificação da possibilidade de coexistência de várias versões do Protheus anteriores a P12.1.31 e da possibilidade de não alterar os fontes dos módulos de origem da contabilização.  

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.


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.


a.1 Tirando Dúvidas

Em relação às dúvidas e questionamentos sobre as funções Ca100Incl e SimpleLock  abaixo seguem os esclarecimentos.


O Bloqueio no conteúdo campo CTK_RECORI deve ser feito quando o vetor aFlagCTB estiver vazio. 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  ).

Image Added


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

Em relação a definição e/ou regra de execução de alguns processos contábeis o Product Owner será o responsável.


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 10 ( 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?



b.1 Tirando Dúvidas


Criar um campo na tabela CTF para identificar se o Documento está sendo usado. CTF_USADO 

Criar uma função que chame a ProxDoc. Olhar os pontos de entrada.

O Número de Documentos  CTF pode não ser sequencial especialmente quando a tabela CTF for compartilhada.


As dúvidas relacionadas às funções StartJob e RpcSetEnv seguem abaixo


A função RpcSetEnvdeverá ser chamada pois iremos abrir algumas tabelas contábeis. 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. Como abaixo:

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


Considerar que conexão principal irá aguardar o término da execução do Job . Caso este não termine,  finalizar o job com a função KillUser.


KillUser ("UserName", "ComputerName", "ThreadID", "ServerName") - para obter 3 os parâmetros dessa função utilize GetUserInfoArray. Esta retorna um vetor multidimensional com as informações de cada um dos processos em execução no server. Para obter o "ServerName" utilizar a GetSrvInfo que retorna um vetor com as informações do Server.


Na situação em que o números dos Documentos não serão  sequenciais fica na pendência do Product Owner.

05. Solicitação de Coexistência de versões Protheus anteriores e iguais ou superiores a P12.1.031

a. Coexistência de diversas Versões Protheus

Para a coexistência de versões anteriores e iguais ou maiores a P12.1.031  do Protheus deverão ser feitas inúmeras proteções nos fontes contábeis, utilizando a função GetRpoRelease(). 

Para versões anteriores da P12.1.31, a criação do arquivo de semáforo contábil na pasta system será mantida. 

Para versões maiores ou iguais a a P12.1.031, o arquivo de semáforo contábil será substituída por LockByName.


Tempo para efetuar e retirar o LockByName em maquina local, lembrando que esse tempo depende de infra, rede , internet, latência, etc.

Em 3 execuções de 1.000 LockByName e UnlockByName 41 segundos

Em 3 execuções de 10.000 LockByName e UnlockByName o tempo teve variação maior

Execução 1 - 14, 7 minutos

Execução 2 - 21, 35 minutos

Execução 3 - 24,16 minutos


b. Tabela de Documento contábil, CTF

A geração do número do documento contábil utilizando um Job estará disponível somente a partir da release 12.1.31. Para diminuir os impactos nos demais fontes, o nome da função que gera o número do documento contábil não foi alterada, continua como ProxDoc. Está irá redirecionar para a função CallProxDc para releases iguais ou superiores a 12.1.31 e para OldProxDoc para versões anteriores a essa versão do Protheus


Esta função é chamada nos fontes abaixo:

CTBA102.PRW

CTBA103.PRW

CTBA105.PRW

CTBA211.PRW

CTBA220.PRW ( Procedures )

CTBA281.PRW

CTBA340.PRW

CTBA380.PRW

CTBA410.PRW ( Localizações )

CTBM300.PRW

CTBXATU.PRW

CTBXSEM.PRW

CTBXVLD.PRW


c. Não alteração dos fontes de outros módulos nos processos de Contabilizações off line , versões maiores ou iguais a P12.1.031

Os outros módulos não serão obrigados a alterar os seus fontes de contabilização Off Line.  Essa foi solicitação dos Product Owners de outros módulos. Isso poderá causar lentidão. Pois em algumas contabilizações, os módulos de origem, colocam algumas funções contábeis dentro de transação, por exemplo, a Ca100Incl e  não passam o array aFlagCtb. 

A solicitação para que essa função não fique dentro de  transação é porque que ela pode abrir uma tela de interação com o usuário e isso não é recomendável que fique dentro de uma transação. 

Esta função tem a própria transação e, se o array aFlagCTB for recebido nessa função com os recnos  das linhas a serem marcados na origem como contabilizados, isso será feito na mesma transação de gravação dos lançamentos contábeis (CT2).


d. Fontes com ajustes no módulo Contábil

Com a solicitação de coexistência de várias versões do Protheus e também da solicitação de PO's de outros módulos de não alterar os fontes de contabilização off line, houve a necessidade de reavaliar e buscar por outras soluções o que impactou em novos ajustes em nossos fontes e refazer todos os testes em versões anteriores e simulando a versão 12.1.031 com a compilação dos mesmos fontes para esses trabalhos.

Voltamos os nomes das funções que haviam mudado para os nomes originais que estão na pasta Master para que não afetem versões anteriores a '12.1.031'. 


Os fontes do core alterados e suas alterações para que estes fiquem na pasta Master do TFS. CTBXSEM, CTBXATU, CTBA1A105.


d.1 - CTBXSEM

Criada a variável estática __lRelease no fonte CTBXSEM.PRW para identificar a versão do release utilizado. Se .T.a release for maior ou igual a 12.1.031, se  .F. , release anterior 12.1.031.

Outra variável estática __aChaveBlock foi criada e inicializada com NIL. A rotina CanProcItvl irá 'setar' com .T. e gravar todas as chaves bloqueadas pela função. Será esvaziada na FreeProcItvl e 'setada' como NIL

ProxDoc - Esta função é a responsável por gerar o próximo documento. Esta, agora, irá redirecionar para CallProxDc quando __lRelease for .T. e para OldProxDoc, quando for .F.. Esta funções irão fazer as respectivas sub-chamadas.


CanProcItvl/FreeProcItvl 

CanProcItvl(dDtVldDe, dDtVldAte, cFilDe, cFilAte, cChave, lSerial, aSelFil,  cEmpProc)

Esta função foi ajustada para utilizar LockByName.  Esses bloqueios serão feitos antes de iniciar o processo de contabilização. Será feito o bloqueio de acordo com os parâmetros recebidos. Caso receba, um range de filial e de período, serão feitos bloqueios em  filial+data, ou seja, filial e em cada um dos dias do período recebido no parâmetro. Todos estes parâmetros têm DeFault.

A sugestão é que receba sempre o range de datas ,as filiais e o parâmetro cChave  que é o nome do programa.

Mesmo que o parâmetro lSerial não seja passado, caso esteja na release 12.1.031, será feito por lockbyname. Caso esteja em versões anteriores a citada continua criando arquivo na pasta system.


Nesta função, em azul, está os parâmetros inseridos,  lSerial é identificador de versão 12.1.031 ou menor. Se .T., trabalha de forma independente das funções CtbSerial I/CtbSerialF, aSelfil deve ser passado quando o processo tiver a função de seleção de filiais, cEmpProc quando existe necessidade de bloquear um grupo de empresa.


CanProcItvl(

dDtVldDe - Data Inicial do processamento

 dDtVldAte - Data Final do processamento

cFilDe -  Filial Inicial a processar

cFilAte -  Filial Final a processar  - Caso a rotina tenha seleção de filiais, cFilDe /cFilAte recebe  o range das filiais selecionada array das filiais selecionadas 

cChave - Chave/nome do programa chama a função. Tamanho máximo chave 

lSerial - Se .T., recebe demais parâmetros e esta função trabalha de forma independente das funções  CtbSerialI e CtbSerialF. Se Versão anterior a  P12.1.31 trabalha com arquivo de semáforo contábil no system.   

aSelFil - Range de filiais da função de seleção de filiais.

cEmpProc - Aqui informar o Grupo de empresas, SOMENTE QUANDO O PROCESSAMENTO ENVOLVER DOIS OU MAIS GRUPOS DE EMPRESAS. Exemplo: Consolidação Contábil, InterCompany


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

07. Tabelas Contábeis Envolvidas

CTF - Capa do Lote Contábil

Nesta tabela criar um campo para indicar se o documento já está em uso por outra conexão.

Campo

X3_CAMPO 

Tipo

X3_TIPO

Tamanho 

X3_TAMANHO

Decimal

X3_DECIMAL

Picture

X3_PICTURE

Título 

X3_TITULO

Descrição

X3_DESCRIC

Grupo Cpos

X3_GRPSXG

Usado

X3_USADO

Obrigatório

X3_OBRIGAT

Browse

X3_BROWSE

Opções 

X3_F3

When

X3_WHEN

Relação

X3_RELACAO

Visual

X3_VISUAL

Val Sistema

X3_VALID

Contexto
X3_CONTEXT
CTF_USADOC1

Doc UsadoIndicador de uso do Documento Contábil

X


N




R


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


SX6 - Tabela de parâmetros do sistema.

Será criado um novo parâmetro para definir a quantidade de documentos a serem criados pelo Job. Assim poderá ser aumentado se houver demanda por mais documentos.


X6_FILX6_VAR X6_TIPOX6_DESCRICX6_CONTEUDX6_PROPRI

MV_CTFQTDNQuantidade de Documentos a serem criados pelo Job

10

S



08. Desenvolvimento/Codificação

Alterar a função ProxDoc para redirecionar para a função CallProxDc se versão maior ou igual  P12.1.31.  Esta irá chamar  a NewProxDoc que irá tentar bloquear um número de documento.  Caso consiga o bloqueio, irá gravar no novo campo, CTF_USADO, um indicador de que o documento já foi usado, o carácter 'S' e mantê-lo bloqueado até a gravação dos lançamentos contábeis (CT2). Caso não consiga, irá inciar um Job para gravar 10 números de documentos e, novamente,  tentar bloquear um número de documento.

Tudo isso deverá ser codificado utilizando as funções acima citadas, SimpleLock , StartJob.


Primeiro, logo que função CTB_INCL, for chamada , bloquerar os registros, que vierem no vetor aFlagCTB ou do conteúdo do CTK_RECORI utilizando SimpleLock. 

Image Added


Image Added

Garantir que no final, após marcar como contabilizado na origem,  os registros serão desbloqueados, levando em consideração os quesitos de estar dentro ou fora de transação descritos no tópico Tirando Dúvidas.

Image Added



Segundo, criar uma função, por exemplo a citada ,CallProxDc.

Essa função irá chamar a função ProxDoc que tentará bloquear um número de documento.  Caso consiga o bloqueio , irá gravar no novo campo, CTF_USADO, um indicador de que está usado. Pode ser o carácter 'S' e mantê-lo bloqueado até a gravação dos lançamentos contábeis (CT2). Caso não consiga, esta função exemplo, FunCallProx, deverá inciar um Job para gravar N números de documentos e ,após a gravação dos N números de documentos, novamente retornar a função ProxDoc  para tentar bloquear um número de documento para a gravação do documento contábil.

Em Relação ao número de documentos a gerar, decidimos que será definido por um parâmetro., por exemplo, MV_CTFQDT.


A forma que as funções devem ser chamadas e usadas estão do tópico b.1 Tirando Duvidas

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

...


Novo parâmetro para indicar a quantidade de documentos ( CTF_DOC ) a serem criados pelo job. Assim poderá ser aumentado de acordo com a demanda de documentos.

10

...

Funções do Semáforo Contábil

CtbSerialI

CtbSerialF

CtbFimSemaforo

CtbIniSemaforo

CanProcItvl

FreeProcItvl

...

11Rotinas 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 -Não tratar.. - DESCONTINUADO

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.

...


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

...



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