Pragiva — Tecnologia na prática

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.

Desenvolvimento Referência técnica 3 min de leitura

Assista o vídeo Ver o fluxograma

F40DELPR em resumo

Onde fica
função Fa040Subst(), a rotina Substituir do Contas a Receber.
Quando dispara
uma vez, ao entrar na substituição, antes da tela de seleção dos provisórios.
PARAMIXB
nenhum. O padrão chama o ponto de entrada sem passar parâmetros.
Retorno
lógico. .T. troca o processo (exclui o provisório); qualquer outro valor vira .F..
Serve para bloquear?
Não. Ele escolhe o jeito de substituir, não impede a substituição.
Consulta rápida5 seções

O que ele muda

Na substituição, o título provisório (tipo PR) sai de cena e dá lugar ao título efetivo. O padrão tem dois caminhos para tirar o provisório:

Retorno do F40DELPRO que acontece com o provisório
.F. (ou ponto de entrada inexistente)É baixado por Fina070 com motivo de baixa , com histórico de substituição. O vínculo entre o provisório e o título efetivo é gravado na tabela auxiliar FIH
.T.É excluído (dbDelete) do , sem baixa e sem gravar o vínculo na FIH

Dito de outro jeito: sem o ponto de entrada você fica com o processo novo (baixar o PR); com ele devolvendo .T., volta o processo antigo, de excluir o provisório.

SimNão, ou sem PEUsuário clica em SubstituirFa040Subst() chama F40DELPRRetorno é .T.?Exclui o título PR do SE1Baixa o PR via Fina070, motivo STPGrava o vínculo na FIHTítulo efetivo fica sozinho

O que acontece em cada caminho

No caminho de exclusão (.T.), em cada provisório substituído o padrão:

  1. chama o F040PROV, se existir, antes de apagar;
  2. estorna o lançamento do SIGAPCO (PcoDetLan);
  3. atualiza o saldo da natureza quando o título controla fluxo de caixa e o parâmetro de saldo por natureza está ligado;
  4. na substituição manual, remove os registros das tabelas de apoio (FINDELFKs) pela chave do título;
  5. apaga o registro do SE1.

No caminho de baixa (.F.), o provisório é baixado por MSExecAuto de Fina070 e uma falha na baixa chama DisarmTransaction(). Na substituição manual a data da baixa é a emissão do título efetivo e o F040PROV roda depois da baixa; na automática nova a data é a data-base e o F040PROV não é chamado.

Repare na inversão: na substituição manual o F040PROV roda antes da exclusão e depois da baixa. Quem tem lógica pendurada nele precisa saber qual caminho está ativo.

Armadilhas

Ele é lido uma vez, na entrada. O valor sai da declaração das variáveis locais de Fa040Subst(). Não dá para decidir por título: a escolha vale para todos os provisórios daquela execução. Ele roda antes da tela de seleção, então a regra não pode depender dos provisórios escolhidos.

Retorno que não é lógico vira .F.. O padrão confere o tipo e, se não for lógico, assume .F.. Um Return Nil por descuido deixa o processo de baixa, sem erro e sem aviso.

Excluir o provisório não deixa rastro de baixa. Sem baixa não há movimento no com motivo STP, e o vínculo da FIH não é gravado. Relatório ou conciliação que dependa desse vínculo para ligar PR e título efetivo não enxerga a substituição feita assim.

Vale para a manual e para a automática nova. Há uma única leitura, na entrada. A substituição automática no formato antigo (lF040Auto sem a lista de títulos provisórios) não consulta o valor: sempre exclui o provisório, sem F040PROV e sem FINDELFKs.

Exemplo

O exemplo liga o processo antigo por uma chave de parâmetro, para existir sempre um jeito de desligar sem recompilar. O parâmetro é próprio (não existe no padrão); crie-o no Configurador.

ADVPL / TLPP
#Include "Protheus.ch"

/*/{Protheus.doc} F40DELPR
Executado em Fa040Subst(), na entrada da substituicao de titulo provisorio.
Retornando .T., o provisorio e excluido em vez de baixado.
@type function
@return logical, .T. exclui o provisorio; .F. baixa o provisorio (padrao)
/*/
User Function F40DELPR()

    Local lExclui := .F.

    // Sem PARAMIXB: o padrao nao passa parametros.
    // Padrao .F. mantem o processo de baixa do provisorio.
    lExclui := SuperGetMv("MV_XDELPRV", .F., .F.)

    // Garante retorno logico, mesmo com parametro mal cadastrado.
    If ValType(lExclui) <> "L"
        lExclui := .F.
    EndIf

Return lExclui

Poucas linhas de propósito: este ponto de entrada só decide. O que o .T. provoca está inteiro no padrão.

Confira no seu ambienteSQL
SELECT X6_VAR, X6_TIPO, X6_DESCRIC, X6_CONTEUD
  FROM SX6010
 WHERE X6_VAR = 'MV_XDELPRV'

Se a consulta voltar vazia, o parâmetro não foi criado e o código acima cai no padrão .F. (baixa do provisório). Ajuste o sufixo 010 para o da sua empresa.

Quando usar outro

NecessidadePonto de entrada
Rodar lógica própria ao tirar o provisório, antes da exclusão ou depois da baixaF040PROV

Para a inclusão normal de título, veja o FA040INC. Para entender o mecanismo geral de chamada, veja Ponto de entrada no Protheus.

Continue por aqui