Árvore de páginas

Versões comparadas

Chave

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

...

Dica
titleCompensaçã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).

Utilização do parâmetro MV_IMPCOM

...

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