Pragiva — Tecnologia na prática

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.

Desenvolvimento Referência técnica 3 min de leitura

Assista o vídeo Ver o fluxograma

F340VLD em resumo

Onde fica
função Fa340TudOk(), a validação do OK da primeira tela da compensação (rotina fA340Comp, 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.

NãoSimNãoSimUsuário escolhe o título e abre acompensaçãoTela de parâmetros: título, valor acompensar, data da baixaOKCampos válidos?F340VLDRetorno .T.?Seleção dos títulosOK da seleção: F340ValOk, seexistir

O que acontece com o retorno

RetornoEfeito
.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 entradaVale 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ávelConteúdo
cPrefixo, cNum, cParcela, cTipoTitChave do título a compensar
cFornece, cLojaFornecedor e loja
nValorValor a compensar, como digitado
dBaixaData da baixa
nMoeda340Moeda do título

O 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 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.

ADVPL / TLPP
#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 lRet

Todos os caminhos terminam em .T. ou .F., como o botão OK exige.

Confira no seu ambienteSQL
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

NecessidadePonto 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çãoF340VALOK

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