segunda-feira, 13 de novembro de 2017

Dicas para desenvolvimento do módulo de RH

SetMnemonicos()
Carrega os Mneumônicos da tabela RCA do Protheus em uma variável do tipo array aonde a primeira posição tem o nome do Mneumônico e na terceira posição possui o contéudo.
Veja um exemplo simples de sua utilização.

Local cFilRCA := xFilial( "RCA" )

Local aMnemos := {}

SetMnemonicos( cFilRCA , @aMnemos , .T. )



nPos := Ascan(aMnemos, {|x| x[1] == 'M_BASEAVPR'})
aVerbas         := StrTokArr( AllTrim(aMnemos[nPos, 3]), ';' )



SincroRC()
Rotina responsável por gerar as tabelas de fechamento da SRC e SRI exemplo RCAA1612 RIAA1612, basta executar e colocar o período que deseja refazer o fechamento o qual será buscado da SRD Acumulados e gerado o arquivo a parte.



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")

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




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.) 

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:

    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]  = 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     
                             
                                                                      



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}) 

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
     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



GetUserInfoArray()

Retorna um array multidimensional com as informações de cada um do processos em execução no Protheus 8 Server e/ou TOTVS Application Server. Esta função é um espelho dos dados que aparecem no TOTVS Monitor.

Sintaxe:
GetUserInfoArray ( ) --> aRet

Retorno :
aRet(array_of_record) 
Retorna um array multidimensional com os números e dados de cada uma das threads.
aInfo[x][01] = (C) Nome de usuário
aInfo[x][02] = (C) Nome da máquina local
aInfo[x][03] = (N) ID da Thread
aInfo[x][04] = (C) Servidor (caso esteja usando Balance; caso contrário é vazio)
aInfo[x][05] = (C) Nome da função que está sendo executada
aInfo[x][06] = (C) Ambiente(Environment) que está sendo executado
aInfo[x][07] = (C) Data e hora da conexão
aInfo[x][08] = (C) Tempo em que a thread está ativa (formato hh:mm:ss)
aInfo[x][09] = (N) Número de instruções
aInfo[x][10] = (N) Número de instruções por segundo
aInfo[x][11] = (C) Observações
aInfo[x][12] = (N) (*) Memória consumida pelo processo atual, em bytes
aInfo[x][13] = (C) (**) SID - ID do processo em uso no TOPConnect/TOTVSDBAccess, caso utilizado.

//Manda uma mensagem no no monitor, posição 11 do array anterior
PtInternal( 1, “mensagem”


Nenhum comentário: