Histórico da Página
Para usar a rotina de compensação automática conta a pagar 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 1 PA / NF para muitos títulos, ou de N notas (NF) para N pagamentos antecipados (PA)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.
Dica | ||
---|---|---|
| ||
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. |
Dica | ||
---|---|---|
| ||
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). |
Informações | ||
---|---|---|
| ||
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 RECNOs das notas a serem compensadas |
2 | aPA_NDF | array | Vetor com os recnos RECNOs dos PAPAs/NDF's NDFs a serem compensados |
3 | aContabil | array | Vetor de 3 posições: [1] - Contabiliza Online, [2] - Aglutina os movimentos contábeis, [3] - Mostra laçamento 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 , com recnos 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 no 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 |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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 |
Bloco de código | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||
#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
|