F340VLD em resumo
- Onde fica
- função
Fa340TudOk(), a validação do OK da primeira tela da compensação (rotinafA340Comp, do FINA340). - Quando dispara
- ao clicar em OK na tela de parâmetros da compensação, depois da validação dos campos e antes da tela que lista os títulos.
- PARAMIXB
- nenhum. O padrão chama o ponto de entrada sem passar parâmetros.
- Retorno
- usado e sem conversão — o valor volta direto ao botão OK. Devolva sempre lógico.
- Serve para bloquear?
- Sim. Com
.F.a tela continua aberta e a compensação não avança.
Consulta rápida5 seções
É o ponto de entrada para dizer “este título, com estes dados, não compensa”. Ele roda cedo: o usuário ainda não marcou nenhum título para compensar.
O que acontece com o retorno
| Retorno | Efeito |
|---|---|
.T. | A tela de parâmetros fecha e o padrão carrega os títulos para seleção |
.F. | A tela de parâmetros continua aberta; o usuário pode corrigir os dados e confirmar de novo |
| Sem ponto de entrada | Vale só a validação dos campos |
O padrão não mostra mensagem quando o seu ponto de entrada devolve .F.. A
mensagem de erro do padrão (F340Erro) aparece só quando um campo da tela
reprova, e nesse caso o F340VLD nem chega a rodar. Se você bloquear calado, o
botão OK parece quebrado: sempre exiba um Help() antes de devolver .F..
O que dá para ler dentro dele
Sem PARAMIXB, o ponto de entrada trabalha com o que a rotina deixou à vista.
A rotina declara como variáveis privadas, e portanto visíveis
para o seu fonte, o título e os dados digitados na tela:
| Variável | Conteúdo |
|---|---|
cPrefixo, cNum, cParcela, cTipoTit | Chave do título a compensar |
cFornece, cLoja | Fornecedor e loja |
nValor | Valor a compensar, como digitado |
dBaixa | Data da baixa |
nMoeda340 | Moeda do título |
O SE2 também está posicionado no título escolhido no browse. O saldo exibido
na tela não é declarado de forma explícita pela rotina, então não conte com
ele: se precisar do saldo, leia E2_SALDO do SE2.
Armadilhas
Retorno que não é lógico não é corrigido. Nos campos da tela o padrão
converte um retorno não lógico em .T.. No F340VLD não: o que você devolver
vai direto para o If do botão OK. Um Return Nil por descuido é erro, não
aprovação. Garanta .T. ou .F. em todos os caminhos.
Ele roda também na compensação automática. O padrão pula só a validação
dos campos quando a rotina é chamada em modo automático; o ponto de entrada é
chamado do mesmo jeito. Não abra MsgYesNo nem tela nenhuma ali. No modo
automático, um .F. encerra a rotina sem compensar.
Ele não conhece os títulos marcados. Quando roda, a lista de títulos ainda
nem foi montada. Regra que depende de quais títulos entram na compensação não
cabe aqui: veja o F340VALOK, abaixo.
Roda de novo a cada OK. Depois de um .F. o usuário corrige e confirma outra
vez, e o ponto de entrada executa de novo. Mantenha-o leve e sem gravação.
Exemplo
O exemplo barra a compensação com data de baixa retroativa além de um limite de dias em relação à data-base. O limite fica em parâmetro próprio (não existe no padrão; crie-o no Configurador) e, com ele zerado, a regra se desliga sem recompilar.
#Include "Protheus.ch"
/*/{Protheus.doc} F340VLD
Executado em Fa340TudOk(), ao confirmar a tela de parametros da compensacao a pagar.
Barra a compensacao com data de baixa retroativa alem do limite configurado.
@type function
@return logical, .F. mantem a tela aberta e impede a compensacao
/*/
User Function F340VLD()
Local lRet := .T.
Local nDias := 0
// Sem PARAMIXB: o padrao nao passa parametros.
// Limite zerado (ou parametro inexistente) desliga a regra.
nDias := SuperGetMv("MV_XCMPDIA", .F., 0)
If ValType(nDias) <> "N" .Or. nDias <= 0
Return .T.
EndIf
// dBaixa e variavel privada da rotina de compensacao.
If Type("dBaixa") <> "D"
Return .T.
EndIf
If dBaixa < (dDataBase - nDias)
// O padrao nao exibe mensagem para o retorno deste ponto de entrada.
Help(" ", 1, "F340VLD",, ;
"Data da baixa anterior ao limite de " + cValToChar(nDias) + ;
" dia(s) em relacao a data-base. Compensacao nao permitida.", 1, 0)
lRet := .F.
EndIf
Return lRetTodos os caminhos terminam em .T. ou .F., como o botão OK exige.
SELECT X6_VAR, X6_TIPO, X6_DESCRIC, X6_CONTEUD
FROM SX6010
WHERE X6_VAR = 'MV_XCMPDIA'Se a consulta voltar vazia, o parâmetro não foi criado e o código acima deixa a
regra desligada. Ajuste o sufixo 010 para o da sua empresa.
Quando usar outro
| Necessidade | Ponto de entrada |
|---|---|
Decidir antes mesmo de abrir a tela de parâmetros (retorno .F. encerra a rotina) | F340COMP |
| Decidir com base nos títulos marcados, na tela de seleção | F340VALOK |
O F340VALOK recebe {aTitulos} e roda ao confirmar a seleção; se ele devolver
Nil, o padrão faz a pergunta de confirmação da marcação. Detalhes em
F340VALOK.
Para o contexto da compensação de PA com a nota, veja Pagamento antecipado (PA) e compensação no Contas a Pagar. Para entender o mecanismo geral de chamada, veja Ponto de entrada no Protheus.
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
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.