Árvore de páginas

Sintaxe das funções FBUSCAACM e FBUSCAACMPER

Produto:

Microsiga Protheus

Ocorrência:

Necessidade de uma documentação, apresentando exemplos de utilização das funções FBUSCAACM e FBUSCAACMPER

Passo a passo:

Basicamente, as funções fBuscaAcm e fBuscaAcmPer tem por finalidade, retornar o valor, ou a quantidade, de uma ou mais verbas, à partir dos lançamentos acumulados do funcionário que está sendo processado no momento do cálculo.

Abaixo, serão demonstrados os exemplos de cada função, onde a situação é:

Apresentar a média das comissões do funcionário, considerando os meses de acordo com o cadastro de sindicato.

Dados do cenário

Campo de médias do cadastro de sindicato = 0.

Admissão do funcionário =  01/01/2017

Competência do cálculo = 31/03/2018

Comissões lançadas:

Mês 01/2018 = 5000,00 reais

Mes 02/2018 = 1000,00 reais.


#INCLUDE "PROTHEUS.CH"
#INCLUDE "TOPCONN.CH"


/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----- Exemplo de um cálculo de médias, buscando as verbas de comissão-------------------
----- Autor: Henrique Ferreira ---------------------------------------------------------
----- Data: 26/12/2018 -----------------------------------------------------------------
----- Protheus 12.1.17 -----------------------------------------------------------------
----- Sintaxe fBuscaAcm ----------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/

User Function Exemplo()

Local dDtFimBu := dDataDe - 1 // data de término para a busca é o mes anterior à competencia do cálculo.
Local nQtdMes := DateDifFMonth(dDtFimBu,SRA->RA_ADMISSA) // Diferença de meses entre o primeiro dia do mes anterior e a data de admissão do funcionário.
Local dDtInici := MonthSub(dDtFimBu,nQtdMes) // Data de inicio da busca, subtraindo os meses da admissão.
Local nMesSind := RCE->RCE_MED01 // médias de acordo com o sindicato.
Local nValComi := 0
Local nMedComi := 0
Local nQtdComi := 0
Local cVerbas := aCodFol[165,1] + "/" + aCodFol[166,1] //Verbas de Comissão + DSR de Comissão.

If cTipoRot == "1" // Se o roteiro for Folha.

// Se a quantidade de meses do cadastro de sindicatos for 0, então considera-se 12 meses.
If nMesSind == 0
nMesSind := 12
EndIf

// Trata a quantidade de meses entre a admissão do funcionário, para não extrapolar a quantidade do sindicato.
If nQtdMes >= nMesSind
nQtdMes := nMesSind
EndIf

/*
Sintaxe
fBuscaAcm
cVerbas := Verbas que serão buscadas.
cStrSrv := Condição para busca das verbas
dPerIni := Data de busca inicial, de acordo com a SRD.
dPerFim := Data de busca final
cRetVH := Tipo de Retorno, "D","H","V"
nValor := Variavel de valor
nQtd := Variavel de quantidade.
lValoriza := Variavel que define a valorizacao das verbas lancadas em horas ou dias pelo valor do salario hora e salario dia.
l13o := Se será considerado o 13.
lMatern := Variavel que define se o calculo que esta sendo feito e para medias de licenca maternidade
lVerbas := uParam11
lRetNeg := Se permitira retorno negativo.
cAnoMesIni := MesAno(dPerIni)
cAnoMesFim := MesAno(dPerFim)

*/
//O Retorno deve ser armazenado em uma variável
nValComi := fBuscaAcm(cVerbas,,dDtInici,dDtFimBu,"V",nValComi,nQtdComi)
nMedComi := nValComi/nQtdMes // Apuro as médias

Alert("Exemplo da função fBuscaAcm, onde o valor da média é: " + cValToChar(nMedComi) + " Reais")
EndIf

Return


Abaixo, o resultado do exemplo

