MT120TEL em resumo
- Onde fica
- função
A120Pedido(), do MATA120 (Pedido de Compra e Autorização de Entrega). - Quando dispara
- depois que o padrão desenha os campos do cabeçalho na janela e antes de criar o grid de itens e os folders do rodapé.
- PARAMIXB
{oDlg, aPosGet, aObj, nOpcx, nReg, aDlgFields}— seis posições.- Retorno
- ignorado. O padrão chama o ponto de entrada e não lê o que ele devolve.
- Serve para bloquear?
- Não. Ele existe para acrescentar objetos de tela.
Consulta rápida5 seções
Se você chegou aqui procurando um ponto de aprovação ou de alçada, este não é ele: o MT120TEL não recebe dados de aprovação nem tem como interromper a operação pelo retorno. O nome vem de “tela”.
Para o mecanismo geral de ponto de entrada, veja Ponto de entrada no Protheus.
Como o padrão chama
If lMt120TEL
ExecBlock("MT120TEL",.F.,.F.,{@oDlg, aPosGet, aObj, nOpcx, nReg, @aDlgFields} )
EndIfA variável lMt120TEL vem de ExistBlock("MT120TEL"), avaliada no início da
função. Não há captura de retorno: nada do que a User Function devolver muda
o fluxo.
A chamada está dentro do trecho que só monta a janela quando
!l120Auto .Or. lWhenGet. Numa rotina automática comum, sem lWhenGet, a
janela não é construída e o MT120TEL não é executado. Não há condição sobre
nOpcx na chamada, então, quando a janela existe, o ponto de entrada dispara
seja qual for a operação; se a regra vale só para uma delas, teste nOpcx no
seu fonte.
O que ele recebe
| Posição | Conteúdo |
|---|---|
PARAMIXB[1] | oDlg: a janela do pedido, onde você cria os novos objetos |
PARAMIXB[2] | aPosGet: colunas de tela do cabeçalho, uma linha do array por faixa de campos |
PARAMIXB[3] | aObj: array reservado pelo padrão para os objetos dos folders; os folders só são criados depois desta chamada, então não conte com objetos nele |
PARAMIXB[4] | nOpcx: a opção da rotina. O fonte trata 3 como inclusão e 5 como exclusão |
PARAMIXB[5] | nReg: o parâmetro nReg da função A120Pedido() |
PARAMIXB[6] | aDlgFields: lista de pares {campo, variável} dos campos do cabeçalho |
Duas coisas para notar:
aPosGetsó traz colunas. As linhas do cabeçalho o padrão calcula a partir deaPosObj, que é variável local da função e não vai noPARAMIXB. A coordenada vertical do seu campo é decisão sua, e você acerta olhando a tela. Se o problema for o tamanho da área do cabeçalho, quem recebe e devolveaPosObjé o MT120GET, que roda antes.aDlgFieldstem um formato claro. O padrão preenche com pares de texto, como{"C7_NUM","cA120Num"}: nome do campo e nome da variável de tela que guarda o valor. Um campo de cabeçalho que você criar pode entrar na lista seguindo o mesmo par.
Sobre como a posição e o tipo do PARAMIXB mudam de um ponto de entrada para
outro, veja PARAMIXB: o array que às vezes não é seu.
Exemplo
O exemplo desenha, no cabeçalho, um campo somente leitura com o nome do usuário logado. Ele não grava nada.
#Include "Protheus.ch"
/*/{Protheus.doc} MT120TEL
Executado em A120Pedido(), depois dos campos do cabeçalho e antes do grid.
Acrescenta um campo informativo (somente leitura) ao cabeçalho do pedido.
@type user function
/*/
User Function MT120TEL()
Local oDlg := Nil
Local aPosGet := {}
Local nOpcx := 0
Local cInfo := ""
Local nLin := 52 // provisório: ajuste olhando a tela
If Type("PARAMIXB") <> "A" .Or. Len(PARAMIXB) < 4
Return Nil
EndIf
oDlg := PARAMIXB[1]
aPosGet := PARAMIXB[2]
nOpcx := PARAMIXB[4]
If ValType(oDlg) <> "O" .Or. ValType(aPosGet) <> "A"
Return Nil
EndIf
// Só na inclusão; nas demais operações, a tela segue como está.
If nOpcx <> 3
Return Nil
EndIf
cInfo := PadR(cUserName, 25)
@ nLin+1, aPosGet[2,1] SAY "Digitado por" OF oDlg PIXEL SIZE 040,006
@ nLin, aPosGet[2,2] MSGET cInfo WHEN .F. OF oDlg PIXEL SIZE 090,006
Return NilPontos do exemplo:
- Valida
PARAMIXBantes de usar; se a chamada vier diferente do esperado, a tela abre normal. Return Nilé suficiente, porque o padrão não lê o retorno.nLiné um valor provisório. Use as colunas doaPosGet(elas acompanham a resolução), mas acerte a linha na tela do seu ambiente e confira se o campo não cai em cima de outro.- Guardar o valor digitado num campo customizado exige tratar a gravação do pedido em outro ponto; o MT120TEL só desenha.
Armadilhas específicas
Esperar bloquear a operação. Retornar .F. aqui não faz nada. Regra de
validação vai para um ponto que use o retorno.
Tratar aPosGet como coordenadas completas. Ele traz colunas, não linhas.
Copiar o valor de linha de outro fonte quebra em resolução diferente.
Achar que roda em toda execução. Sem janela (rotina automática comum), o ponto de entrada não é chamado. Regra que precisa valer também na rotina automática não pode depender dele.
Criar o objeto e esquecer a variável. O objeto MSGET precisa de uma
variável que continue viva enquanto a janela existe e de outro ponto para
gravar o conteúdo.
Quando outro ponto de entrada é mais adequado
Na mesma função, na ordem em que aparecem no fonte:
| Ponto de entrada | Recebe | Quando dispara |
|---|---|---|
| MT120GET | {aPosObj, nOpcx} | Antes do cabeçalho: devolve aPosObj redefinido. Usado para mudar as coordenadas da área |
| MT120TEL | ver tabela acima | Depois dos campos do cabeçalho; acrescenta objetos |
| MT120FOL | {nOpcx, aPosGet} | Depois de criar os folders do rodapé; o comentário do padrão o descreve para incluir folders, usado em conjunto com o MT120TEL e a variável aTitles |
| MT120SCR | oDlg (por referência) | No fim da montagem, depois dos folders |
Se o que você precisa é de um folder novo no rodapé, o caminho é o MT120FOL.
Se precisa só de um objeto solto na tela, MT120SCR entrega o oDlg mais
tarde, quando os folders já existem; o MT120TEL é a escolha quando o objeto
tem de estar criado antes do grid e dos folders.
Continue por aqui
- Vídeo
DesenvolvimentoReferência técnica
F340VALOK: o ponto de entrada que barra o OK da compensação a pagar
F340VALOK roda ao clicar OK na lista de títulos da compensação a pagar, recebe a lista em PARAMIXB e, retornando .F., mantém o usuário na lista.
- Vídeo
DesenvolvimentoReferência técnica
F340VLD: o ponto de entrada que barra a compensação no Contas a Pagar
F340VLD roda ao confirmar a primeira tela da compensação a pagar (FINA340), sem PARAMIXB. Retornando .F., a tela não fecha e nenhum título chega a ser listado.
- Vídeo
DesenvolvimentoReferência técnica
F40DELPR: o ponto de entrada que troca a baixa do provisório pela exclusão
F40DELPR roda ao abrir a substituição de título provisório no Contas a Receber, sem PARAMIXB. Retornando .T., o provisório é excluído em vez de baixado.