Para usar a rotina de compensação automática conta a pagar é necessário chamar a função: FinCmpAut.
A compensação pode ser realizada de 1 PA / NF para muitos títulos

Parâmetros da função:

ParâmetroTipo Descrição
aNFarrayVetor com os recnos das notas a serem compensadas
aPA_NDFarrayVetor com os recnos dos PA/NDF's a serem compensados
aContabilarrayVetor de 3 posições:  [1] - Contabiliza Online, [2] - Aglutina os movimentos contábeis, [3] - Mostra laçamento contábil
aEstornoarrayVetor, com recnos a serem cancelados
nSldCompnuméricoNumérico com valor determinado a ser compensado. Caso não seja informado será considerado o saldo de cada título.
dBaixadateData de realização da compensação
nTaxaPAnuméricoTaxa de movimento a ser considerada no PA para moedas estrangeiras
nTaxaNFnuméricoTaxa de movimento a ser considerada no NF em moedas estrangeiras
nHdlnuméricoCabeçalho do arquivo contábil (Default = 0)
nOperacaonuméricoNa operação de estorno/exclusão determina a ação que será realizada nos movimentos da compensação. 2 = Gera movimento de estorno, 3=Exclui os movimentos


Exemplo de uso:

aBaixa[1]   = Filial
aBaixa[2]   = Prefixo
aBaixa[3]   = Número
aBaixa[4]   = Parcela
aBaixa[5]   = Tipo
aBaixa[6]   = Fornecedor
aBaixa[7]   = Loja
aBaixa[8]   = Descrição do Motivo da Baixa
aBaixa[9]   = Banco
aBaixa[10] = Agência
aBaixa[11] = Conta
aBaixa[12] = Data da Baixa.
aBaixa[13] = Data de Crédito
aBaixa[14] = Histórico
aBaixa[15] = Saldo

#Include 'Protheus.ch'
#include "tbiconn.ch"

User Function BxFINA080(nOpc, nVlrPag, nSeqBx)

Local cChave := ""
Local lRet := .T.

//Operação a ser realizada (3 = Baixa, 5 = cancelamento, 6 = Exclusão)
Default nOpc := 6
//Valor a ser baixado
Default nVlrPag := 0
//Sequência de baixa a ser cancelada.
Default nSeqBx := 1

Private lMsErroAuto := .F.
Private cHistBaixa := "Teste exclusão fina080"

DbSelectArea("SE2")
SE2->(dbSetOrder(1))
SE2->(dbGoTop())

cChave := SE2->(E2_FILIAL+E2_PREFIXO+E2_NUM+E2_PARCELA+E2_TIPO+E2_FORNECE+E2_LOJA)

If SE2->(dbSeek(cChave))
    If nOpc == 3
        If lRet := (nVlrPag + SE2->E2_SALDO) > 0
            nVlrPag := If(nVlrPag > 0, nVlrPag, SE2->E2_SALDO)
        EndIf
    ElseIf SE2->E2_VALOR >= SE2->E2_SALDO
        nVlrPag := 0
    EndIf
    
    If lRet
        aBaixa := {}        
        
        Aadd(aBaixa, {"E2_FILIAL", SE2->E2_FILIAL,  nil})
        Aadd(aBaixa, {"E2_PREFIXO", SE2->E2_PREFIXO,  nil})
        Aadd(aBaixa, {"E2_NUM", SE2->E2_NUM,      nil})
        Aadd(aBaixa, {"E2_PARCELA", SE2->E2_PARCELA,  nil})
        Aadd(aBaixa, {"E2_TIPO", SE2->E2_TIPO,     nil})
        Aadd(aBaixa, {"E2_FORNECE", SE2->E2_FORNECE,  nil})
        Aadd(aBaixa, {"E2_LOJA", SE2->E2_LOJA ,    nil})
        Aadd(aBaixa, {"AUTMOTBX", "NOR",            nil})
        Aadd(aBaixa, {"AUTBANCO", "001",            nil})
        Aadd(aBaixa, {"AUTAGENCIA", "AG001",          nil})
        Aadd(aBaixa, {"AUTCONTA", "CTA001 ",     nil})
        Aadd(aBaixa, {"AUTDTBAIXA", dDataBase,        nil})
        Aadd(aBaixa, {"AUTDTCREDITO", dDataBase,        nil})
        Aadd(aBaixa, {"AUTHIST", cHistBaixa,       nil})
        Aadd(aBaixa, {"AUTVLRPG", nVlrPag,          nil})

        //Pergunte da rotina
        AcessaPerg("FINA080", .F.)                  
        
        //Chama a execauto da rotina de baixa manual (FINA080)
        MsExecauto({|x,y,z,v| FINA080(x,y,z,v)}, aBaixa, nOpc, .F., nSeqBx)
        
        If lMsErroAuto
            MostraErro()
        Else
            If nOpc == 3
                Alert("Baixa efetuada com sucesso")
            Else
                Alert("Exclusão realizada com sucesso")
            EndIf
        EndIf
    Else
        Alert("O título não possui saldo a pagar em aberto")
    EndIf
Else
    Alert("O título a pagar não foi localizado")
EndIf

Return