CONTEÚDO
01. VISÃO GERAL
O uso da função MaIntBxCr() deve ser utilizado para realizar compensações de contas a receber de forma automática.
Por meio dessa função, é possível realizar compensações automáticas envolvendo as notas fiscais com os títulos de adiantamento (tipo RA) ou de devoluções (tipo NCC).
Parâmetros da rotina
Posição | Parâmetro | Tipo | Descrição |
---|---|---|---|
1 | nCaso | numeric | Código da operação a ser efetuada (numérico), devendo ser uma das opções (1, 2 ou 3): [1] Baixa simples do financeiro; [2] Liquidação de títulos; [3] Compensação de títulos de mesma carteira (RA/NCC). |
2 | aSE1 | array | Vetor com os RECNOs dos títulos a serem baixados (exemplo: NF ou boleto). |
3 | aBaixa | array | Vetor com os dados da baixa simples do financeiro. Segue abaixo o que deve ser informado em cada posição do vetor: [1] Motivo da Baixa; [2] Valor Recebido; [3] Banco; [4] Agência; [5] Conta; [6] Data de Crédito; [7] Data da Baixa. *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[1] Baixa simples do financeiro". |
4 | aNCC_RA | array | Vetor com os RECNOs dos títulos de créditos a serem compensados (exemplo: RA ou NCC) *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[3] Compensação de títulos de mesma carteira (RA/NCC)". |
5 | aLiquidacao | array | Vetor com os dados da liquidação do financeiro. Segue abaixo o que deve ser informado em cada posição do vetor: [1] Prefixo; [2] Banco; [3] Agencia; [4] Conta; [5] Numero do Cheque; [6] Data Boa; [7] Valor; [8] Tipo; [9] Natureza; [10] Moeda; [14] Número da liquidação (no caso de estorno) *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[2] Liquidação de títulos". |
6 | aParam | array | Vetor com os parâmetros da rotina. Segue abaixo o que deve ser informado em cada posição do vetor: [1] Contabiliza On-Line; [2] Aglutina Lançamentos Contábeis; [3] Digita lançamentos contábeis; [4] Juros para Comissão; [5] Desconto para Comissão; [6] Calcula Comissão. |
7 | NIL | NIL | Parâmetro interno. |
8 | aEstorno | array | Informar o vetor caso deseje realizar o estorno da movimentação. Quando a posição 1 for definida para compensação (nCaso = 3):
Quando a posição 1 for definida para liquidação (nCaso = 2):)
|
9 | NIL | NIL | Parâmetro interno. |
10 | NIL | NIL | Parâmetro interno. |
11 | nSaldoComp | numeric | Valor a compensar - Informe o valor que deseja compensar. Este valor deve ser menor ou igual ao saldo do título e maior que zero. Para compensação total, informar NIL. |
12 | aCpoUser | array | Vetor com os campos de usuário para gravação da liquidação. *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[2] Liquidação de títulos". |
13 | aNCC_RAvlr | array | Parâmetro interno. |
14 | nSomaCheq | numeric | Parâmetro interno. |
15 | nTaxaCM | numeric | Taxa para correção monetária. |
16 | aTxMoeda | array | Vetor com as taxas das moedas existentes. [1] Moeda; [2] Taxa da Moeda; |
17 | lConsdAbat | logical | Variável logica para considerar os abatimentos. *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[3] Compensação de títulos de mesma carteira (RA/NCC)". |
18 | NIL | NIL | Parâmetro interno. |
19 | NIL | NIL | Parâmetro interno. |
20 | lResidual | logical | Indica se o saldo do título será zerado caso atinja um valor menor que a margem de valor residual. O Default deste parâmetro é .T. (zera o saldo) *Essa posição só deve ser informada quando a posição 1 (nCaso) for definida como "[3] Compensação de títulos de mesma carteira (RA/NCC)". |
Compensação Automática - Execução automática X manual (FINA330)
- A compensação automática através da MaIntBxCr em sua concepção não fazia uso das regras e validações da rotina de Compensação de Títulos a Receber (FINA330). Sendo assim, alguns tratamentos são diferentes de acordo com o uso da rotina.
- Com a criação do parâmetro MV_CMP330, ao ativa-lo, são acionas algumas funcionalidades da rotina FINA330 para que a execução automática se aproxime de tratamentos e validações da rotina manual. Por exemplo, o calculo dos impostos não são realizados no modelo nativo da MaIntBxCr, mas pode ser configurado através do parâmetro MV_CMP330 para que a execução automática faça a geração dos impostos atrelados ao título compensado.
- A rotina de compensação manual (FINA330) possibilita que a data da compensação/baixa seja determinada pelo usuário em tela. Já para a execução automática (MaIntBxCr) não há um parâmetro da rotina para especificar a data de compensação. Portanto, para determinar a data, deve ser manipulado o conteúdo da variável global dDataBase;
Uso da MaIntBxCr em rotinas padronizadas
A função MaIntBxCr() também é utilizada em rotinas padrão do sistema, como por exemplo no Documento de Entrada (MATA103), que a utiliza para efetivar compensações automáticas:
- Através do parâmetro MV_CMPDEVV é possível configurar para que em notas fiscais de devolução venda (total ou parcial), o título de crédito (tipo NCC) seja compensado automaticamente.
- A configuração do parâmetro MV_CHECKNF determina se a situação de carteira do título a receber deve ser considerada na compensação automática;
- Caso seja necessário que a compensação automática não seja realizada em determinados casos, pode ser usado o ponto de entrada MT103BXCR para indicar a regra desejada;
- A rotina tentará compensar a NCC com o título referente a nota de saída devolvida, mas se o título do contas a receber já estiver baixado, o sistema deixará a NCC em aberto para posterior compensação manual através da rotina Compensação de Títulos a Receber (FINA330);
- Caso a devolução seja parcial e envolvendo itens/produtos de várias notas faturadas (Documento de Saída), a compensação automática não avalia a proporcionalidade devolvida de cada NF e sim o total devolvido X NFs vinculadas na devolução. Portanto, o sistema irá considerar o total da NCC e irá realizar a compensação com a primeira NF, enquanto houver saldo disponivel. Só será realizada a compensação com as demais NFs, quando o saldo da primeira NF for zerado.
02. EXEMPLOS DE UTILIZAÇÃO
#INCLUDE "PROTHEUS.CH" #INCLUDE "TBICONN.CH" //------------------------------------------------------------------- /*/ MaIntBxCr Exemplo de compensação de títulos normais com adiantamentos - CR @since 27/07/2021 @version 1.0 /*/ //------------------------------------------------------------------- USER FUNCTION CmpAutCR() Local lRetOK := .T. Local aArea := GetArea() Local nTaxaCM := 5.2322 Local aTxMoeda := {} Local nSaldoComp:= 1000.00 *nTaxaCM // Valor a ser compensado (Caso seja parcial Pode ser parcial) - Compensar apenas R$ 50,00 Local dDtComp := CTOD(" / / ") Private nRecnoNDF Private nRecnoE1 PREPARE ENVIRONMENT EMPRESA "TI" FILIAL "D MG 01 " MODULO "FIN" TABLES "SE2TI0","SE5TI0","SA6TI0","SEDTI0" Conout("----Inicio da Rotina Automatica!------") dbSelectArea("SE1") dbSetOrder(2) // E1_FILIAL, E1_CLIENTE, E1_LOJA, E1_PREFIXO, E1_NUM, E1_PARCELA, E1_TIPO, R_E_C_N_O_, D_E_L_E_T_ IF dbSeek(XFILIAL("SE1")+"000000"+"00"+"331"+"RA0001 "+" "+"RA ") nRecnoRA := RECNO() dDtComp := SE1->E1_EMISSAO IF dbSeek(XFILIAL("SE1")+"000000"+"00"+"331"+"000001 "+" "+"DP ") nRecnoE1 := RECNO() PERGUNTE("FIN330",.F.) lContabiliza := (MV_PAR09 == 1) // Contabiliza On Line ? lDigita := (MV_PAR07 == 1) // Mostra Lanc Contab ? lAglutina := .F. /* ==> Utilizar esse trecho se quiser simular o botão Taxas da tela inicial do FINA330 ==> Verifique os parâmetros MV_CMP330 e MV_CMTXCON para tal. nTaxaCM := RecMoeda(dDataBase,SE1->E1_MOEDA) aAdd(aTxMoeda, {1, 1} ) aAdd(aTxMoeda, {2, nTaxaCM} ) */ SE1->(dbSetOrder(1)) //E1_FILIAL+E1_PREFIXO+E1_NUM+E1_PARCELA+E1_TIPO+E1_FORNECE+E1_LOJA //NF X RA aRecRA := { nRecnoRA } aRecSE1 := { nRecnoE1 } /* //RA X NF aRecRA := { nRecnoE1 } aRecSE1 := { nRecnoRA } */ //Data a ser considerada na compensação dDataBase := dDtComp If !MaIntBxCR(3, aRecSE1,,aRecRA,,{lContabiliza,lAglutina,lDigita,.F.,.F.,.F.},,,,,nSaldoComp,,,, nTaxaCM, aTxMoeda) Help("XAFCMPAD",1,"HELP","XAFCMPAD","Não foi possível a compensação"+CRLF+" do titulo de adiantamento",1,0) lRet := .F. ENDIF ENDIF ENDIF RestArea(aArea) RESET ENVIRONMENT Return lRet