Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

CONTEÚDO

Índice
maxLevel2
minLevel2

01. VISÃO GERAL

Para execução automática da compensação de contas a receber, é necessário o uso da função MaIntBxCr().

Por meio dessa função, é possível realizar a compensação automática entre dois títulos a receber (NF x Adiantamento).

Parâmetros da rotina

PosiçãoParâmetroTipoDescrição
1nCasonumeric

Código da operação a ser efetuada (numérico).

[1] Baixa simples do financeiro; [2] Liquidação de títulos; [3] Compensação de títulos de mesma carteira (RA/NCC).

2aSE1arrayVetor com os RECNOs dos títulos a serem baixados.
3aBaixaarray

Vetor com os dados da baixa simples do financeiro.

[1] Motivo da Baixa; [2] Valor Recebido; [3] Banco; [4] Agência; [5] Conta; [6] Data de Crédito; [7] Data da Baixa.

4aNCC_RAarrayVetor com os RECNOs dos títulos a serem compensados.
5aLiquidacaoarray

Vetor  com os dados da liquidação do financeiro.

[1] Prefixo; [2] Banco; [3] Agencia; [4] Conta; [5] Numero do Cheque; [6] Data Boa; [7] Valor; [8] Tipo; [9] Natureza; [10] Moeda.

6aParamarray

Vetor com os parâmetros da rotina

[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.

7NILNILParâmetro interno.
8aEstornoarrayVetor com o campo E5_DOCUMEN referente à movimentação de compensação que se deseja estornar, podendo a sequência se passada opcionalmente. Caso a sequência não seja informada, todas as compensação relativas aos documentos informados serão estornadas. Exemplo: {{{cDocumen}, cSeq}} ou {{cDocumen}}
9NILNILParâmetro interno.
10NILNILParâmetro interno.
11nSaldoCompnumericValor 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.
12aCpoUserarrayVetor com os campos de usuário para gravação da liquidação.
13aNCC_RAvlrarrayParâmetro interno.
14nSomaCheqnumericParâmetro interno.
15nTaxaCMnumericTaxa para correção monetária.
16aTxMoedaarray

Vetor  com as taxas das moedas existentes.

[1] Moeda; [2] Taxa da Moeda;

17lConsdAbatlogicalVariável logica para consideração dos abatimentos.
18NILNILParâmetro interno.
19NILNILParâmetro interno.



02. EXEMPLOS DE UTILIZAÇÃO


Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo #01 - Rotina automática para compensação
linenumberstrue
#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

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()
        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 }
			*/

            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
Bloco de código
languagejava
themeMidnight
firstline1
titleExemplo #02 - Rotina automática para compensação ou estorno
linenumberstrue
collapsetrue
#INCLUDE "PROTHEUS.CH"
#include "tbiconn.ch"

user function xCmpCR()
    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 aRecEst1 as array
    local aTxMoeda as array
    local cRecTit as character
    local cRecCmp as character
    local cJanela as character
    local cCodCanc as character
    local cValor as character
    local cSeq as character
    local lContabiliza as logical
    local lAglutina as logical
    local lDigita as logical
    local lHelp as logical
    local lConsdAbat as logical
    local nSldComp as numeric
    local nHdl as numeric
    local nOperacao as numeric
    local nTaxaCM as numeric

    cJanela := "Compensação automática CR"    
    aPerg := {}
    aRet := {}
    aEstorno := {}
    aRecTit := {}
    aRecCmp := {}
    aRecEst := {}
    aRecEst1 := {}
    aTxMoeda := {}
    cSeq := cValor := cCodCanc := cRecTit := cRecCmp := replicate(" ",50)
    nSldComp = 0   
    nHdl := 0
    nOperacao := 0 
    nTaxaCM := 0 
    lHelp := .F.
    lConsdAbat := .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.})
        aAdd(aPerg,{1, 'Sequencia Est.', cRecCmp, "@", nil, nil, nil, 50, .F.})

        if paramBox(aPerg, cJanela, aRet)
            aAdd(aRecTit, val(aRet[1]))
            cSeq := AllTrim(aRet[5])
            if aRet[3] = "1"
                aAdd(aRecCmp, val(aRet[2]))
            else
                aAdd(aRecEst, getDocumen(val(aRet[2])))
                if cSeq = ""   
                    aAdd(aEstorno, aRecEst)
                else
                    aAdd(aEstorno, {aRecEst,cSeq})
                endif
            endif
            if !Empty(AllTrim(aRet[4]))
                nSldComp := val(aRet[4])
            else
                nSldComp := nil
            endif

            if MaIntBxCR(3, aRecTit, nil ,aRecCmp, nil,{lContabiliza,lAglutina,lDigita,.F.,.F.,.F.},nil,aEstorno,nil,nil,nSldComp,nil,nil,nil, nTaxaCM, aTxMoeda, lConsdAbat)
                conOut("Processo concluido com exito.")
            else
                conOut("Processo nao concluido.")            
            endif
        endif

        conOut("FIM DA ROTINA AUTOMATICA")
    RESET ENVIRONMENT
Return nil

static function getDocumen(nRecSe1 as numeric)
    local cDocumen as character
    default cDocumen := ""

    SE1->(DbGoTo(nRecSe1))
    If SE1->(Recno()) == nRecSe1
        cDocumen := SE1->E1_PREFIXO + SE1->E1_NUM + SE1->E1_PARCELA + SE1->E1_TIPO + SE1->E1_LOJA
    EndIf
return cDocumen


03. PARÂMETROS APLICÁVEIS

04. PONTOS DE ENTRADA

...