Memória de cálculo

5000,00 + 1000,00 = 6000,00

6000,00 / 12 = 500,00


/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----- Exemplo de um cálculo de médias, buscando as verbas de comissão-------------------
----- Autor: Henrique Ferreira ---------------------------------------------------------
----- Data: 26/03/2018 -----------------------------------------------------------------
----- Protheus 12.1.17 -----------------------------------------------------------------
----- Sintaxe fBuscaAcmPer--------------------------------------------------------------
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/

User Function Exemplo2()

Local dDtFimBu := dDataDe - 1 // data de término para a busca é o mes anterior à competencia do cálculo.
Local nQtdMes := DateDifFMonth(dDtFimBu,SRA->RA_ADMISSA) // Diferença de meses entre o primeiro dia do mes anterior e a data de admissão do funcionário.
Local cDtFimBu := AnoMes(dDtFimBu) // Padrão mes ano para a variável dDtFimBu
Local cDtInici := AnoMes(MonthSub(dDtFimBu,nQtdMes)) // Data de inicio da busca, subtraindo os meses da admissão.
Local nMesSind := RCE->RCE_MED01 // médias de acordo com o sindicato.
Local nValComi := 0
Local nMedComi := 0
Local nQtdComi := 0
Local cVerbas := aCodFol[165,1] + "/" + aCodFol[166,1] //Verbas de Comissão + DSR de Comissão.

If cTipoRot == "1" // Se o roteiro for Folha.

// Se a quantidade de meses do cadastro de sindicatos for 0, então considera-se 12 meses.
If nMesSind == 0
nMesSind := 12
EndIf

// Trata a quantidade de meses entre a admissão do funcionário, para não extrapolar a quantidade do sindicato.
If nQtdMes >= nMesSind
nQtdMes := nMesSind
EndIf

/*
Sintaxe
fBuscaAcmPer
cVerbas ,; // Lista de Verbas a acumular
cStrSrv ,; // Condicao do cadastro de verbas para somatorio dos valores ou horas
cRetVH ,; // Tipo do Retorno (em (H) horas ou em (V) valores)
nValor ,; // Retorno da soma em valores - por referencia
nQtd ,; // Retorno da soma em horas - por referencia
cPerIni ,; // Periodo Inicial
cPerFim ,; // Periodo Final
cNumPgtIni ,; // Numero de Pagamento Inicial
cNumPgtFim ,; // Numero de Pagamento Final
cRoteiro ,; // Lista de Roteiro de Execucao
lVerbas ,; //Acumula por Verbas
lRetNeg ,; //Retorna Negativo
cDataRef ,; //Data de Referencia
cDtRefFim ; //Data de Referencia Fim

*/
//O Retorno deve ser armazenado em uma variável
nValComi := fBuscaAcmPer(cVerbas,,"V",nValComi,nQtdComi,cDtInici,cDtFimBu,"01","99","FOL")
nMedComi := nValComi/nQtdMes // Apuro as médias

Alert("Exemplo da função fBuscaAcmPer, onde o valor da média é: " + cValToChar(nMedComi) + " Reais")
EndIf

Return

Abaixo, o resultado do exemplo

Memória de cálculo

5000,00 + 1000,00 = 6000,00


6000,00 / 12 = 500,00


Observações:

Esse pequeno exemplo pode ser utilizado tanto em forma de fonte (Arquivo .PRX), quanto dentro da rotina de fórmulas da folha.

Quando for utilizado como fonte, o fonte deve ser compilado no RPO e a formula deve ser criada dentro da rotina de Formulas, e vinculada no roteiro que será utilizado para cálculo.

No exemplo, foi utilizada a função alert. Contudo, pode ser utilizada a função fGeraVerba, para gerar o valor no lançamento do funcionario. Mais detalhes da função fGeraVerba, aqui (http://tdn.totvs.com/pages/releaseview.action?pageId=6079039)