Você está na página 1de 31

Criado :

16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Conceitos Básicos:
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Variáveis de Memória

Tipos de Dados

O AdvPl não é uma linguagem de tipos rígidos (strongly typed), o que significa que variáveis de
memória
podem diferentes tipos de dados durante a execução do programa. Variáveis podem também conter
objetos, mas os tipos primários da linguagem são:

Numérico

O AdvPl não diferencia valores inteiros de valores com ponto flutuante, portanto pode-se criar
variáveis
numéricas com qualquer valor dentro do intervalo permitido. Os seguintes elementos são do tipo de
dado numérico:
2 43.53
0.5
0.00001
1000000
Uma variável do tipo de dado numérico pode conter um número de dezoito dígitos incluindo o ponto
flutuante, no intervalo de 2.2250738585072014 E–308 até 1.7976931348623158 E+308.

Lógico

Valores lógicos em AdvPl são identificados através de .T. ou .Y. para verdadeiro e .F. ou .N. para falso
(independentemente se os caracteres estiverem em maiúsculo ou minúsculo).

Caracter

Strings ou cadeias de caracteres são identificadas em AdvPl por blocos de texto entre aspas duplas
(") ou aspas simples ('):

"Olá mundo!"
'Esta é uma string'
"Esta é 'outra' string"

Uma variável do tipo caracter pode conter strings com no máximo 1 Mb, ou seja, 1048576
caracteres.

Data
O AdvPl tem um tipo de dados específico para datas. Internamente as variáveis deste tipo de dado
são
armazenadas como um número correspondente a data Juliana.
Variáveis do tipo de dados Data não podem ser declaradas diretamente, e sim através da utilização
de
funções específicas como por exemplo ctod que converte uma string para data.

Matriz (Array)

Matrizes são um tipo de dado especial. É a disposição de outros elementos em colunas e linhas. O
AdvPl
suporta matrizes uni ou multidimensionais. Os elementos de uma matriz são acessados através de
índices
numéricos iniciados em 1, identificando a linha e coluna para quantas dimenões existirem.
Uma matriz pode conter no máximo 100000 elementos, independentemente do número de
dimensões.
Matrizes devem ser utilizadas com cautela, pois se forem muito grandes podem exaurir a memória do
servidor.
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Bloco de Código

O bloco de código é um tipo de dado especial. É utilizado para armazenar instruções escritas em
AdvPl
que poderão ser executadas posteriormente.

Criação e Atribuição de Variáveis

Variáveis de memória são um dos recursos mais importantes de uma linguagem. São áreas de
memória
criadas para armazenar informações utilizadas por um programa para a execução de tarefas. Por
exemplo, quando o usuário digita uma informação qualquer, como o nome de um produto, em uma
tela de um programa esta informação é armazenada em uma variável de memória para
posteriormente ser gravada ou impressa.
A partir do momento que uma variável é criada, não é necessário mais se referenciar ao seu
conteúdo, e sim ao seu nome. O nome de uma variável é um identificador único que segue duas
regras regras:

Máximo de 10 caracteres. O AdvPl não impede a criação de uma variável de memória cujo nome
contenha mais de 10 caracteres, porém apenas os 10 primeiros serão considerados para a
localização do conteúdo armazenado. Portanto se forem criadas duas variáveis cujos 10 primeiros
caracteres forem
iguais, como nTotalGeralAnual e nTotalGeralMensal, as referências a qualquer uma delas no programa
resultarão o mesmo. Ou seja, serão a mesma variável:

nTotalGeralMensal := 100
nTotalGeralAnual := 300
Alert("Valor mensal: " + cValToChar(nTotalGeralMensal))

Quando o conteúdo da variável nTotalGeralMensal é exibido, o seu valor será de 300. Isso acontece
porque no momento que esse valor foi atribuido à variável nTotalGeralAnual, o AdvPl considerou
apenas
os 10 primeiros caracteres (assim como o faz quando deve exibir o valor da variável
nTotalGeralMensal),
ou seja, considerou-as como a mesma variável. Assim o valor original de 100 foi substituido pelo de
300.

Limitação de caracteres no nome. Os nomes das variáveis devem sempre começar por uma letra
ou o
caracter de sublinhado ( _ ). No restante, pode conter letras, números e o caracter de sublinhado.
Qualquer outro caracter, incluindo espaços em branco, não são permitidos.
O AdvPl permite a criação ilimitada de variáveis, dependendo apenas da memória disponível. A
seguir
estão alguns nomes válidos para variáveis:

TOT01
cNumero
VAR_QUALQUER
M_CARGO
A11

E alguns inválidos:

1CODIGO (Inicia por um número)


M CARGO (contém um espaço em branco)
LOCAL (palavra reservada do AdvPl)
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

O AdvPl não é uma linguagem de tipos rígidos para variáveis, ou seja, não é necessário informar o
tipo dedados que determinada variável irá conter no momento de sua declaração, e o seu valor pode
mudar durante a execução do programa. Também não há necessidade de declarar variáveis em uma
seção específica do seu código fonte, embora seja aconselhável declarar todas as variáveis
necessárias no começo, tornando a manutenção mais fácil e evitando a declaração de variáveis
desnecessárias.
Para declarar uma variável deve-se utilizar um identificador de escopo, seguido de uma lista de
variáveis
separadas por vírgula (,). Um identificador de escopo é uma palavra chave que indica a que contexto
do programa a variável declarada pertence. O contexto de variáveis pode ser local (visualizadas
apenas dentro do programa atual), público (visualizadas por qualquer outro programa), entre outros.
Os
diferentes tipos de contexto de variáveis são explicados na documentação sobre escopo de variáveis.
Considere as linhas de código de exemplo:

nResultado := 250 * (1 + (nPercentual / 100))

Se esta linha for executada em um programa AdvPl, ocorrerá um erro de execução com a mensagem
"variable does not exist: nPercentual", pois esta variável está sendo utilizada em uma expressão de
cálculo sem ter sido declarada. Para solucionar este erro, deve-se declarar a variável previamente:

Local nPercentual, nResultado


nResultado := 250 * (1 + (nPercentual / 100))

Neste exemplo, as variáveis são declaradas previamente utilizando o identificador de escopo local.
Quando a linha de cálculo for executada, o erro de variável não existente não mais ocorrerá. Porém
variáveis não inicializadas têm sempre o valor default nulo (Nil) e este valor não pode ser utilizado
em um cálculo pois também gerará erros de execução (nulo não pode ser dividido por 100). A
resolução deste problema é efetuada inicializando-se a variável através de uma das formas:

Local nPercentual,nResultado
Store 10 To nPercentual
nResultado := 250 * (1 + (nPercentual / 100))
ou
Local nPercentual, nResultado
nPercentual := 10
nResultado := 250 * (1 + (nPercentual / 100))
ou
Local nPercentual := 10, nResultado
nResultado := 250 * (1 + (nPercentual / 100))

A diferença entre o último exemplo e os dois anteriores é que a variável é inicializada no momento da
declaração. Nos dois primeiros exemplos, a variável é primeiro declarada e então inicializada em uma
outra linha de código. O comando store existe apenas por compatibilidade com versões anteriores e
outras linguagens xBase, mas é obsoleto. Deve-se utilizar o operador de atribuição (:= ou somente
=). É
aconselhável optar pelo operador de atribuição composto de dois pontos e sinal de igual, pois o
operador de atribuição utilizando somente o sinal de igual pode ser facilmente confundido com o
operador relacional (para comparação) durante a criação do programa.
Uma vez que um valor lhe seja atribuído, o tipo de dado de uma variável é igual ao tipo de dado do
valor atribuído. Ou seja, uma variável passa a ser numérica se um número lhe é atribuído, passa a
ser caracter se uma string de texto lhe for atribuída, etc. Porém mesmo que uma variável seja de
determinado tipo de dado, pode-se mudar o tipo da variável atribuindo outro tipo a ela:

01 Local xVariavel // Declara a variável inicialmente com valor nulo


02
03 xVariavel := "Agora a variável é caracter..."
04 Alert("Valor do Texto: " + xVariavel)
05
06 xVariavel := 22 // Agora a variável é numérica
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

07 Alert(cValToChar(xVariavel))
08
09 xVariavel := .T. // Agora a variável é lógica
10 If xVariavel
11 Alert("A variável tem valor verdadeiro...")
12 Else
13 Alert("A variável tem valor falso...")
14 Endif
15
16 xVariavel := Date() // Agora a variável é data
17 Alert("Hoje é: " + DtoC(xVariavel))
18
19 xVariavel := nil // Nulo novamente
20 Alert("Valor nulo: " + xVariavel)
21
22 Return

No programa de exemplo anterior, a variável xVariavel é utilizada para armazenar diversos tipos de
dados. A letra "x" em minúsculo no começo do nome é utilizada para indicar uma variável que pode
conter diversos tipos de dados, segundo a Notação Húngara (consulte documentação específica para
detalhes).
Este programa troca os valores da variável e exibe seu conteúdo para o usuário através da função
alert.
Essa função recebe um parâmetro que deve ser do tipo string de caracter, por isso dependendo do
tipo de dado da variável xVariavel é necessário fazer uma conversão antes.
Apesar dessa flexibilidade de utilização de variáveis, deve-se tomar cuidados na passagem de
parâmetros para funções ou comandos, e na concatenação (ou soma) de valores. Note a linha 20 do
programa de exemplo. Quando esta linha é executada, a variável xVariavel contem o valor nulo. A
tentativa de soma de tipos de dados diferentes gera erro de execução do programa. Nesta linha do
exemplo, ocorrerá um errocom a mensagem "type mismatch on +". Excetuando-se o caso do valor
nulo, para os demais deve-se sempre utilizar funções de conversão quando necessita-se concatenar
tipos de dados diferentes (por exemplo, nas linhas 07 e 17.
Note também que quando uma variável é do tipo de dado lógico, ela pode ser utilizada diretamente
para checagem (linha 10):

If xVariavel

é o mesmo que
If xVariavel = .T.

A declaração de variáveis para os demais tipos de dados, matrizes e blocos de código, é exatamente
igual ao descrito até agora. Apenas existem algumas diferenças quanto a inicialização, que podem
ser
consultadas na documentação de inicialização de matrizes e blocos de código.

Operadores Comuns
Na documentação sobre variáveis há uma breve demonstração de como atribuir valores a uma
variável da forma mais simples. O AdvPl amplia significativamente a utilização de variáveis através
do uso de
expressões e funções. Uma expressão é um conjunto de operadores e operandos cujo resultado pode
ser atribuído a uma variável ou então analisado para a tomada de decisões. Por exemplo:

Local nSalario := 1000, nDesconto := 0.10


Local nAumento, nSalLiquido
nAumento := nSalario * 1.20
nSalLiquido := nAumento * (1-nDesconto)

Neste exemplo são utilizadas algumas expressões para calcular o salário líquido após um aumento.
Os
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

operandos de uma expressão podem ser uma variável, uma constante, um campo de arquivo ou uma
função.

Operadores Matemáticos

Os operadores utilizados em AdvPl para cálculos matemáticos são:

+ Adição
- Subtração
* Multiplicação
/ Divisão
** ou ^ Exponenciação
% Módulo (Resto da Divisão)

Operadores de String

Os operadores utilizados em AdvPl para tratamento de caracteres são:

+ Concatenação de strings (união)


- Concatenação de strings com eliminação dos brancos finais das strings intermediárias
$ Comparação de Substrings (contido em)

Operadores Relacionais

Os operadores utilizados em AdvPl para operações e avaliações relacionais são:

< Comparação Menor


> Comparação Maior
= Comparação Igual
== Comparação Exatamente Igual (para caracteres)
<= Comparação Menor ou Igual
>= Comparação Maior ou Igual
<>
ou
#
ou
!=

Operadores Lógicos

Os operadores utilizados em AdvPl para operações e avaliações lógicas são:

.And. E lógico
.Or. OU lógico
.Not. ou ! NÃO lógico

Operadores de Atribuição

Os operadores utilizados em AdvPl para atribuição de valores a variáveis de memória são:

= Atribuição Simples
:= Atribuição em Linha
+= Adição e Atribuição em Linha
-= Subtração e Atribuição em Linha
*= Multiplicação e Atribuição em Linha
/= Divisão e Atribuição em Linha
**= ou ^= Exponenciação e Atribuição em Linha
%= Módulo (resto da divisão) e Atribuição em Linha
Atribuição Simples
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

O sinal de igualdade é utilizado para atribuir valor a uma variável de memória.


nVariavel = 10

Atribuição em Linha
O operador de atribuição em linha é caracterizado por dois pontos e o sinal de igualdade. Tem a
mesma função do sinal de igualdade sozinho, porém aplia a atribuição às variáveis. Com ele pode-se
atribuir mais de uma variável ao mesmo tempo.

nVar1 := nVar2 := nVar3 := 0

Quando diversas variáveis são inicializadas em uma mesma linha, a atribuição começa da direita
para a
esquerda, ou seja, nVar3 recebe o valro zero inicialmente, nVar2 recebe o conteúdo de nVar3 e nVar1
recebe o conteúdo de nVar2 por final.
Com o operador de atribuição em linha, pode-se substituir as inicializações individuais de cada
variável
por uma inicialização apenas:

Local nVar1 := 0, nVar2 := 0, nVar3 := 0


por
Local nVar1 := nVar2 := nVar3 := 0
O operador de atribuição em linha também pode ser utilizado para substituir valores de campos em
um
banco de dados.

Atribuição Composta

Os operadores de atribuição composta são uma facilidade da linguagem AdvPl para expressões de
cálculo e atribuição. Com eles pode-se economizar digitação:

Operador Exemplo Equivalente a

+= X += Y X = X + Y
-= X -= Y X = X - Y
*= X *= Y X = X * Y
/= X /= Y X = X / Y
**= ou ^= X **= Y X = X ** Y
%= X %= Y X = X % Y

Operadores de Incremento/Decremento
A linguagem AdvPl possui operadores para realizar incremento ou decremento de variáveis. Entende-
se
por incremento aumentar o valor de uma variável numérica em 1 e entende-se por decremento
diminuir o valor da variável em 1. Os operadores são:

++ Incremento Pós ou Pré-fixado


-- Decremento Pós ou Pré-fixado

Os operadores de decremento/incremento podem ser colocados tanto antes (pré-fixado) como depois
(pós-fixado) do nome da variável. Dentro de uma expressão, a ordem do operador é muito
importante,
podendo alterar o resultado da expressão. Os operadores incrementais são executados da esquerda
para a direita dentro de uma expressão.

Local nA := 10
Local nB := nA++ + nA
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

O valor da variável nB resulta em 21, pois a primeira referência a nA (antes do ++) continha o valor
10
que foi considerado e imediatamente aumentado em 1. Na segunda referência a nA, este já possuía o
valor 11. O que foi efetuado foi a soma de 10 mais 11, igual a 21. O resultado final após a execução
destas duas linhas é a variável nB contendo 21 e a variável nA contendo 11.
No entando:

Local nA := 10
Local nB := ++nA + nA

Resulta em 22, pois o operador incremental aumentou o valor da primeira nA antes que seu valor
fosse
considerado.

Operadores Especiais

Além dos operadores comuns, o AdvPl possui alguns outros operadores ou identificadores. Estas são
suas
finalidades:

() Agrupamento ou Função
[] Elemento de Matriz
{} Definição de Matriz, Constante ou Bloco de Código
-> Identificador de Apelido
& Macrosubstituição
@ Passagem de parâmetro por referência

Os parênteses são utilizados para agrupar elementos em uma expressão mudando a ordem de
precedência da avaliação da expressão (segundo as regras matemáticas por exemplo). Também
servem para envolver os argumentos de uma função. Veja a documentação sobre precedência de
operadores para maiores detalhes.
Os colchetes são utilizados para especificar um elemento específico de uma matriz. Por exemplo,
A[3,2],
refere-se ao elemento da matriz A na linha 3, coluna 2.
As chaves são utilizadas para a especificação de matrizes literais ou blocos de código. Por exemplo,
A:={10,20,30} cria uma matriz chamada A com três elementos.
O símbolo -> identifica um campo de um arquivo diferenciando-o de uma variável. Por exemplo,
FUNC-
>nome refere-se ao campo nome do arquivo FUNC. Mesmo que exista uma variável chamada nome,
é o campo nome que será acessado.
O símbolo & identifica uma avaliação de expressão através de macro e é visto em detalhes na
documentação sobre macrossubstituição.

Conversores

De Numérico para caracter: cValtochar


Exemplo:

NTotal := 10
Alert(cValtochar(ntotal))

De caracter para numérico: val


Exemplo:

Cvalor := “10”
ntotal := 500 + val(cvalor)
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

De caracter para numérico acrescentando zero a esquerda: strzero


Exemplo:

Cmatant := “123”
Cmatnova := strzero(val(cmatant),6)
Resultado := 000123

De caracter para data: ctod ou stod


Exemplo:

DData:= ctod(“31/01/2008”)

De data para caracter: dtoc


Exemplo:

CData := dtoc(sra->ra_admissa)

De data para Mês e Ano: mesano


Exemplo:

Canomes := mesano(sra->ra_admissa)

 Numero para numero inteiro: int


Exemplo:

NTotal := 1200,32
Nsubtot := int(ntotal)

Resultado = 1200

De data para Mês: month


Exemplo:

nmes := month(sra->ra_admissa)

 De data para Mês: year


Exemplo:

nmes := year(sra->ra_admissa)

Seleciona parte de um string: SUBSTRING ou SUBS


Exemplo:

Cnome := “Jorge Paiva”

Csobnome := subs(cnome,6,5)

Retorna o tamanho em numérico de uma String: LEN


Exemplo:

Tamanho := LEN(cnome)

Resultado = 11

Retorna a mesma string sem espaços: Alltrim


Exemplo:

cnome := Altrim(cnome)
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Resultado = “JorgePaiva”

Altera um caracter dentro de uma string: STRTRAN


Exemplo:

Cnome := jorge@paiva
Cnome := strtran(cnome,”@”,”.”)

Resultado: jorge.paiva

Posiciona e traz o valor do campo de uma outra tabela: POSICIONE


Exemplo:

Cfuncao := Posicione(“SRJ”,1,XFILIAL(“SRJ”)+SRA->RA_CODFUNC,”RJ_DESCRIC”)

Ordem Parâmetro Descrição Observação


1º Tabela Informar em qual a tabela será
a busca da informação
desejada
2º Índice Informe qual a ordem do índice Para entender entre no cadastro desta tabela
ou chave de busca que será e veja no campo pesquisar do browser a
utilizado. Toda tabela tem um chave de busca desejada conforme figura
ou mais índices e este estão abaixo.
em uma ordem seqüencial
3º Pesquisa Informar o conteúdo a ser Devemos ter cuidado na hora de preencher a
pesquisado para que achemos busca de filial, no padrão do sistema toda
o registro correto. tabela tem o campo filial, porem nem todas
tabelas tem este campo preenchido. Se o
campo não for preenchido com por exemplo
o cadastro de função preencha xfilial(“SRJ”) e
o sistema irá preencher a filial da SRJ, ou
seja, nenhuma, porem se for pesquisar em
uma tabela que possua filial preenchido
preencha por exemplo a pesquisa como SRA-
>RA_FILIAL+SRA->RA_CODFUNC.
4º Retorno Informe o campo que trará o
retorno solicitado. Sempre
entre aspas.

Exemplo
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Note na tela acima a ordem para colocar no 2º parâmetro “Índice” o porque preenchemos com “1”.
Porque a chave de pesquisa esta na ordem um 1, se quiséssemos o CBO seria ordem 2.

FUNÇÕES PARA USO EM FÓRMULAS

fBuscaPD

Objetivo: Retorna o somatório dos Valores ou das Quantidades das Verbas indicadas.

Sintaxe: fBuscaPD(cCódigos, cTipo, cSemana)

cCódigos = Lista contendo o(s) código(s) da(s) verba(s) a ser(em) somada(s).


Ex.: "105,106,107" ou "105"

cTipo = Tipo de somatório a ser feito. Pode ser "H" para que seja feito o somatório das
Quantidades das verbas ou "V" para que os Valores das verbas sejam somados. Se não
for indicado será assumido "V".
Ex.: "V" ou "H"

cSemana = Número da semana, se não for indicado assume brancos. Somente deverá
ser utilizado para funcionários cuja periodicidade de pagamento seja "semanal".
Ex.: "14"

Exemplo de Utilização:

nHorExt := fBuscaPD("105,106,107,108,109,110", "H", "40")

Armazenará na variável 'nHorExt' a somatória das QUANTIDADES DE HORAS DAS


VERBAS 105, 106, 107, 108, 109 e 110 da semana 40.

nValExt := fBuscaPD("105,106,107,108,109,110")

Armazenará na variável 'nValExt' a somatória dos VALORES das verbas 105, 106, 107,
108, 109 e 110.

OBS.:Quando se efetua a somatória de verbas de Desconto, o Sistema retorna este valor


NEGATIVO. Devendo o mesmo ser multiplicado por (-1), quando a verba a ser gerada depender
deste resultado.

Exemplos de Utilização:

fGeraVerba(“460”,fBuscaPD(“452”)*(-1)*0.1, , , , , , , , ,.T.)

Gera a verba 460, com 10% sobre o valor da verba de desconto 452.

nValExemp := fBuscaPD("105,106,110,410,405")
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Armazenará na variável 'nValExemp' a somatória dos VALORES das verbas 105, 106 e 110
MENOS o valor das verbas 410 e 405.

FbuscaACM

Objetivo: Retorna valor contido nos acumulados anuais.

Sintaxe: fBuscaACM(verba,Mens/Hor, dDataI, dDataF, cTipo , ValRet, QtdRet)

verba = Verba do acumulado


Ex.: "105"

Mens/Hor = Condição para restringir a busca. Pode ser "H" para que seja feito para a
categoria horistas ou "M" para a categoria mensalistas ou por determinado sindicato,
etc.
Ex.: "H" ou "M"

dDataI = Informar a data inicial (DDMMAAAAA) para a procura dentro dos Acumulados
anuais.

dDataF = Informar a data final(DDMMAAAAA) para a procura dentro dos Acumulados


anuais.

cTipo = Informar “V” para valor ou “H” para horas.

ValRet = Valor de retorno.

QtdRet = Quantidade de retorno.

fGeraVerba

Objetivo: Incluir ou Alterar uma Verba no Movimento.

Sintaxe: fGeraVerba(cCód,nVal,nHor,cSem,cCCusto,cTipo1,cTipo2,nParcelas, dData,lAltera)

cCód = Código da Verba a ser gerada.

nVal = Valor da Verba.

nHor = Quantidade da Verba.

cSem = Número da Semana, somente deve ser utilizado para funcionários cuja
periodicidade de pagamento seja semanal. Pose ser utilizada a variável "cSemana" que
é a semana indicada nas perguntas do programa.

cCCusto = Código do Centro de Custo do funcionário.

cTipo1 = Tipo da Verba. Pode ser "V" para Valor, "H" para Horas ou "D" para Dias. Se
não for informado será assumido "V".

cTipo2 = Após o Tipo deve ser informado o Tipo 2. Pode ser informado “I” para
informada, “A” para Adiantamento, “C” para calculado, “K” para Férias.

nParcelas = Número de Parcelas da Verba. Deve estar entre 0 e 99.

Nulo = Após a Parcela deve ser informado um parâmetro Nulo ou seja, deve-se colocar
DUAS vírgulas após a Parcela.
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

dData = Data do efetivo pagamento da Verba. Pode-se utilizar a Variável


“dData_Pgto" que é a data informada nas perguntas do cálculo.

lAltera = Variável lógica para indicar se a verba pode ser alterada, caso já exista no
movimento do funcionário. Pode ser .T. ou .F..

Exemplo de Utilização:

fGeraVerba("222", nValExt, nHorExt, cSemana, SRA->RA_CC, "V",”I” , 0, , dData_Pgto, .T.)

fGeraVerba("223", 0, SRA->RA_HRSMES, " ", SRA->RA_CC, "H",”I” , 99, , dData_Pgto, .T.)

OBS.: Caso o usuário necessite apenas do último argumento, lAltera, poderá deixar os demais em
branco, para que o Sistema assuma o default.

Exemplo:

fGeraVerba(“222”, nValExtra, nHorExt, , , , , , , ,.T.)

Sistema irá regravar a verba 222, com o Valor da variável nValExtra e a qtde. de Horas da
variável nHorExt.

Caso não queira que o campo horas seja regravado a função ficará:

fGeraVerba(“222”,nValExtra, , , , , , , , ,.T.)

OBS.: Se o argumento “.T.” for omitido, o Sistema não regravará a verba, caso a mesma já exista,
assumindo, assim, o argumento “.F.” como default.

REGRAVAR VERBA INFORMADA PELO USUÁRIO

A função fgeraverba não regrava verba informada pelo usuário, portanto para os casos que
houver necessidade deve proceder da seguinte maneira no roteiro de calculo:

Condição
If FlocaliaPd("999") > 0 => Ex. Localizar a posicão da verba "999" no Array aPd

Verdadeiro
aPd[fLocaliaPd("999"),5] := ((SalMes * 0.10) * FbuscaPd("999","H") )
Ex. Gravar na Posicão do Valor no aPD o seguinte Calculo:
((Salario * 10%) * Horas Informadas)

Matriz aPd

Matriz onde as Verbas São Calculadas e Criadas através dos Cálculos

 aPd[Verba,1] = Código da Verba


 aPd[Verba,2] = Semana da Verba
 aPd[Verba,3] = C.Custo da Verba
 aPd[Verba,4] = Horas
 aPd[Verba,5] = Valor
 aPd[Verba,6] = Tipo 1 ([H]oras,[V]alor,[D]ias)
 aPd[Verba,7] = Tipo 2 ([I]nformada [C]alc.folha [R]Calc. Resc. [F]Calc.Ferias [S]2o.Parc [P]1o.
Parc
 aPd[Verba,8] = Parcela da Verba
 aPd[Verba,9] = Tipo da Verba na Matriz ([D] = Deletada na Matriz )
 aPd[Verba,10] = Data do Lançamento
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Exemplo de Utilização:

aPD[fLocaliaPD(“113”),9]:=“D”

Deleta a verba 113 do arquivo de movimento mensal.

FdelPd

Objetivo: Excluir/Deletar Verbas no Movimento durante o calculo.

Sintaxe: fDelPd(cCódigos, cSemana)

cCódigos = Códigos das Verba a serem excluidas.


cSem = Número da Semana, somente deve ser utilizado para funcionários cuja
periodicidade de pagamento seja semanal. Pose ser utilizada a variável "cSemana" que é a semana
indicada nas perguntas do programa.

Exemplo de Utilização:

fDelPd("222,109,409")

fDelPd("222,109,409",cSemana)

Matriz aPdv

Incidências das Verbas carregadas através da função fMatriz.

 aPdv[Verba,1] = Código da Verba


 aPdv[Verba,2] = Percentual da Verba
 aPdv[Verba,3] = Código Correspondente
 aPdv[Verba,4] = Incidência p/ Base de INSS
 aPdv[Verba,5] = Incidência p/ Base de Ir
 aPdv[Verba,6] = Incidência p/ Base de FGTS
 aPdv[Verba,7] = Incidência p/ Med. 13º
 aPdv[Verba,8] = Incidência p/ Med. de Ferias
 aPdv[Verba,9] = Incidência p/ Base de Periculosidade
 aPdv[Verba,10] = Incidência de Base de Insalubridade
 aPdv[Verba,11] = Se Refere a Ferias
 aPdv[Verba,12] = Se Refere a 13º
 aPdv[Verba,13] = Incidência p/ Mapa de Custo
 aPdv[Verba,14] = Incidência p/ Rais
 aPdv[Verba,15] = Incidência p/ Dirf
 aPdv[Verba,16] = Incidência p/ Dsr s/ Horas
 aPdv[Verba,17] = Se e Verba de Hora Extra
 aPdv[Verba,18] = Se a Verba Incorpora Salário
 aPdv[Verba,19] = Se a Verba e de Adic tempo serviço
 aPdv[Verba,20] = Incidência p/ Base de Contribuição Sindical
 aPdv[Verba,21] = Incidência p/ Base do Salário Família
 aPdv[Verba,22] = Incidência p/ Base do Seguro de Vida
 aPdv[Verba,23] = Incidência p/ Média de Aviso Prévio
 aPdv[Verba,24] = Incidência p/ Base de Convenção coletiva
 aPdv[Verba,25] = Se a Verba e Deduzida na Guia de INSS (GRPS)
 aPdv[Verba,26] = Se a Média Reajustável
 aPdv[Verba,27] = Se Tem Formula para a Verba
 aPdv[Verba,28] = Incidência p/ Pensão Alimentícia
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Funções:

 nUltDia := f_UltDia(dData) // Retorna Ultimo dia do mês da data


// passada como parametro

 nPosPd := fLocaliaPd("999") // Posição da Verba na Matriz aPd

Matriz aPd = Descrição para roteiro de cálculo.

 aPd[nPosPd,1] = Código da Verba


 aPd[nposPd,2] = Semana da Verba
 aPd[nposPd,3] = C.Custo da Verba
 aPd[nPosPd,4] = Horas
 aPd[nPosPd,5] = Valor
 aPd[nposPd,6] = Tipo 1 ([H]oras,[V]alor,[D]ias)
 aPd[nPosPd,7] = Tipo 2 ([I]nformada - [C]alc.folha - [R]Calc. Resc -. [K]Calc.Ferias
[S]2o.Parc - [P]1o. Parc
 aPd[nPosPd,8] = Parcela da Verba ¦
 aPd[nposPd,9] = Tipo da Verba na Matriz ([D] = Deletada na Matriz) ¦
 aPd[nPosPd,10] = Data de Pagamento ¦
¦

Função SomaInc

Objetivo : Somar as verbas na matriz aPd conforme incidências solicitadas.

Sintaxe: SomaInc(aPd,nElem,nBas,nCond1,cParc1,nCond2,cParc2,nMes,lSemana,aCodfol)

 aPD = Matriz com as verbas para Somatório


 nElem = Incidência a ser somada conforme posição na matriz aPdV
 nBas = Variável de retorno da somatória
 nCond1 = Elemento para 1ª condição, conf. posição na matriz aPdV
 cParc1 = Parâmetro para a 1ª condição (“S” ou “N”)
 nCond2 = Elemento para 2ª condição, conf. posição na Matriz aPdV
 cParc2 = Parâmetro para a 2ª condição (“S” ou “N”)
 nMes = Se desejar especificar o mês de pagamento a ser somado.
 lSemana = .T. soma todas as semanas do mês. e .F. soma somente a semana do calc.
 aCodFol = Matriz com os identificadores de cálculo.

Exemplo de Função para somatória de verbas, checando incidências

Total de Proventos:

nTotProv:=0.00 -> Var. de retorno do total de proventos


aEval(aPD,{|X| SomaInc(X,1,@nTotProv, , , , , , ,aCodFol})

Total de Descontos

nTotDesc:=0.00 -> Var. de retorno do total de descontos


aEval(aPD,{|X| SomaInc(X,1,@nTotDesc, , , , , , ,aCodFol})

Líquido

nTotLiq:=0.00 -> Var. de retorno do valor Liquido


aEval(aPD,{|X| SomaInc(X,1,@nTotLiq, , , , , , ,aCodFol})
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Base de INSS sem 13º Salário

nInssBas:=0.00
aEval(aPD,{|X| SomaInc(X,4,@InssBas,12,”N”, , , , ,aCodFol})

Base de Ir sem férias e 13º Salário

nIrBas:=0.00
aEval(aPD,{|X| SomaInc(X,5,@IrBas,11,”N”,”12”,”N” , , ,aCodFol})

Valor Bruto

ValBruto:=0
Aeval(aPD,{|X|SomaInc(X,5,@ValBruto,11,”N”,12,”N”,, ,aCodFol)})

Efetua a Somatória dos eventos que incidem para IRRF, e estão com “N” para os campos “Se Refere
a Férias” e “Se Refere a 13º”, acumulando este valor na variável “ValBruto”.

OBS.: Quanto ao “Ponto de Entrada” das Fórmulas, usuário deverá estudar qual o momento do
cálculo, informando a seqüência correta/apropriada.

Exemplo de Roteiro para Retornar o Percentual do Evento:

nPerc:=PosSrv(“114”,SRA->RA_FILIAL,”RV_PERC”)

Função para Buscar um Det. Param. do CFG

GETMV(“MV_DIASMES”)

Variáveis Disponíveis nos Cálculos:

 aPd = Array contendo todas as verbas do movimento do funcionário.


 aPdv = Array com Incidências com as verbas do movimento.
 Val_SalMin = Valor do Salário mínimo do mês de Calculo.
 Normal = Horas do Parâmetro Comp. Do Mês ou Turno de trabalho
 Descanso = Horas do Parâmetro Comp. Do Mês ou Turno de Trabalho
 nValArred = Valor de Arredondamento da Folha
 Val_Arre = Valor do Arredondamento no Adto
 Val_Adto = Valor do Adiantamento
 f_UltDia = Ultimo dia do Mês
 Salário = Salário Base Mês
 SalMes = Salário Composto pelas verbas que incorporam
 SalHora = Salário Hora Composto
 SalDia = Salário Dia Composto
 nHorasTrab = Horas Trabalhadas (Param. Comp. do Mês ou Turno de Trabalho)
 nHorasDsr= Horas Dsr (Param. Comp. do Mês ou Turno de Trabalho)
 DiasAfas = Total de Dias Afastados no Mês
 nDiasEnf = Total de Dias de Enfermidade no Mês
 nDiasMes = Dias de Ferias do Funcionário no Mês
 nDiasMse = Dias de Férias do Funcionário Mês Seguinte
 Diastrab = Dias Trabalhados do Funcionário
 DiasDsr = Dias de Dsr do Funcionário
 cTipRes = Tipo de Rescisão
 DesprezaFuncionários = irá desprezar o funcionário determinado no cálculo
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

 nFgtsCt1 = Valor do percentual do Fgts para Contr. Tipo Indeterminado


 nFgtsCt2 = Valor do percentual do Fgts para Contr. Tipo Determinado
 dData_Pgto = Data de Pagamento da Folha informado no parametro.

 Para incluir um RDMAKE nos roteiros, informar no verdadeiro:


Execblock(NOME DO RDMAKE)

 Para pegar um parâmetro MV_........ no SX6 para utilizar em roteiro:


A função Getmv(“MV_....”) retorna o conteúdo do parâmetro para o roteiro ou rdmake.

Criando formula pelo SIGAGPE

Mnemônico

Acesse Atualizações / Definições de Cálculos / Mnemônico

Mnemônicos são variáveis usadas na escrita de um programa.Neste cadastro serão armazenadas


todas as variáveis que ficarão disponíveis para serem utilizadas na elaboração de Roteiro de Cálculo,
Cadastro de Fórmulas e Biblioteca de Funções.Para cada mnemônico deverá haver uma definição de
tipo e uma inicialização:

Tipo Mnemônico Exemplo de inicialização


Caracter "a"
Numérico 250,00
Data 12/08/2002 ou " / / "
Lógico .T. (true - verdadeiro) ou .F. (false -
falso)
Array (matriz/vetor) {01,02,03,04}

Exemplo: Para criação de Formulas do Adicional de Transferência

Sobre os campos:

Cód. Mnemônico – Informe um código que comece com “M_”


Tipo - Escolha o tipo de retorno que fará a formula, se for para roteiros de cálculo, em 90% dos
casos será numérico.
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Conteúdo – Se for um conteúdo que será calculado, informe 0 (zero) se for um conteúdo fixo informe
o valor, exemplo: 1200.00. OBS. : Observe que o valor dos centavos tem que ser separo por ponto e
não por vírgula.
In.Cada Calç. : Este campo deverá ser preenchido Sim quando o sistema realizar o calculo e Não
quando o valor for fixo.

Biblioteca de Funções

Acesse Atualizações / Definições de Cálculos / Biblioteca Funções

Funções são seqüências de instruções de programa de computador que executam um determinado


procedimento.
Suas tarefas podem ser modificadas e adaptadas às necessidades do usuário através de um número
de elementos denominados parâmetros.Parâmetros de funções são informações que definem os
limites ou ações de uma rotina.
Esta rotina permite a manutenção das funções que serão utilizadas no ambiente Gestão de Pessoal,
juntamente com as funções disponíveis no ambiente Protheus. As funções previamente cadastradas
facilitarão o processo de criação das fórmulas.
Nesse cadastramento serão definidos a quantidade de parâmetros, qual o tipo de cada um e se o
mesmo deve ou não ser obrigatório.
Exemplo:
A Função FPOSREG verifica e posiciona em um registro do arquivo a partir da chave indicada.
Função: FPOSREG('SRB',1,SRA->RA_FILIAL+SRA->RA_MAT,.F.)

Ordem Parâmetro Descrição do Parâmetro


1ª SRB Define o arquivo a ser pesquisado
2ª "1" Determina a ordem de busca no arquivo
indicado
3ª "SRA>RA_FILIAL+SRA>RA_M Indica a chave de pesquisa no arquivo
AT" indicado, nesse caso será pesquisado
pela Filial e Matrícula do funcionário
posicionado no arquivo "SRA" (Cadastro
de Funcionários).
4ª ".F." Parâmetro para indicar o tipo de pesquisa
que está sendo efetuada, se .F. (falso)
indica 1o. pesquisa no arquivo, se .T.
(Verdadeiro) indica a seleção do próximo
registro com a mesma chave.

Neste exemplo, o arquivo de dependentes do funcionário que está sendo calculado é posicionado. Se
houver dependentes deste funcionário, será retornado "verdadeiro" e manterá posicionado no
registro. Caso contrário, retornará "falso". Se desejar verificar a existência de outros registros com a
mesma chave, deve-se chamar novamente a função indicando ". T." no último parâmetro.
Os campos devem ser preenchidos de acordo com o número de parâmetros definidos previamente
para a função, ou seja, quem cria a função, determina o número de parâmetros. A biblioteca apenas
armazena essas funções, e não cria novos parâmetros ou funções.
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Exemplo: Função AnoMes

Formulas

Acesse Atualizações / Definições de Cálculos / Formulas

Este cadastro permite a manutenção de fórmulas que serão utilizadas no Roteiro de Cálculos.
Fórmula é um conjunto de expressões que poderá conter funções, campos de arquivos, mnemônicos,
constantes e chamados de outras fórmulas.
Esse cadastro possibilita montagem de cálculos específicos para atender acordos coletivos, e outras
particularidades da empresa ou da categoria.
O resultado de uma fórmula sempre será armazenado em um mnemônico previamente cadastrado
na rotina Cadastro de Mnemônicos.
Exemplo: Formula Adicional de Transferência

Origem: Este campo é preenchido pelo sistema


Código da Formula: Informe um código de preferência com as iniciais do evento a ser calculado
Descrição da Formula: Faça uma breve descrição sobre a formula.
Retorno: Informe o mnemônico que cadastrado para esta fórmula
Obs. Formula: Detalhe todo o processo desta formula, isto ajudará ao cliente ou a outro analista
que venha dar manutenção nesta formula.

Itens da Formula
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Normalmente toda formula começa com uma condição o exemplo abaixo relata uma condição de um
campo data no cadastro de funcionário comparando com o mês e o ano da folha.

Seqüência 0010

Clique no campo Expr. e marque a opção de Condição

Clique no campo 1ªExpressão

Na tela acima selecione o Tipo de Expressão (3) Funções e clique duas vezes sobre a função
ANOMES na caixa (Funções).

Surgirá a tela de ajuda para preenchimento de funções, conforme a figura abaixo:


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Preencha o campo Conteúdo Par com o campo data no cadastro de funcionário que será a nossa
condição. Após clique em OK

Note na tela acima que a função aparecerá no campo abaixo (Selecionado Expressão). Você poderá,
se for necessário, dar manutenção neste campo. Após clique em OK

Clique no campo Op.2 (Operadores)


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Selecione a operação que desejar. Após clique em OK

Clique no campo 2ªExpressão

Como iremos usar a função GETMV, temos que escolher o tipo (3) Funções, ou seja, sempre que
utilizarmos funções devemos escolher o tipo Funções, mesmo que esta função não exista na caixa de
funções. Depois digite a expressão no campo “Selecionado Expressão”. Após clique em OK

Clique no campo Op.3 (Operadores)


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Na tela acima escolhemos a opção .END. pois não teremos outra condição, se fosse o caso
deveríamos escolher a opção .AND. . Após clique em OK

Seqüência 0020

Clique no campo Expr.

Iremos escolher a opção acima pois estamos querendo não mais uma condição e sim uma execução.
Após clique em OK

Clique no campo Resultado para surgir a tela abaixo


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Selecione o tipo (3) Funções e clique duas vezes na função Fgeraverba

Preencha o Parâmetro Verba com a verba que será gerado para a folha de pagamento. Não esqueça
que tem que ser entre aspas e não adianta clicar na lupa, ou seja, tem que ser digitado.
Preencha o parâmetro Valor com a formula matemática a ser calculada
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Preencha o parâmetro HrsDias se for necessário com a referencia que deverá sair na folha de
pagamento.
Após clique em OK

Note na tela acima que a função aparecerá no campo abaixo (Selecionado Expressão). Você poderá,
se for necessário, dar manutenção neste campo. Após clique em OK

Clique no campo Op.3 (Operadores)


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Na tela acima escolhemos a opção .END. pois não teremos outra execução, se fosse o caso
deveríamos escolher a opção .CNT. . Após clique em OK

No final de tudo basta clicar em OK

Tipos utilizados na montagem das Formulas

1º Arquivo

Na tela acima escolha o tipo (1) Arquivos / Campos, depois preencha o campo Pesquisar com a tabela
desejada, exemplo “SRA”, depois clique duas vezes no grupo “Campos”, no campo desejado. Esta
opção servira para usarmos campo de um cadastro na formula.

2º Mnemônicos
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Na tela acima escolha o tipo (2) Mnemônicos, depois clique duas vezes no mnemônico desejado. Esta
opção servira para usarmos os mnemônicos em uma formula.

5º Constante

Na tela acima escolha o tipo (5) Constante, depois inclua a constante no grupo “Selecionado
Expressão”. Esta opção servira para usarmos qualquer valor fixo para criação de uma formula.
Lembrando que se for numérico não precisa informar entre aspas, apenas caracter informamos entre
aspas.

Exemplo 1 – Criando uma fórmula para calcular uma gratificação de 10%


sobre o salário do funcionário.
1 – Criar um mnemônico para armazenar esta informação:

2 – Criar uma fórmula para fazer o calculo, temos que saber o código da verba que será utilizado para
pagamento da gratificação .

a) Criando a fórmula:
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Detalhando a fórmula:

Na primeira execução a nossa variável (mnemônico) recebe o valor do salário, no fim da linha
inserimos no operador CNT para continuação na linha seguinte .
Na segunda execução (outra linha) , utilizamos a função FGERAVERBA indicando a verba a ser
utilizada para pagar a gratificação e o valor a ser pago (mnemônico) recebendo a própria variável
que na linha anterior recebeu o salário multiplicado por 10%¨dele mesmo (salário) .

3 – Embutindo a fórmula criada no roteiro de cálculo:

OBS: Procurar inserir no roteiro após uma sequência lógica do que está sendo calculado, no nosso
exemplo não existe no roteiro uma sequência para calculo de gratificação por isso foi inserido no
00321 .

4 – Calcular a folha e verificar o resultado


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Exemplo 2 – Criando uma fórmula para calcular uma comissão de 10%


sobre a gratificação do exemplo anterior , sendo que somente poderá
aparecer para os funcionários do sexo feminino (condição).

1 – Criar o mnemônico

2 – Criar a fórmula

Detalhando a fórmula:
Linha 1: condição para apenas para filtrar somente funcionários com sexo=F
Linha 2: a variável recebe o conteúdo da variável de gratificação (exemplo anterior)
Linha 3: usada a função Fgeraverba para gerar a verba 229 (comissão) buscando o valor da variável
M_COMISS *= a 0.10

3 – Embutir no roteiro

4 – Calcular a folha e verificar o resultado


Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Exemplo 3 – Criando uma fórmula para calcular uma comissão de 10%


sobre a gratificação do exemplo anterior , sendo que somente poderá
aparecer para os funcionários do sexo feminino (condição).

Exercício:

Elaborar uma fórmula para calcular o repouso remunerado baseado na


seguinte fórmula: (dias não úteis / dias úteis) * valor das horas extras +
comissão
Dias não úteis – SR6->R6_HRDESC cadastro de turno
Dias úteis – SR6->R6_HRNORMA cadastro de turno
Verbas de horas extras: 044 e 045
Verba de comissão: 229
Verba para pagar o repouso: 089

Dicas:
Criar mnemônico : M_REPOUSO para armazenar o valor do repouso
Criar mnemônico : M_VERBREP para armazenar o valor das HE +
comissão
Utilizar como condição ter o turno “001”
Utilizar a função FbuscaPD para somar as verbas (HE + comissão)
Utilizar a função Fgeraverba
OBS: Desabilitar os roteiros 00210, 00590, 00600 e 00610 pois calculam o
repouso de forma automática .
Criado :
16/05/2008
Criação de Roteiros de Cálculos para a Folha de
Pagamento (SIGAGPE) Atualizado:
16/05/2008

Exemplo de uma fórmula em ADVPL para calcular uma pensão alimentícia


de forma diferente para um funcionário, função compilada e inserida no
roteiro .

#include "rwmake.ch"

/*-----------------------------------------------------------------------*
* Programa | RCFOL082 | Autor | Fabio Apolinario | Data | 07/08/08 *
*------------------------------------------------------------------------*
* Descricao| Pensão ( HCM ) *
*-----------------------------------------------------------------------*/
User Function RCFOL082()

Private nSalComp, nValPen

nSalComp := 0
nValPen := 0

If SRA->RA_XPERC > 0
nValPen := (SRA->RA_SALARIO * .30)
EndIf
nSalComp := (((SRA->RA_SALARIO + nValPen ) / 30) * 2)
FGeraVerba("418",nSalComp,,,,,,,,,.T.)

Return

#include "rwmake.ch"

/*-----------------------------------------------------------------------*
* Programa | RCFOL082 | Autor | Fabio Apolinario | Data | 07/08/08 *
*------------------------------------------------------------------------*
* Descricao| Pensão ( HCM ) *
*-----------------------------------------------------------------------*/
User Function RCFOL082()

Private nSalComp, nValPen

nSalComp := 0
nValPen := 0
nPert := .30

If SRA->RA_XPERC > 0 .or. SRA->RA_MAT = "000002"


nValPen := fBuscaPD("101,103,105,402,410")
EndIf
nSalComp := (nValPen * nPert)
FGeraVerba("418",nSalComp,,,,,,,,,.T.)

Return

Você também pode gostar