Como baixar fontes padrão de relatórios e transformá-los em User Function?

Hoje vou mostrar como fazer o download de um fonte padrão de relatório via suporte.totvs.com e fazer a customização no fonte.

O ato de você fazer o download de um fonte padrão, e transformar para a sua necessidade, alguns autores chamam de “Congelar”, que basicamente consiste em alterar constantes e Function para User Function.

1. Primeiramente, para fazer o download, é necessário acessar o suporte da TOTVS, e em seguida clicar em TOTVS Linha Protheus

2. Depois clique em Artefatos Gerais de Produto

3. Clique Em Fontes de Relatório

4. Basta realizar o download dos pacotes e descompactar.

Acessando Fontes de Relatórios

Agora vamos ao passo a passo de como Congelar o fonte:

1. Após descompactar, procure o arquivo desejado, e altere o nome colocando um caracter antes como “x” ou “z”. Por exemplo, no matr010.prx, foi alterado o nome para xMATR010.prw

2. Coloque esse novo fonte dentro da workspace, e coloque a include dele se precisar, na sua pasta de includes

3. Abra o arquivo, e procure pela palavra Function (não por Static Function, apenas Function)

3.1. Onde tiver a palavra Function, na função da frente, acrescente um x minúsculo e troque de Function para User Function, por exemplo, Function MATR010() = User Function xMATR010()

3.2. Onde tinha a chamada da função, trocar pela nova chamada, por exemplo, MATR010() = u_xMATR010()

4. Repetir os passos 3, 3.1 e 3.2 até o fim do arquivo


Observação:

Caso se mesmo ao compilar, estiver dando uma mensagem de erro, dizendo Functions not allowed, use User Function or Static Function, pode ser que alguma “Function” faltou ser convertida para “Static Function” ou “User Function”.

 

Para descobrir então, no Pesquisar do VSCode (Na barra da esquerda), coloque “function ” (function seguido por um espaço a direita e sem as aspas).

 

Em seguida, no files to include (ou arquivos a serem incluídos), coloca o nome do arquivo prw. Nisso na lista que aparecer, veja se tem algum que esteja como “Function” apenas, e se sim, ai você vai precisar converter para “User Function” ou “Static Function”.

 

Segue abaixo um print de exemplo:

Exemplo pesquisando por Function

Exemplo pesquisando por Function

Bom pessoal, por hoje é só.

Abraços e até a próxima.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

13 Responses

  1. Walter Rocha disse:

    Muito bom Dan, ter os fontes padrões para analisar algumas situações é muito bom e apesar de trabalhar com o protheus a tempos eu não sabia dessa possibilidade.
    Muito Obrigado novamente

  2. Jonathan Oliveira disse:

    Segui os passo para renomear o arquivo e as funções, porém, ao compilar recebo essa mensagem de erro: “Cannot overwrite TOTVS programs (MATR110A.PRW)”
    O que pode ser?

  3. Oesly Nunes disse:

    Olá peço por favor ajuda, já tentei com o pessoal da totvs e não tive sucesso, inclusive tive ajuda do pessoal do ADVPL e não consegui, o relatório MATR700 é bloqueado para personalização, eu segui seu tutorial e consegui desbloquear ele para personalização, além dos procedimentos que vc orientou comentei as funções SetReadOnly que estavam bloqueando a personalização. Após concluir tudo, incluindo os campos necessários, o protheus retorna com a seguinte mensagem: A CONFIGURAÇÃO DESSE RELATÓRIO NÃO PERMITE A INCLUSÃO DE CAMPOS DO USUÁRIO… não sei o que fazer mais.. por favor me ajuda…

  4. Oesly Nunes disse:

    uma outra tentativa que fiz foi inserir um novo campo na tabela dos pedidos de venda e chamar este campo no fonte do relatório, fiz os testes, e o campo apareceu perfeitamente no relatório, com as informações que coloquei no campo lá no pedido, porém o campo C6_DESCRI que traz a descrição do produto está replicando o campo novo que criei (C6_PEND) que traz a pendencia do item no pedido. olhei via APSDU e a informação está armazenada corretamente, em ambos os campos…

    • Dan_Atilio disse:

      Bom dia Oesly, tudo bem?
      Então, no caso se mesmo assim ele mostrando a mensagem de não permitir a inclusão de campos, é somente via AdvPL.
      Agora quanto a adição do campo e sair com dados dobrados, ai se possível, nos envie o fonte, ou mostre como você criou o TRCell e está imprimindo as informações.

  5. Sérgio H. C. Motta disse:

    Bom dia, Dan. Tudo bom?
    Sou iniciante do Protheus e preciso adicionar e remover campos num relatório não personalizável (MATR090.prx). Após a edição do arquivo fonte com a transformação da função em função de usuário e a adequação da chamada ao novo nome do arquivo xMATR090(), o que fazer? Sua orientação é para edição do relatório no Treports, Sigarpm ou edição em fonte mesmo?

    • Dan_Atilio disse:

      Bom dia Sérgio, bem e você?
      Após você fazer a alteração, utilizando o VSCode, compile o novo código fonte.
      Com isso, ele já estará dentro do RPO do seu Protheus, agora basta colocar um item no menu via Configurador, chamando a sua função xMATR090 com o tipo Função de Usuário.

  6. Andre Brito disse:

    Bom dia Daniel,

    Peguei o arquivo padrão MATR110, coloquei como xmatr110.prw e User Function xMatr110( cAlias, nReg, nOpcx ). No Includes ele solicitou #INCLUDE “MATR110.CH”e coloquei este arquivo na pasta includes, reiniciei o VsCode, mas mesmo assim aparece:

    functions are not allowed in code. Use USER FUNCTION or STATIC FUNCTION.

    • Bom dia Andre, tudo joia?

      Dentro do fonte, dê um Ctrl+F e procure pela palavra Function, ai onde tiver apenas Function, você transforma para Static Function.

      Esse erro acontece quando tentamos compilar algum fonte que tenha “Function”, ai precisamos converter para “Static Function” ou “User Function”.

      Tenha uma ótima e abençoada quarta feira.

      Um grande abraço.

Deixe uma resposta

Terminal de Informação