MT140TOK em resumo
- Onde fica
- função
Ma140TudOk(), a validação “tudo OK” do grid da Pré-Nota (MATA140). - Quando dispara
- ao clicar em OK na tela da Pré-Nota, antes de gravar, e só depois de o padrão aprovar cabeçalho, itens e a existência de ao menos uma linha não deletada.
- PARAMIXB
{lRet}, um lógico. Na prática, sempre.T..- Retorno
- usado.
.F.interrompe a confirmação. - Serve para bloquear?
- Sim, para regra que precisa olhar todos os itens de uma vez.
Consulta rápida5 seções
Para o mecanismo geral, veja Ponto de entrada no Protheus. Para entender por que a Pré-Nota existe separada do documento, veja Pré-nota ou documento de entrada.
Só roda se o padrão já aprovou
A chamada no padrão tem esta forma:
If lRetorno .And. ExistBlock("MT140TOK")
lRetorno := ExecBlock("MT140TOK", .F., .F., {lRetorno})
EndIfDuas consequências:
- Seu ponto de entrada nunca vê uma reprovação do padrão. Antes dele, o
padrão já conferiu o cabeçalho (fornecedor, emissão, tipo, número), se a nota
já existe na base (na inclusão), se o armazém de cada item existe no cadastro e se sobrou
alguma linha não deletada, entre outras checagens. Se qualquer uma dessas falha, o
MT140TOKnem é chamado. Por issoPARAMIXB[1]chega sempre.T.: ler esse valor não informa nada. - Retornar
.T.não desfaz nenhuma reprovação anterior, ao contrário do que acontece no MT410TOK. O que você devolver substituilRetorno, mas ele só chegou até aqui por ter sido aprovado.
Depois do ponto de entrada o padrão ainda executa outras validações (nota com
empenho e tabela auxiliar de itens, quando ativos). Elas
só rodam se você devolver .T.; com .F. a confirmação já está barrada.
O que dá para ler dentro dele
A função é uma validação do grid, então o contexto da tela está visível: as
variáveis aHeader e aCols com os itens digitados, e as variáveis do
cabeçalho da Pré-Nota, como cNFiscal, cSerie, dDEmissao, cTipo e
cA100For, que o próprio padrão usa na mesma função. Nada foi
gravado ainda.
Para achar uma coluna, procure pelo nome do campo em aHeader. A última posição de cada
linha de aCols diz se ela está deletada, então ignore as deletadas.
Exemplo
A regra do exemplo é fictícia: em Pré-Nota de tipo normal, todo item não deletado precisa vir de pedido de compra.
#Include "Protheus.ch"
/*/{Protheus.doc} MT140TOK
Executado em Ma140TudOk(), ao confirmar a Pré-Nota, depois das
validações do padrão e antes de gravar.
@type user function
@return logical, .F. interrompe a confirmação
/*/
User Function MT140TOK()
Local lRet := .T.
Local nPosPed := aScan(aHeader, {|x| AllTrim(x[2]) == "D1_PEDIDO"})
Local nPosItem := aScan(aHeader, {|x| AllTrim(x[2]) == "D1_ITEM"})
Local nPosDel := Len(aHeader) + 1 // flag de linha deletada
Local nX := 0
// A regra vale só para nota normal.
If cTipo <> "N"
Return .T.
EndIf
// Sem a coluna na tela, a regra não se aplica.
If nPosPed == 0 .Or. nPosItem == 0
Return .T.
EndIf
For nX := 1 To Len(aCols)
If !aCols[nX][nPosDel] .And. Empty(aCols[nX][nPosPed])
Help(" ", 1, "MT140TOK",, ;
"O item " + AllTrim(aCols[nX][nPosItem]) + ;
" não tem pedido de compra. Informe o pedido ou remova a linha.", 1, 0)
lRet := .F.
Exit
EndIf
Next nX
Return lRetOs Return .T. antecipados são os casos em que a regra não se aplica. A
mensagem vem antes do .F.: sem ela o botão OK parece não responder e o
usuário não sabe qual item corrigir.
Armadilhas
Bloquear sem mensagem. O retorno .F. só devolve o usuário à tela. Sempre
Help() ou equivalente, dizendo qual item e o que fazer.
Abrir diálogo na rotina automática. A Pré-Nota também pode ser gravada por
MATA140 via ExecAuto, e o padrão chama o mesmo Ma140TudOk() nesse caminho.
MsgYesNo ou MsgAlert sem tela trava a execução. Guarde com IsBlind().
Esquecer o Return. O retorno é atribuído a lRetorno e decide a
confirmação; sem Return explícito o resultado é Nil.
Pôr aqui regra que só faz sentido na classificação. Este ponto é da Pré-Nota. Quando o documento de entrada é confirmado, a validação equivalente é outra.
MT140TOK ou MT100TOK
| PE | Rotina | Momento |
|---|---|---|
MT140TOK | Pré-Nota (MATA140) | Ao confirmar a Pré-Nota, antes de gravar |
MT100TOK | Documento de Entrada (MATA103) | Ao confirmar o Documento de Entrada, antes de gravar |
Os dois recebem {lRet} e bloqueiam com .F., mas pertencem a telas
diferentes. Uma regra no MT140TOK não vale quando alguém lança direto o
Documento de Entrada sem passar pela Pré-Nota; se a regra precisa valer nos
dois caminhos, ela precisa existir nos dois pontos de entrada.
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.