Para se utilizar uma função específica, alguns cuidados são necessários. A utilização indevida pode causar problemas e não conformidades no funcionamento do Protheus. Abaixo listamos os cuidados básicos:

 

 

Nome de funções

 

Deve-se evitar a utilização de nomes de funções já existentes no Protheus padrão nas funções específicas. Estas devem ter um nome próprio, de preferência seguindo uma regra de composição diferente da utilizada nos módulos da TOTVS.

 

Uma alternativa é criar uma regra de nomenclatura dos fontes específicos baseada, por exemplo, no nome do cliente, numa sigla que indique se tratar de uma função customizada, etc.

 

Não utilize como nome das suas funções específicas:

 

-  Rotinas do padrão, como MATA010, MATA460, FINA040, por exemplo.

  • Obs.: existem alguns pontos de entrada que utilizam os mesmos nomes de rotinas do padrão. Nesse caso, pode-se utilizar o mesmo nome.

- Funções do padrão, como A460Dupl, A460Process, por exemplo.

 

Nome de variáveis

 

Dentro das funções específicas não se deve utilizar variáveis públicas para atribuição de valores ou outros fins que não sejam aqueles já previstos pelo Protheus. As variáveis referentes ao processo customizado contido na função específica, e que serão declaradas nela, devem ser novas e exclusivas.

Como exemplo de variáveis públicas padrões que não devem ser utilizadas para outro fim dentro de uma função específica, podemos citar, por exemplo, a nOpc e a dDataBase, que contém a opção selecionada pelo usuário dentro de uma mBrowse e a data base do sistema, respectivamente.

 

Travamento de registros

 

Em muitos pontos de entrada ou funções específicas, os campos de uma tabela são atualizados. Como descrito na documentação da linguagem AdvPL, é necessário bloquear o registro que será atualizado.

Após a gravação, deve-se tomar o cuidado de não esquecer de liberar o registro. Caso contrário, quando o Protheus tentar atualizar a mesma informação, o sistema acusará que o registro está bloqueado e impedirá a atualização, gerando transtornos à execução dos processos padrões do sistema.

Portanto, nunca se deve esquecer a utilização da função MsUnLock() dentro de um ponto de entrada e de uma função específica.

 

Áreas de Trabalho

 

Quando uma customização é executada, principalmente um ponto de entrada, o sistema já está posicionado em algumas áreas de trabalho, com o seu índice e o registro posicionados.

Por isso, uma boa prática de programação é salvar a área de trabalho corrente e as áreas de trabalho que serão manuseadas pela função específica.

Para salvar as informações de uma área de trabalho, utiliza-se a função GetArea(). Para restaurá-las, usa-se a função RestArea().

Vejamos o seguinte exemplo:

USER FUNCTION SF2460I()

Local aArea         := GetArea()

Local aAreaSC6 := SC6->(GetArea())

Local aAreaSC5 := SC5->(GetArea())

Local nQtdeVen  := 0

Local aFifo           := {}

Local nXv             := 0

Local aAreaSF2  := SF2->( GetArea() )

Local aAreaSD2 := SD2->( GetArea() )

 

 

RestArea( aAreaSD2 )

RestArea( aAreaSF2 )

RestArea(aAreaSC5)

RestArea(aAreaSC6)

RestArea(aArea) 

 

Return Nil

  • Sem rótulos