Para utilizar o processo de Compensação Automática Contas a Pagar é necessário chamar a função: FinCmpAut.
A compensação pode ser realizada de N para N: N adiantamentos/devoluções (PA ou NDF) para N títulos (NF, DP, etc.) ou vice-versa.
O estorno será aplicado a todas as compensações realizadas entre os títulos informados em aNF e aEstorno, não sendo possível escolher uma sequência específica.
Cancelamento
Ao cancelar a compensação, para definir se será gerado o movimento de estorno na SE5, ou se o movimento será excluído da SE5, veja o ponto de entrada MaIntDel.
Compensação Automática com as mesmas regras do FINA340
O parâmetro MV_IMPCOM determina se a compensação automática de títulos a pagar será realizada no modelo legado (fonte apartado) ou com as regras do FINA340 (onde existe todo o processo de retenção dos impostos).
Acréscimo/Decréscimo
Para fazer compensações entre títulos NF x NDF e a nota fiscal possuir acréscimo (E2_ACRESC) e/ou decréscimo (E2_DECRESC), configure o parâmetro MV_IMPCOM como T (Verdadeiro). Dessa forma, será atualizado o saldo dos títulos NF e NDF considerando o acréscimo/decréscimo.
Já para as compensações entre títulos NF x PA com acréscimo (E2_ACRESC) e/ou decréscimo (E2_DECRESC), não há a necessidade de realizar configurações adicionais.
Parâmetros da função:
Posição | Parâmetro | Tipo | Descrição |
---|---|---|---|
1 | aNF | array | Vetor com os RECNOs das notas a serem compensadas |
2 | aPA_NDF | array | Vetor com os RECNOs dos PAs/NDFs a serem compensados |
3 | aContabil | array | Vetor de 3 posições: [1] - Contabiliza Online, [2] - Aglutina os movimentos contábeis, [3] - Mostra lançamento contábil |
4 | bBlock | bBlock | Bloco de código que será executado após cada compensação (Geração dos movimentos na tabela SE5). |
5 | aEstorno | array | Vetor de 1 elemento. Esse elemento será um outro vetor, contendo os RECNOs (SE2) a serem cancelados. |
6 | nSldComp | numérico | Numérico com valor determinado a ser compensado. Caso não seja informado será considerado o saldo de cada título. |
7 | dBaixa | date | Data de realização da compensação |
8 | nTaxaPA | numérico | Taxa de movimento a ser considerada no PA para moedas estrangeiras |
9 | nTaxaNF | numérico | Taxa de movimento a ser considerada na NF em moedas estrangeiras |
10 | nHdl | numérico | Cabeçalho do arquivo contábil (Default = 0) |
11 | nOperacao | numérico | Na 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 |
12 | aRecSe5 | array | Vetor que contém os RECNOsda SE5 para posterior contabilização |
13 | aNDFDados | array | Vetor com as informações das NDFs |
14 | lHelp | lógico | Informe .T. se deseja exibir o Help dos pagamentos antecipados que não possuem movimentação bancária |
#INCLUDE "Protheus.ch" #INCLUDE "RWMAKE.CH" #INCLUDE "TBICONN.CH" Static __COMPAUT := Nil User Function CMPAUTOMA() Local lRet := .F. Local cQry := "" Local aTipos := {"NF ", "PA ", "NDF"} Local cTblTmp := "" Local aNF := {} Local aPA_NDF := {} Local aContabil := {} Local bBlock := Nil Local aEstorno := {} Local nSldComp := 0 Local nTaxaPA := 0 Local nTaxaNF := 0 Local nHdl := 0 Local nOperacao := 0 Local aRecSE5 := {} Local aNDFDados := {} Local lHelp := .T. If __COMPAUT == Nil cQry := "SELECT E2_TIPO TIPO, R_E_C_N_O_ R_E_C_N_O FROM " + RetSqlName("SE2") + " " cQry += "WHERE E2_SALDO > 0 AND E2_TIPO IN (?) " cQry += "AND D_E_L_E_T_ = ' ' " cQry += "ORDER BY E2_TIPO" cQry := ChangeQuery(cQry) __COMPAUT := FWPreparedStatement():New(cQry) EndIf __COMPAUT:SetIn(1, aTipos) cQry := __COMPAUT:GetFixQuery() cTblTmp := MpSysOpenQuery(cQry) While (cTblTmp)->(!Eof()) If (cTblTmp)->TIPO $ MVPAGANT+"|"+MV_CPNEG Aadd(aPA_NDF, (cTblTmp)->R_E_C_N_O) Else Aadd(aNF, (cTblTmp)->R_E_C_N_O) EndIf (cTblTmp)->(DbSkip()) lRet := .T. EndDo (cTblTmp)->(DbCloseArea()) cTblTmp := "" If lRet Pergunte("AFI340", .F.) lContabiliza := MV_PAR11 == 1 lAglutina := MV_PAR08 == 1 lDigita := MV_PAR09 == 1 lRet := FinCmpAut(aNF, aPA_NDF, aContabil, bBlock, aEstorno, nSldComp, dDatabase, nTaxaPA ,nTaxaNF, nHdl, nOperacao, aRecSE5, aNDFDados, lHelp) If lRet Alert("Compensação realizada com sucesso") Else Alert("Ocorreu um erro no processo de compensação") EndIf Else Alert("Não existem dados a serem compensados") EndIf Return Nil
#INCLUDE "PROTHEUS.CH" #include "tbiconn.ch" user function xCmpCP() local aPerg as array local aRet as array local aEstorno as array local aRecTit as array local aRecCmp as array local aRecEst as array local cRecTit as character local cRecCmp as character local cJanela as character local cCodCanc as character local cValor as character local lContabiliza as logical local lAglutina as logical local lDigita as logical local lHelp as logical local nSldComp as numeric local nHdl as numeric local nOperacao as numeric cJanela := "Compensação automática CP" aPerg := {} aRet := {} aEstorno := {} aRecTit := {} aRecCmp := {} aRecEst := {} cValor := cCodCanc := cRecTit := cRecCmp := replicate(" ",50) nSldComp = 0 nHdl := 0 nOperacao := 0 lHelp := .F. PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "D MG 01 " MODULO "FIN" conOut("INICIO DA ROTINA AUTOMATICA") PERGUNTE("AFI340",.F.) lContabiliza := MV_PAR11 == 1 lAglutina := MV_PAR08 == 1 lDigita := MV_PAR09 == 1 aAdd(aPerg,{1, 'RecNo título de partida', cRecTit, "@", nil, nil, nil, 50, .T.}) aAdd(aPerg,{1, 'RecNo título a compensar', cRecCmp, "@", nil, nil, nil, 50, .T.}) aAdd(aPerg,{2, 'Comp/Est?', "1", {"1=Compensação","2=Estorno"}, 100, nil, .T.}) aAdd(aPerg,{1, 'Valor', cValor, "@", nil, nil, nil, 50, .F.}) if paramBox(aPerg, cJanela, aRet) aAdd(aRecTit, val(aRet[1])) if aRet[3] = "1" aAdd(aRecCmp, val(aRet[2])) else aAdd(aRecEst, val(aRet[2])) nOperacao := 2 // 2 = Gera movimento de estorno, 3=Exclui os movimentos aEstorno := {aRecEst} endif if !Empty(AllTrim(aRet[4])) nSldComp := val(aRet[4]) else nSaldo := nil endif if FinCmpAut(aRecTit, aRecCmp, {lContabiliza,lAglutina,lDigita}, /*bBlock*/, aEstorno, nSldComp, dDatabase, /*nTaxaPA*/,/*nTaxaNF*/, nHdl, nOperacao, /*aRecSE5*/, /*aNDFDados*/, lHelp) conOut("Processo concluido com exito.") else conOut("Processo nao concluido.") endif endif conOut("FIM DA ROTINA AUTOMATICA") RESET ENVIRONMENT Return nil