F340VALOK em resumo
- Onde fica
- função
FA340OK(), o OK da lista de títulos da compensação a pagar (FINA340). - Quando dispara
- ao clicar OK na lista de títulos, antes de qualquer gravação.
- PARAMIXB
{aTitulos}, a lista de títulos da tela, marcados ou não.- Retorno
- lógico decide;
Nilmostra a pergunta padrão de confirmação. - Serve para bloquear?
- Sim.
.F.mantém o usuário na lista.
Consulta rápida5 seções
Este é o ponto de entrada da lista de títulos da compensação. A tela
anterior, a dos dados da compensação, tem outro ponto de entrada, o F340VLD,
que não recebe nada em PARAMIXB. Se a sua regra depende de quais títulos
foram marcados, ela só pode estar aqui. Para o fluxo de compensação em si,
veja Pagamento antecipado (PA) e compensação no Contas a Pagar.
O que acontece no OK
O padrão chama o ponto de entrada passando a lista de títulos em PARAMIXB[1]
e usa o resultado como o retorno do OK. Três comportamentos importam:
| Retorno do PE | Efeito |
|---|---|
.F. | O diálogo não fecha. O usuário continua na lista, com as marcações como estavam, e pode ajustar e clicar OK de novo |
.T. | O diálogo fecha sem a pergunta “Confirma marcação de títulos?” |
Nil | O padrão faz a pergunta e o retorno passa a ser a resposta do usuário |
O Nil é o caminho natural quando a sua regra só quer barrar: devolva .F.
no erro e Nil no resto, e a confirmação padrão continua existindo.
Armadilhas
Ele roda antes das validações de valor. Depois que o PE libera, o padrão ainda confere se o total marcado é maior que zero e se cabe no saldo, e só então abre a transação de gravação. O PE não vê o resultado dessas conferências; se a sua regra depende do total, calcule a partir da lista.
Não é chamado na compensação automática. Na execução automática a tela não é montada e o botão OK não existe. Regra que precisa valer também nesse caminho não pode morar só aqui.
Só o Nil é tratado como “sem opinião”. O padrão espera lógico ou Nil;
um número ou texto devolvido por descuido pode quebrar o OK com erro de tipo.
Nem toda coluna da lista é número. No Brasil, saldo e valor a compensar
(posições 5 e 6) são texto já formatado com Transform, não valor
numérico. Para a regra de valor, não faça conta com essas colunas. A marcação
(posição 8, lógica), o tipo (4) e a identificação do título (prefixo, número e
parcela, posições 1 a 3) têm o mesmo significado em todas as localizações.
Disparado a cada clique no OK. Se o usuário for barrado e clicar de novo, o ponto de entrada roda de novo. Evite regra com efeito colateral, como gravar log ou enviar e-mail.
Posições de aTitulos que o exemplo usa
| Posição | Conteúdo |
|---|---|
| 1 | Prefixo |
| 2 | Número do título |
| 3 | Parcela |
| 4 | Tipo |
| 8 | Título marcado para compensação (lógico) |
No Brasil, a lista tem mais colunas (fornecedor, emissão, vencimento real, valores). Só use as que sua regra precisa, e confirme no seu release o que cada uma guarda antes de depender dela.
Exemplo
A regra: impedir a compensação de títulos de certos tipos, definidos em um parâmetro próprio (não existe no padrão; crie-o no Configurador). Se o parâmetro estiver vazio, o ponto de entrada não interfere.
#Include "Protheus.ch"
/*/{Protheus.doc} F340VALOK
Executado em FA340OK(), ao clicar OK na lista de titulos da compensacao a pagar.
Barra a compensacao quando ha titulo marcado de tipo nao permitido.
@type function
@return logical, .F. mantem o usuario na lista; Nil mantem a pergunta padrao
/*/
User Function F340VALOK()
Local aTitulos := PARAMIXB[1]
Local cTipos := AllTrim(SuperGetMv("MV_XTPNCMP", .F., ""))
Local cLista := ""
Local nX := 0
// Sem parametro preenchido, nao opina.
If Empty(cTipos)
Return Nil
EndIf
For nX := 1 To Len(aTitulos)
// Posicao 8: marcado. Posicao 4: tipo do titulo.
If aTitulos[nX, 8] .And. ("|" + AllTrim(aTitulos[nX, 4]) + "|") $ ("|" + cTipos + "|")
cLista += AllTrim(aTitulos[nX, 1]) + "/" + AllTrim(aTitulos[nX, 2]) + "/" + AllTrim(aTitulos[nX, 3]) + Chr(13) + Chr(10)
EndIf
Next nX
If !Empty(cLista)
MsgAlert("Estes titulos nao podem ser compensados:" + Chr(13) + Chr(10) + cLista, "Compensacao")
Return .F.
EndIf
// Nil: o padrao faz a pergunta de confirmacao.
Return NilO conteúdo do parâmetro é uma lista de tipos separados por |, por exemplo
NF|FT. Confira no seu ambiente se ele existe:
SELECT X6_VAR, X6_TIPO, X6_DESCRIC, X6_CONTEUD
FROM SX6010
WHERE X6_VAR = 'MV_XTPNCMP'Ajuste o sufixo 010 para o da sua empresa. Se a consulta voltar vazia, o
parâmetro não foi criado e o código acima não bloqueia nada.
Quando usar outro
| Necessidade | Onde |
|---|---|
| Validar a tela anterior (dados da compensação), sem a lista de títulos | F340VLD |
Para o mecanismo geral de chamada, veja Ponto de entrada no Protheus.
Continue por aqui
- 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.
- Vídeo
DesenvolvimentoReferência técnica
M120VLPC: valida os pedidos de compra marcados antes de carregá-los no documento de entrada
M120VLPC roda depois do OK na tela de seleção de pedidos de compra do documento de entrada, recebe a lista marcada e, ao retornar .F., cancela a carga inteira sem mensagem.