Prezado tudo bem? Sei que você pediu do contas a pagar mas eu não tenho aqui agora. Todavia tenho um exemplo funciona para o contas a receber que é praticamente a mesma coisa.
User Function FINLIQ01( aRecnos, cTipo, cCond )
Local cNum := ""
Local nZ := 0
Local aCab := {}
Local aItens := {}
Local nOpc := 3 //3-Liquidação,4-Reliquidacao,5-Cancelamento da liquidação
Local cFiltro := ""
Local cNat := SuperGetMv("PM_NATCART",.F.,"") Local aParam := {}
Local aCliCart := StrTokArr(SuperGetMv("PM_CLIECAR",.F.,""), ";")
Local aBcoCart := StrTokArr(SuperGetMv("PM_BCOCART",.F.,""), ";")
Local lRet := .T.
Local cHist := ""
Local aParcelas := {}
Local nL := 0
Local nValor := 0
Local cItemCta := ""
Default cCond := ""
For nZ := 1 To Len(aRecnos)
SE1->(dbSelectArea("SE1"))
SE1->(dbSetOrder(1))
SE1->(msGoTo( aRecnos[nZ] ))
nValor := SE1->E1_VLCRUZ
RecLock("SE1",.F.)
SE1->E1_NATUREZ := cNat
MsUnLock()
aParam := { SE1->E1_PORTADO ,; //1 CODIGO DO BANCO
SE1->E1_CLIENTE ,; //2
SE1->E1_LOJA ,; //3
SE1->E1_PREFIXO ,; //4
SE1->E1_NUM ,; //5
SE1->E1_PARCELA ,; //6
SE1->E1_VENCREA ,; //7
SE1->E1_NOMCLI ,; //8
SE1->E1_VLCRUZ } //9
cFiltro := "E1_FILIAL=='" + xFilial("SE1") + "'.And."
//cFiltro += "E1_PORTADO=='" + aParam[1] + "'.And."
cFiltro += "E1_CLIENTE=='" + aParam[2] + "'.And."
cFiltro += "E1_LOJA=='" + aParam[3] + "' .And."
cFiltro += "E1_PREFIXO=='" + aParam[4] + "'.And."
cFiltro += "E1_NUM=='" + aParam[5] + "'.And."
//cFiltro += "E1_PARCELA=='" + aParam[6] + "'.And."
cFiltro += "E1_SALDO>0.And.Empty(E1_NUMLIQ)"
//Array do processo automatico (aAutoCab)
aCab := { {"CCONDICAO" , cCond },;
{"CNATUREZA" , cNat },;
{"E1_TIPO" , cTipo },;
{"CCLIENTE" , aCliCart[1] },;
{"NMOEDA" , SE1->E1_MOEDA },;
{"CLOJA" , aCliCart[2] }}
//----------------------------------------------------------------
//Não é possivel mandar Acrescimo e Decrescimo junto.
//Se mandar os dois valores maiores que zero considera Acrescimo
//----------------------------------------------------------------
cNum := PadR( cValToChar(Val(aParam[5])), TamSX3("E1_NUM")[1] ) //Transforma o número da nota sem os zeros à esquerda
cHist := "BX. AUTO LIQ. CARTAO"
cItemCta := U_ACTB000(aCliCart[1],aCliCart[2],"C")
//------------------------------------------------------------
//Monta as parcelas de acordo com a condição de pagamento
//------------------------------------------------------------
aParcelas := Condicao(nValor,cCond,,dDataBase)
If Len(aParcelas) > 0
For nL := 1 To Len(aParcelas)
Aadd(aItens,{ {"E1_PREFIXO" , cTipo },; //Prefixo
{"E1_TIPO" , cTipo },; //Prefixo
{"E1_BCOCHQ" , aBcoCart[1] },; //Banco
{"E1_AGECHQ" , aBcoCart[2] },; //Agencia
{"E1_CTACHQ" , aBcoCart[3] },; //Conta
{"E1_NUM" , cNum },; //Nro. cheque (dará origem ao numero do titulo)
{"E1_PARCELA" , StrZero(nL, TamSX3("E1_PARCELA")[1]) },; //Parcela
{"E1_EMITCHQ" , PadR(aParam[8],TamSX3("E1_EMITCHQ")[1]) },; //Emitente do cheque
{"E1_VENCTO" , aParcelas[nL,1] },; //Data boa
{"E1_VLCRUZ" , aParcelas[nL,2] },; //Valor do cheque/titulo
{"E1_HIST" , cHist },; //Histórico
{"E1_ITEMCTA" , cItemCta },; //Item contábil do cliente cartão
{"E1_ORIGEM" , "FINA460" },; //Origem da Rotina de Liquidacao
{"E1_ACRESC" , 0 },; //Acrescimo
{"E1_DECRESC" , 0 },; //Decrescimo
{"E1_TOTAL" , aParcelas[nL,2] }}) //Total
Next nL
EndIf
If Len(aItens) > 0
lMsErroAuto := .F.
lMsHelpAuto := .T.
//FINA460( , aCab, aItens, nOpc, cFiltro )
MSExecAuto( {|a,b,c,d,e| FINA460(a,b,c,d,e)}, , aCab, aItens, nOpc, cFiltro )
If lMsErroAuto
Alert("Não foi possível liquidar o título com pgto. Cartão. Informe o Financeiro e o TI sobre isto.")
MostraErro()
lRet := .F.
Else
F_AJUSTATIT(ALLTRIM(SE5->E5_DOCUMEN))
EndIf
aItens := {}
EndIf
Next nZ