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