MT120OK em resumo
- Onde fica
- função
A120TudOk(), a validação do pedido inteiro no MATA120. - Quando dispara
- ao confirmar a tela (e na rotina automática), depois das validações do padrão e antes de qualquer gravação.
- PARAMIXB
- nenhum. O padrão chama o ponto sem passar array.
- Retorno
- usado se for lógico.
.F.impede o OK; qualquer outro tipo é ignorado. - Serve para bloquear?
- Sim, e o padrão já aprovou o pedido antes de chamar você.
Consulta rápida5 seções
Como o padrão chama o ponto
A chamada no padrão é, em essência, esta:
If lRet .And. lMT120OK
lRet120OK := ExecBlock("MT120OK",.F.,.F.)
If Valtype( lRet120OK ) == "L"
lRet := lRet120OK
EndIf
EndIfDuas coisas que importam:
- O ponto só é chamado se
lRetainda for.T.. Cabeçalho, condição de pagamento, linhas, permissões, bloqueio contábil e as validações do módulo de planejamento e controle orçamentário já passaram. Retornar.T.aqui não desfaz uma reprovação do padrão, ao contrário do que acontece no MT410TOK. - Só retorno lógico vale. Se a função terminar sem
Returnexplícito, ou devolverNilou outro tipo, o padrão segue como se estivesse tudo certo. Por isso oReturnprecisa ser sempre um lógico.
Depois do MT120OK o padrão ainda executa outras checagens, como a de
adiantamentos, então um .T. seu não significa que o pedido será gravado.
O que ele recebe
Nada em PARAMIXB. A chamada não envia array, então o ponto trabalha com o que
já está em memória na tela do pedido: as variáveis de memória do cabeçalho
(M->C7_...) e o grid em aHeader e aCols. Localize a coluna pelo nome do
campo, nunca pela posição, e ignore a linha deletada, que o padrão testa na
última posição de cada linha de aCols:
nPosQtd := aScan(aHeader, {|x| AllTrim(x[2]) == "C7_QUANT"})
lDeletada := aCols[nX][Len(aCols[nX])]Como não há operação em PARAMIXB, use as variáveis INCLUI e ALTERA para
restringir a regra, como o próprio padrão faz nesta função.
Exemplo
Regra de exemplo: o pedido não confirma se algum item ativo estiver com quantidade ou preço zerados.
#Include "Protheus.ch"
/*/{Protheus.doc} MT120OK
Executado em A120TudOk(), ao confirmar o pedido de compra e antes de gravar.
Bloqueia item ativo sem quantidade ou sem preço.
@type user function
@return logical, .F. impede a confirmação
/*/
User Function MT120OK()
Local lRet := .T.
Local nPosQtd := aScan(aHeader, {|x| AllTrim(x[2]) == "C7_QUANT"})
Local nPosPrc := aScan(aHeader, {|x| AllTrim(x[2]) == "C7_PRECO"})
Local nX := 0
// Só inclusão e alteração. Em outra operação a regra não se aplica.
If !(INCLUI .Or. ALTERA)
Return .T.
EndIf
If nPosQtd == 0 .Or. nPosPrc == 0
Return .T.
EndIf
For nX := 1 To Len(aCols)
// Última posição de cada linha é o flag de deletada
If aCols[nX][Len(aCols[nX])]
Loop
EndIf
If aCols[nX][nPosQtd] <= 0 .Or. aCols[nX][nPosPrc] <= 0
// Sem mensagem, o OK parece travado.
Help(" ", 1, "MT120OK",, ;
"Item " + cValToChar(nX) + " sem quantidade ou sem preço.", 1, 0)
lRet := .F.
Exit
EndIf
Next
Return lRetArmadilhas
Retornar .F. sem mensagem. O padrão não exibe nada em nome do seu ponto.
Sem Help() ou equivalente, o usuário clica em OK e nada acontece.
Retornar algo que não seja lógico. É ignorado em silêncio. Não é bloqueio.
Abrir diálogo na rotina automática. A rotina automática também passa pela
A120TudOk(). O padrão testa l120Auto antes de abrir telas próprias; faça o
mesmo se a sua regra usar MsgYesNo ou Aviso.
Usar PARAMIXB. Não existe aqui. O que parece ser PARAMIXB é o conteúdo
de outro ponto; veja
PARAMIXB: o array que às vezes não é seu.
Esperar que ele rode quando o pedido já foi reprovado. Se o padrão barrou antes, o ponto nem é chamado. Para depurar, confirme primeiro que o pedido chegou até ele; veja Meu ponto de entrada executou?.
Os vizinhos
| PE | Momento | Retorno é usado? |
|---|---|---|
MT120TEL | Montagem da tela | Ver o artigo |
MT120OK | Ao confirmar, validação do pedido inteiro, sem PARAMIXB | Sim, se lógico |
MT120GRV | Depois do OK da tela, antes de gravar, com PARAMIXB de número e operação | Sim, .F. cancela |
No botão OK da tela, o padrão primeiro exige a validação do grid (TudoOk, onde
está o MT120OK) e só então segue para a gravação, onde o MT120GRV é chamado.
Se a sua regra precisa saber a operação e o número do pedido por parâmetro, o
lugar é o MT120GRV; se ela depende só do conteúdo da tela, é o MT120OK.
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.