Como fazer uma picture variável num campo do Protheus

No artigo de hoje, vou demonstrar duas formas de criar campo com Picture Variável no Protheus.

Algumas vezes, precisamos criar um campo, onde a máscara dele, vai depender da informação de outro campo, como o exemplo mais famoso no cadastro de clientes e fornecedores, onde se o cliente for pessoa física, o campo CGC usará a máscara do CPF, senão usará do CNPJ.

Mas como podemos fazer isso em nossas customizações?

  1. Vamos criar um campo no cadastro de Produtos, com o nome B1_X_TESTE, ele vai ser real
  2. Na primeira aba, na Picture Variável, iremos colocar uma função nossa, chamada u_zTstPict()

Criação do campo

  1. Nessa nossa função, iremos validar o Tipo colocado, se ele for PA, será uma máscara com 6 caracteres, se for PI com 4 caracteres, se for MP com 8 caracteres, senão será uma máscara default
  2. Agora ao preencher o campo B1_TIPO, ele automaticamente vai alterar a máscara do nosso campo B1_X_TESTE, abaixo um print de cada exemplo possível conforme função acima

4 Exemplos de máscaras

Abaixo o código fonte desenvolvido para o exemplo acima:

//Bibliotecas
#Include "TOTVS.ch"
 
/*/{Protheus.doc} User Function zTstPict
Teste de Picture de Campo
@type  Function
@author Atilio
@since 27/07/2022
/*/
 
User Function zTstPict()
    Local aArea    := FWGetArea()
    Local cMascara := ""
    Local cTipo    := FWFldGet("B1_TIPO")
 
    //Se for Produto Acabado
    If cTipo == "PA"
        cMascara := "@R 999999"
 
    //Se for Produto Intermediário
    ElseIf cTipo == "PI"
        cMascara := "@R 9999"
 
    //Se for Matéria Prima
    ElseIf cTipo == "MP"
        cMascara := "@R 99999999"
 
    //Senão
    Else
        cMascara := "@R 9999999999"
    EndIf
    cMascara += "%C"
 
    FWRestArea(aArea)
Return cMascara

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.

2 Responses

  1. Lucas Lopez disse:

    Muito bom dia!

    Primeiramente obrigado pelos posts são muito legais.

    Duvida: Porque você concatena com “%C” ?

Deixe uma resposta para Dan (Daniel Atilio)Cancelar resposta

Terminal de Informação