Árvore de páginas

Rotina Automática com Rateio por Centro de Custo e Natureza

Produto:

Microsiga Protheus

Versões:

11 e 12

Ocorrência:

Exemplo de Execauto para utilizar a rotina Contas a Receber com Rateio por Centro de Custo e Natureza (FINA040)

Passo a passo:

Na rotina automática com rateio multi-naturezas no Contas a Receber (FINA040) é possível incluir e excluir títulos.

Caso o título tenha o valor principal alterado, o rateio automaticamente é atualizado com base nas porcentagens de distribuição já definidas na inclusão. 

Para isto é necessário habilitar o parâmetro MV_MULNATR com o conteúdo .T.

Neste exemplo é utilizada uma natureza e dois centros de custo para cada natureza.

Observações:

Foi executado o compatibilizador U_CTBWIZENT para a criação das entidades contábeis adicionais utilizadas no exemplo.

 

Exemplo:

#INCLUDE "PROTHEUS.CH"

User Function MyFINA040()

Local aCab := {} //Array com os Dados do Titulo a Receber
Local aAuxEv := {} //Array Auxiliar do Rateio Multinaturezas
Local aRatEvEz := {} //Array do Rateio Multinaturezas
Local aAuxEz := {} //Array Auxiliar de Multiplos Centros de Custo
Local aRatEz := {} //Array do Rateio de Centro de Custo em Multiplas Naturezas
Local nI := 0
Local cTitulo := "000000001"
Local cRet := ""

Private lMsErroAuto := .F.
Private lAutoErrNoFile := .T.

PREPARE ENVIRONMENT EMPRESA "99" FILIAL "01" MODULO "FIN"

Aadd(aCab, {"E1_PREFIXO", "NFE", NIL})
Aadd(aCab, {"E1_NUM", cTitulo, NIL})
Aadd(aCab, {"E1_PARCELA", "A", NIL})
Aadd(aCab, {"E1_TIPO", "NF ", NIL})
Aadd(aCab, {"E1_NATUREZ", "0000000001", NIL})
Aadd(aCab, {"E1_CLIENTE", "000001", NIL})
Aadd(aCab, {"E1_LOJA", "01", NIL})
Aadd(aCab, {"E1_EMISSAO", dDataBase, NIL})
Aadd(aCab, {"E1_VENCTO", dDataBase, NIL})
Aadd(aCab, {"E1_VALOR", 100, NIL})
Aadd(aCab, {"E1_MULTNAT", "1", NIL}) //Rateio Multinaturezas == 1 - Sim

//Adicionando o vetor da natureza
Aadd(aAuxEv,{"EV_NATUREZ", "0000000001", NIL }) //Natureza a Ratear
Aadd(aAuxEv,{"EV_VALOR", 100, NIL }) //Valor do Rateio na Natureza
Aadd(aAuxEv,{"EV_PERC", 100, NIL }) //Percentual do Rateio na Natureza
Aadd(aAuxEv,{"EV_RATEICC", "1", NIL }) //Rateio por Centro de Custo == 1 - Sim

//Adicionando Multiplos Centros de Custo

//Primeiro Centro de Custo
aAuxEz := {}
Aadd( aAuxEz, {"EZ_CCUSTO", "000000001", NIL}) //Centro de Custo da Natureza
Aadd( aAuxEz, {"EZ_ITEMCTA", "000000001", NIL}) //Item Conta da Natureza
Aadd( aAuxEz, {"EZ_VALOR", 50, NIL}) //Valor do Rateio neste Centro de Custo
Aadd( aAuxEz, {"EZ_CLVL", "0000000001", NIL})
Aadd( aAuxEz, {"EZ_EC05DB", "ENT05D", NIL})
Aadd( aAuxEz, {"EZ_EC05CR", "ENT05C", NIL})
Aadd( aAuxEz, {"EZ_EC06DB", "ENT06D", NIL})
Aadd( aAuxEz, {"EZ_EC06CR", "ENT06C", NIL})
Aadd( aAuxEz, {"EZ_EC07DB", "ENT07D", NIL})
Aadd( aAuxEz, {"EZ_EC07CR", "ENT07C", NIL})
Aadd( aAuxEz, {"EZ_EC08DB", "ENT08D", NIL})
Aadd( aAuxEz, {"EZ_EC08CR", "ENT08C", NIL})
Aadd( aAuxEz, {"EZ_EC09DB", "ENT09D", NIL})
Aadd( aAuxEz, {"EZ_EC09CR", "ENT09C", NIL})
Aadd(aRatEz, aAuxEz)

//Segundo Centro de Custo
aAuxEz := {}
Aadd( aAuxEz, {"EZ_CCUSTO", "000000002", NIL}) //Centro de Custo da Natureza
Aadd( aAuxEz, {"EZ_ITEMCTA", "000000002", NIL}) //Item Conta da Natureza
Aadd( aAuxEz, {"EZ_VALOR", 50, NIL}) //Valor do Rateio neste Centro de Custo
Aadd( aAuxEz, {"EZ_CLVL", "0000000002", NIL})
Aadd( aAuxEz, {"EZ_EC05DB", "ENT05D", NIL})
Aadd( aAuxEz, {"EZ_EC05CR", "ENT05C", NIL})
Aadd( aAuxEz, {"EZ_EC06DB", "ENT06D", NIL})
Aadd( aAuxEz, {"EZ_EC06CR", "ENT06C", NIL})
Aadd( aAuxEz, {"EZ_EC07DB", "ENT07D", NIL})
Aadd( aAuxEz, {"EZ_EC07CR", "ENT07C", NIL})
Aadd( aAuxEz, {"EZ_EC08DB", "ENT08D", NIL})
Aadd( aAuxEz, {"EZ_EC08CR", "ENT08C", NIL})
Aadd( aAuxEz, {"EZ_EC09DB", "ENT09D", NIL})
Aadd( aAuxEz, {"EZ_EC09CR", "ENT09C", NIL})
Aadd(aRatEz, aAuxEz)

Aadd(aAuxEv,{"AUTRATEICC", aRatEz, NIL}) //Recebendo dentro do Array da Natureza os Multiplos Centros de Custo
Aadd(aRatEvEz,aAuxEv) //Adicionando a Natureza ao Rateio de Multiplas Naturezas

MsExecAuto({ |x, y, z, a, b| FINA040(x, y, z, a, b)}, aCab, 3, NIL, aRatEvEz)

If lMsErroAuto

If IsBlind()

aLog := GetAutoGRLog()
cRet := + "ERRO" + CRLF

For nI := 1 to len(aLog)

cRet += aLog[nI] + CRLF

Next nI

ConOut(cRet)

Else

mostraErro()

EndIf

Else

If IsBlind()

ConOut(CRLF + "Operação realizada com sucesso " + CRLF + "Numero do Titulo Incluido : " + SE1->E1_NUM)

Else

MsgInfo("Operação realizada com sucesso " + CRLF + "Numero do titulo Incluido : " + SE1->E1_NUM)

EndIf

EndIf

RESET ENVIRONMENT

Return NIL