roteiro de calculo
Short Description
Download roteiro de calculo...
Description
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Conceitos Básicos:
Criado : 16/05/2008 Atualizado: 16/05/2008
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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.
Bloco de Código O bloco de código é um tipo de dado especial. É utilizado para armazenar instruções escritas em AdvPl
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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) 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
% 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 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 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 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:
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
() 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)
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)
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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) 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 1º
Parâmetro Tabela
2º
Índice
Descrição Informar em qual a tabela será a busca da informação desejada Informe qual a ordem do índice
Observação Para entender entre no cadastro desta tabela
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
3º
Pesquisa
4º
Retorno
ou chave de busca que será utilizado. Toda tabela tem um ou mais índices e este estão em uma ordem seqüencial Informar o conteúdo a ser pesquisado para que achemos o registro correto.
Criado : 16/05/2008 Atualizado: 16/05/2008
e veja no campo pesquisar do browser a chave de busca desejada conforme figura abaixo. Devemos ter cuidado na hora de preencher a busca de filial, no padrão do sistema toda 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.
Informe o campo que trará o retorno solicitado. Sempre entre aspas.
Exemplo
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).
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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") 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.
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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.
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.)
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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
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:
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE) 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
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] aPd[nposPd,2] aPd[nposPd,3] aPd[nPosPd,4] aPd[nPosPd,5] aPd[nposPd,6]
= Código da Verba = Semana da Verba = C.Custo da Verba = Horas = Valor = Tipo 1 ([H]oras,[V]alor,[D]ias)
Criado : 16/05/2008 Atualizado: 16/05/2008
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 nElem nBas nCond1 cParc1 nCond2 cParc2 nMes lSemana aCodFol
= = = = = = = = = =
Matriz com as verbas para Somatório Incidência a ser somada conforme posição na matriz aPdV Variável de retorno da somatória Elemento para 1ª condição, conf. posição na matriz aPdV Parâmetro para a 1ª condição (“S” ou “N”) Elemento para 2ª condição, conf. posição na Matriz aPdV Parâmetro para a 2ª condição (“S” ou “N”) Se desejar especificar o mês de pagamento a ser somado. .T. soma todas as semanas do mês. e .F. soma somente a semana do calc. 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}) 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”.
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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. 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.
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 AT"
Indica a chave de pesquisa no arquivo 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. Exemplo: Função AnoMes
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 Atualizado: 16/05/2008
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:
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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)
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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)
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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)
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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
Criação de Roteiros de Cálculos para a Folha de Pagamento (SIGAGPE)
Criado : 16/05/2008 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.
View more...
Comments