Histórico da Página
...
- 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 formas de bloqueio de registros
- Ca100Incl e SimpleLock
a.1 Tirando Dúvidas
b. StarJob e RpcSetEnv
b.1 Tirando 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 lineNas 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 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 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.
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.
...
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 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 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 ser 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á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 esse registroesses 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 ).
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 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 terminaterminar, qual procedimento deverá ser tomado, já que provavelmente entrar 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_USADO | C | 1 | Doc Usado | Indicador 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_FIL | X6_VAR | X6_TIPO | X6_DESCRIC | X6_CONTEUD | X6_PROPRI |
---|---|---|---|---|---|
MV_CTFQTD | N | Quantidade 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.
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.
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
11. 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 -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.
12. 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
...
CTBA381.PRW
.PRW
13. 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> |