MT120GRV em resumo
- Onde fica
- função
A120Pedido, do MATA120 (Pedido de Compras). - Quando dispara
- depois que o usuário confirma a tela e antes de qualquer gravação, só em inclusão, alteração ou exclusão. Em visualização não dispara.
- PARAMIXB
{cNumPedido, lInclusao, lAlteracao, lExclusao, aAdiantamentos}.- Retorno
- usado. Lógico
.F.cancela a operação. - Serve para bloquear?
- Sim, e ainda dá tempo: nada foi gravado.
Consulta rápida6 seções
Para o mecanismo geral, veja Ponto de entrada no Protheus.
O que chega em PARAMIXB
| Posição | Conteúdo |
|---|---|
| 1 | Número do pedido (C7_NUM) |
| 2 | .T. se for inclusão (a cópia de pedido também marca inclusão) |
| 3 | .T. se for alteração |
| 4 | .T. se for exclusão |
| 5 | Array de adiantamentos selecionados para o pedido (vazio por padrão) |
Só uma das três flags fica .T. por chamada. Como o array é montado pela
rotina, confira o tipo antes de indexar; o cuidado geral está em
PARAMIXB: o array que às vezes não é seu.
Como o retorno é tratado
O padrão só olha o retorno se ele for lógico. Se for .F., as três flags de
operação são zeradas e a rotina não chama a gravação. Qualquer outro retorno
(.T., Nil, texto) deixa o fluxo seguir. Por isso, retorne sempre .T.
explicitamente no caminho feliz.
Na chamada que o fonte faz, não há mensagem ao usuário: quem bloqueia deve
avisar (Help, MsgStop) dentro do próprio PE.
Onde ele cai no fluxo
- O usuário confirma a tela.
- O padrão trata transferência e aglutinação de pedidos; se falharem, a operação já é cancelada e o PE nem roda.
- MT120GRV.
- Se ainda houver operação ativa, inicia a gravação (preparo do fiscal e da contabilização, depois a gravação do pedido).
O PE roda antes do Begin Transaction desse trecho. Portanto, o que ele
gravar não fica na transação do pedido. Prefira validar no PE e gravar em
ponto posterior.
Exemplo: impedir exclusão de pedido já atendido
Regra de exemplo, com nomes neutros: bloquear a exclusão se algum item já
teve quantidade entregue (C7_QUJE). Ela só exemplifica o mecanismo; o
padrão pode ter validações próprias.
#Include "Protheus.ch"
User Function MT120GRV()
Local cNumPed := PARAMIXB[1]
Local lExclusao := PARAMIXB[4]
Local aArea := GetArea()
Local aAreaSC7 := SC7->(GetArea())
Local lRet := .T.
If lExclusao
SC7->(DbSetOrder(1))
If SC7->(MsSeek(xFilial("SC7") + cNumPed))
While !SC7->(Eof()) .And. SC7->C7_FILIAL + SC7->C7_NUM == xFilial("SC7") + cNumPed
If SC7->C7_QUJE > 0
lRet := .F.
Exit
EndIf
SC7->(DbSkip())
EndDo
EndIf
If !lRet
MsgStop("Pedido " + cNumPed + " tem itens já entregues e não pode ser excluído.", "Exclusão bloqueada")
EndIf
EndIf
RestArea(aAreaSC7)
RestArea(aArea)
Return lRetRepare no RestArea: o PE roda com a SC7 posicionada pela rotina, e mover
o ponteiro sem restaurar altera o que vem depois.
A armadilha: retornar .F. sem explicar
No trecho da chamada, o padrão não exibe mensagem ao cancelar. Um .F.
sem aviso deixa o usuário sem saber o motivo. Toda regra de bloqueio
precisa da própria mensagem.
Alçada e aprovação
A pauta associa este PE a alçada, mas a chamada não confirma isso: ele não recebe dado de aprovação e roda antes da gravação. Se o objetivo é regra de alçada, este artigo não sustenta o PE como o lugar certo.
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.