quarta-feira, 2 de julho de 2014

Documentando Fontes ADVPL com o ProtheusDoc

Bom dia Galera,
O objetivo do ProtheusDOC é autodocumentar os programas-fontes escritos em Adv/PL.
O ProtheusDOC, é uma forma estruturada de escrever comentários, sobre funções, classes, métodos ou qualquer outro elemento de um programa-fonte Adv/PL, que descreve a utilização deste elemento.
Inicialmente os documentos serão gerados no formato HTML através de modelos customizáveis.
Estes modelos serão criados utilizando-se da tecnologia desenvolvida pela Apache Velocity.
A estrutura básica é formada por um bloco de comentários, com um identificador especial no seu início (/*/{Protheus.doc}), seguido de um comentário sucinto, seguido ou não por marcadores especiais. Algo semelhante a:
/*/{Protheus.doc} areaQuad
Efetua o cálculo da área de alguns quadriláteros.

@author José Silva
@since 20/11/2012
@version P10 R4

@param nBase, numérico, Medida do lado ou da base
@param [nAltura], numérico, Medida da altura
@param [nBaseMenor], numérico, Medida da base menor (trapézios)

@return numérico, Área calculada
/*/
User Function areaQuad(nBase, nAltura, nBaseMenor)
...

Uso:
Adicione um bloco de comentário do ProtheusDOC no elemento que você deseja descrever em seu programa-fonte.
Você pode adicionar um comentário rapidamente utilizando a combinação, CTRL + ALT + D, mantendo o cursor sobre o nome da função, por exemplo.

Em seguida, para iniciar o assistente de geração do ProtheusDOC, clique em "Arquivo" > "Novo" > "Outras...". Expanda a seção "TOTVS Tools", escolha a opção "ProtheusDoc Generator" e clique em "Avançar >" (Next >).

Localize e selecione o programa-fonte que será documentado em seguida clique em "Avançar >" (Next >).

Clique em "Concluir" (Finish) para gerar a documentação utilizando o template padrão e o local padrão de exportação (C:\export).

Localize a pasta de exportação. Ela apresentará a mesma estrutura do projeto onde o programa-fonte está localizado.

Abra o arquivo HTML em seu navegador preferido para ler a documentação gerada.

Caso deseje, você pode criar um template customizado adicionando, removendo e/ou alterando a estrutura utilizando o modelo do Velocity.
*IMPORTANTE* O arquivo do template deve estar com o encoding UTF-8.

Ao gerar a nova documentação, selecione o template customizado e/ou defina um local alternativo para a exportação da documentação.

Da mesma forma anterior, localize a pasta de exportação alternativa.

Abra o arquivo HTML em seu navegador preferido para ler a documentação customizada que foi gerada.


Espero ter ajudado!

Driblando a mensagem de erro ‘Improper Function Use'

Bom dia Galera,
Poucos seguem a boa prática de criar funções USER, com no minimo 8 caracteres,sabendo que de acordo com a especificação da linguagem AdvPL, uma USER FUNCTION é identificada por seus 10 primeiros caracteres, por exemplo:
A <User Function DDDFAT06A> será traduzida pelo pré-compilador como: <U_DDDFAT06A>, onde o 'A' se perde, por ser o 11º caractere, devido ao limite de tamanho de nome.

U
_
D
D
D
F
A
T
0
6
A

Sabendo deste limite para nomes de funções USER, existe um pequeno 'bug' na validação utilizada pela Totvs para identificar/definir se uma função é 'improper function use' ou não.
Utilizando a AxCadastro('NOMETABELA') pelo campo formulas, a seguinte mensagem será retornada:


Mas se utilizarmos um recurso, onde burlamos a validação será possível a execução!!

A solução é:
Para toda função com tamanho de 10 caracteres ou mais e que for acusada de 'improper' basta adicionar o 11º caractere, por exemplo em uma chamada a AxCadastro('NOMETABELA') seria adicionado o X, ficando a chamada como AxCadastroX('TABELA') burlando assim a validação de ‘improper functions'.


Obs.:
Isso não será valido para funções USER FUNCTIONS (Funções Customizadas) com nome menor que 10 caracteres, pois a mesma não será encontrada no RPO e será retornada mensagem informando que a função não existe no repositório.

Espero ter ajudado!

Descriptografar campos USERLGI - USERLGA via SQL

Bom dia Galera, 
Para verificar quem foi o usuário que incluiu/alterou algum registro sem a necessidade de acessar o log do Protheus, utilizem a seguinte query:

SELECT substr(E2_userlgi, 3, 1) || substr(E2_userlgi, 7, 1) ||
        substr(E2_userlgi, 11, 1) || substr(E2_userlgi, 15, 1) ||
        substr(E2_userlgi, 2, 1) || substr(E2_userlgi, 6, 1) ||
        substr(E2_userlgi, 10, 1) || substr(E2_userlgi, 14, 1) ||
        substr(E2_userlgi, 1, 1) || substr(E2_userlgi, 5, 1) ||
        substr(E2_userlgi, 9, 1) || substr(E2_userlgi, 13, 1) ||
        substr(E2_userlgi, 17, 1) || substr(E2_userlgi, 4, 1) ||
        substr(E2_userlgi, 8, 1) Usuario
FROM TABELA 
WHERE
  CONDIÇÃO


Na imagem abaixo utilizamos a query para identificar o usuário que incluiu e o ultimo que alterou os títulos no contas a pagar da filial '01' com emissão a partir de 01/06/2014.




*Obs.:   USERLGI --> Usuário que incluiu o registro.
            USERLGA --> Ultimo usuário que alterou o registro.

Espero ter ajudado!

terça-feira, 1 de julho de 2014

Simulador de Coletor de Dados para módulo SIGAACD - Protheus

Boa tarde, 
Logo na implementação do módulo SIGAACD - Automação e Coleta de Dados, nos deparamos com a necessidade de utilizar um Coletor de Dados para testar/validar a integração do coletor com as rotinas no módulo.
A Totvs disponibiliza dois programas para que a implementação seja feita sem a necessidade de um Coletor de Dados fisicamente falando. Segue:

VTDEBUG - Programa para Simular/Debugar Rotinas para Coletor de Dados(ACD)

*Basta executar o comando VTDEBUG nos parâmetros iniciais do protheus:




Após isso abrirá a tela com o Simulador do Coletor de Dados:




Também podemos simular um coletor de dados ativando a seção [Telnet] no arquivo appserver.ini, após isso basta entrar no prompt e digitar o comando: Telnet ipdoserver e irá acessar o módulo ACD conforme imagem abaixo:


Obs: Isso é possivel pois a comunicação entre o ERP e o Coletor é feita através do protocolo VT100 que por sua vez é o protocolo do Telnet.





VTMONITOR - Programa para monitorar os Usuários/Rotinas que estão conectados via Coletor de Dados.













Espero ter Ajudado!


Tipos de máscaras para tratar entradas de dados no Protheus

Boa Tarde,
Sempre que vamos criar algum campo surge algumas dúvidas como: qual máscara devo usar? esse campo irá aceitar números? quais/quantos números? o conteúdo alfabético será maiúsculo ou minusculo? dentre outras...

Para isso temos máscaras que agem sobre todo tipo de dados, identificada pelo sinal arroba (@).

Segue:
 - A Aceita apenas caracteres alfabéticos    - L Aceita apenas caracteres lógicos:    - T (True), F (False), "N" ou "S"    - N Aceita apenas letras ou números    - X Aceita qualquer caracter    - Y Aceita apenas Y (Yes) ou N (No)    - 9 Aceita somente números e sinais    - ! Converte em letras maiúsculas - & Converte em letras minusculas    - $ Exibe o símbolo "$" à frente de um número    - * Exibe o asterisco à frente de um número    - , Exibe uma vírgula Máscara para o dado    - @A Aceita apenas caracteres alfabéticos    - @B O número é ajustado à esquerda    - @C Exibe o sinal "CR" depois de números positivos    - @D Exibe as datas no formato padrão    - @E Aceita a entrada de números no formato brasileiro, ou seja, uso da vírgula como separador de decimal, e datas exibidas no formato DD/MM/AA  - @K Permite exibir um valor provável do conteúdo do campo    - @R Permite exibir caracteres que não farão parte do conjunto de caracteres a serem gravados    Ex: "@R 99.999.999/9999-99" , "@R (99)9999.9999" - @Sn Permite o rolamento horizontal para preenchimento do campo, no tamanho definido por "n"    - @X Exibe a notação "DB" depois de números negativos    - @) Retorna um valor negativo entre parênteses    - @( Retorna um valor negativo entre parênteses, com espaços em branco    - @! Converte todos os caracteres alfabéticos em letras maiúsculas - @& Converte todos os caracteres alfabéticos em letras minusculas  - BR_AMARELO,BR_AZUL,BR_BRANCO,BR_CINZA,BR_LARANJA,,BR_MARRON,BR_VERDE,BR_VERMELHO, BR_PINK, BR_PRETO.
Espero ter Ajudado!


Atualizando a Estrutura do Banco de Dados de Acordo com o SX3

Boa Tarde, 
Muitas vezes nos deparamos com a necessidade de alterar a estrutura de uma tabela, porem não podemos parar todos os serviços do sistema naquele momento pois está em produção.
Existe uma função que analisa toda a estrutura da tabela no SX3 e atualiza a mesma no banco de dados, ou seja, em caso de uma 'emergência/necessidade' podemos criar um campo diretamente no arquivo SX3 e posteriormente fazer com que ele seja criado no banco de dados. 

Segue Exemplo:

X31UPDTABLE ("nome da tabela")  

Ex:  X31UPDTABLE ("SA1") -  irá atualizar a tabela de clientes no banco de dados de acordo com o SX3 atual.

Executando o comando:

Abra a rotina de 'Lançamentos padronizados' em qualquer módulo, vá em incluir, na aba valores, no primeiro valor digite a fórmula, dê um TAB e saia sem confirmar, Pronto!!

Pode também ser executada da mesma forma pela rotina 'Formulas' conforme imagem abaixo:




Espero ter ajudado!


Eliminando Processos Travados no Schedule

Boa tarde Galera,
Este post tem como objetivo auxiliar vocês a eliminar aqueles processos que ficam com erro de retorno no schedule e que a cada inicialização do server o Protheus tenta executa-lo novamente.

Vamos lá:

Os processos do WorkFlow são controlados pelas tabelas WF1, WF2 e WF3 onde:

WF1: São os Processos do WorkFlow
WF2: É o Status do WorkFlow
WF3: Controla a Rastreabilidade do WorkFlow

Temos também os registros da tabelas WFA que é onde conseguimos identificar processos que tiveram problemas na execução da função de retorno através do campo WFA_TIPO quando estão com o valor  "0" .

Este processos estão pendentes de execução e sempre que o server for reiniciado, o WF enviará uma mensagem para lista de endereços dos administradores se forem informados na janela de parâmetros do workflow (configurador) e exibirão no console.log que estão sendo reativados.

REATIVAÇÃO DE PROCESSOS NO WF?



A reativação de processos é a forma em que o WF consegue tentar executar novamente os processos pendentes (que houveram erro de execução de retorno em uma primeira ou mais tentativas).

A reativação é feita sempre que o server  for reiniciado e que o Scheduler estiver sido informado na seção [OnStart] do appserver.ini e que na tabela WFA houver registros que no campo WFA_TIPO contenha o valor igual a "0".

[OnStart]
jobs=Scheduler

[Scheduler]
main=WFOnStart
environment=PRODUCAO
NPARMS=4
PARM1=99
PARM2=01
PARM3=ENVTOP
PARM4=T <<-- Aqui diz para o WF 'REATIVAR OS PROCESSOS'. Troque para F se não quiser.

Outra forma em que a reativação e realizada automaticamente é sempre que causar erro na execução da função de retorno e que a opção "reativar automaticamente" estiver habilitada na janela de parâmetros do workflow (configurador), conforme imagem abaixo:





É importante que na janela de parâmetros do workflow (configurador) você desabilite a opção "reativar automaticamente".

Outra forma considerada 'drástica' de resolver o problema é apagar os registros da tabela WFA que contenham o valor "0" no campo WFA_TIPO. Ou apenas modificam o valor para uma letra. Exemplo: "A". 

Espero que tenha ajudado!


Tabelas TSS - SPED

Boa tarde Galera,
Segue para conhecimento uma listagem contendo as tabelas do TSS além da descrição de cada uma delas afim de facilitar a busca no do Banco de Dados do TSS.

SPED - Configuração:



("SPED000")     //Parametros
("SPED001")     //Sociedade Empresarial
("SPED001A")
("SPED001B")  //Inscricoes da sociedade empresarial
("SPED001C")  //Inscricoes estaduais de ST em outros estados
("SPED001D")  //Controle de autorizacao de emissao de NFe
("SPED002")     //Participante
("SPED002A")
("SPED002B")
("SPED002C")
_________________________________________________________________________________

SPED - Fiscal:

("SPED003")     //Cadastro de participantes (SPED Fiscal)
("SPED003A")  //Alteracoes no cadastro de participantes
("SPED004")     //Cadastro de identificacao do item e do item anterior
("SPED004A")  //Cadastro das unidades de medidas
("SPED004B")  //Cadastro dos fatores de conversao das unidades de medidas
("SPED004C")  //Alteracoes no cadastro de itens
("SPED005")     //Cadastro de naturezas da operacao
("SPED006")     //Cadastro das informacoes complementares dos documentos fiscais
("SPED007")     //Cadastro das observacoes dos lancamentos fiscais
("SPED008")     //Serviço de administração dos documentos fiscais - Cabecalho
("SPED008A")  //Serviço de administração dos documentos fiscais - Itens
("SPED009")     //Serviço de administração das observações de lançamentos fiscais dos documentos fiscais
("SPED009A")  //Serviço de administração dos lançamentos fiscais dos documentos fiscais
("SPED010")     //Complemento de documentos fiscais para os modelos de Energia Eletrica
("SPED011")     //Complementos de documentos fiscais de Comunicacao/Telecomunicacao
("SPED011A")  //Informacoes dos terminais faturados para os documentos de Comunicacao/Telecomunicacao
("SPED012")     //Complementos de documentos fiscais de Agua e Gas canalizado
("SPED013")     //Complementos de documentos fiscais de Importacao
("SPED014")     //Complementos de volumes transportados (combustiveis ou nao) dos documentos fiscais
("SPED015")     //Complementos de cargas transportadas dos documentos fiscais
("SPED015A")  //Complementos de locais de coleta/entrega dos documentos fiscais
("SPED015B")  //Identificacao dos documentos fiscais
("SPED016")     //Complementos das nota fiscais de servico de transporte (NFST)
("SPED016A")  //Complementos de CT-e
("SPED017")     //Complementos do Conhecimento de Transportes Rodoviario de Cargas (CTRC)
("SPED018")     //Complementos do Conhecimento de Transporte Aquaviario de Cargas (CTAQC)
("SPED019")     //Complementos do Conhecimento de Transporte Aereo de Cargas (CTAEC)
("SPED020")     //Complementos do Conhecimento de Transporte Multimodal de Cargas (CTMC)
("SPED021")     //Modais do Conhecimento de Transporte Multimodal de Cargas (CTMC)
("SPED022")     //Titulos dos documentos fiscais
("SPED022A")  //Parcelas do titulo do documento fiscal
("SPED023")     //Tributos declarados dos documentos fiscais
("SPED024")     //Processo referenciado ao documento fiscal
("SPED024A")  //Informacoes complementares
("SPED025")     //Informacao complementar e documento de arrecadacao referenciado ao documento fiscal
("SPED026")     //Informacao complementar e documento fiscal referenciado ao documento fiscal
("SPED027")     //Informacao complementar e cupom fiscal referenciado ao documento fiscal
("SPED028")     //Informacao complementar e local de coleta/entrega referenciado ao documento fiscal
("SPED029")     //Informacao complementar dos docs fiscais/conta de energia eletrica, comunicacao, telecomunicacao, agua/gas canalizado.
("SPED030")     //informacoes complementares  de itens de documentos fiscais que identifiquem operacoes com combustiveis
("SPED031")     //informacoes complementares  de itens de documentos fiscais que identifiquem operacoes com medicamentos
("SPED032")     //informacoes complementares  de itens de documentos fiscais que identifiquem operacoes com armas de fogo
("SPED033")     //informacoes complementares  de itens de documentos fiscais que identifiquem operacoes com veiculos novos
("SPED034")     //informacoes complementares  de itens de documentos fiscais que identifiquem ressarcimento de ICMS em operacoes de ST
("SPED035")     //informacoes complementares  de itens de docs fiscais que identifiquem operacoes com produtos sujeitos ao selo de controle
("SPED036")     //informacoes complementares  de itens de docs fiscais que identifiquem operacoes com produtos sujeitos a tributacao do IPI
("SPED037")     //informacoes complementares  de itens de documentos fiscais que identifiquem operacoes com ST
("SPED039")     //Informacoes sobre ECF
("SPED039A")  //Informacoes sobre a reducao Z do ECF
("SPED040")     //Informacoes sobre os totalizadores parciais da reducao Z (SUBTOTAIS)
("SPED040A")  //Informacoes sobre os totalizadores parciais da reducao Z (ITENS)
("SPED041")     //Complemento dos documentos informados (bilhetes)
("SPED042")     //Informacoes sobre os bilhetes de passagens no caso de emissao somente do registro analitico - D300
("SPED043")     //Inventario
("SPED044")     //Periodo de apuracao de ICMS
("SPED045")     //Apuracao do ICMS
("SPED046")     //Tabela de Ajustes da Apuracao do ICMS
("SPED046A")  //Ajustes da Apuracao do ICMS
("SPED047")     //Informacoes adicionais da Apuracao do ICMS
("SPED047A")  //Obrigacoes a recolher da Apuracao do ICMS
("SPED048")     //Apuracao do IPI
("SPED049")     //Ajustes da Apuracao do IPI
("SPED080")     //Iformacoes sobre exportacoes
("SPED081")     //Documentos fiscais de exportacao
("SPED082")     //Controle de creditos fiscais
("SPED083")     //Utilizacao de creditos fiscais
("SPED084")     //Movimentacoes de combustiveis
("SPED085")     //Volume de vendas de combustiveis
("SPED086")     //Bombas
("SPED086A")  //Lacres da bomba
("SPED086B")  //Bicos da bomba
("SPED087")     //Informacoes sobre valores agregados
("SPED088")     //Oeracoes com cartoes de credito e/ou debito

_________________________________________________________________________________

SPED - Contábil:

("SPED100")      //Plano de Contas
("SPED100A")
("SPED110")      //Centro de Custo
("SPED110A")
("SPED120")      //Plano de conta referencial
("SPED130")      //Historico Padrao
("SPED140")      //Plano de contas dos demonstrativos
("SPED200")      // Livros contáveis
("SPED200A")   // Livros Auxiliares      
("SPED210")    
("SPED220")
("SPED220A")
("SPED230")      //Razao auxiliar
("SPED230A")   //LayOut do Razao auxiliar
("SPED240")      //Detalhe do Razao auxiliar
("SPED240A")   //Detalhe do Razao auxiliar
("SPED300")      //Demonstracoes Contabeis
("SPED300A")   //Balanço Patrimonial e DRE
("SPED300B")   //Outras Demonstracoes - RTF
("SPED310")      //Balancetes Diarios 
("SPED310A")   //Balancetes Diarios Itens 
_________________________________________________________________________________

SPED - NFe/NFSe:

("SPED050")    //Nota Fiscal Eletronica - Saida
("SPED051")    //Nota Fiscal Eletronica de Servico - (Municipal)
("SPED052")    //Lote de transmissao Nota Fiscal Eletronica 
("SPED053")    //Lotes de Nota Fiscal Eletronica de Servico - (Municipal)
("SPED054")    //Nota Fiscal Eletronica x Lote de Transmissao 
("SPED055")    //Lotes de Nota Fiscal Eletronica de Servico - (Municipal)
("SPED060")    //Nota Fiscal Eletronica - Entrada