Jump to content
Edivan

Histórico função e salário

Recommended Posts

Pessoal, preciso de um relatório (planilha) que gere o histórico de alterações (por data), de salário e função e quem fez a alteração.

Tenho uma sentença que gera somente o histórico do salário atual e anterior. Precisaria incluir também a função (nome) anterior e a atual. Alguém poderia dar um help na sentença abaixo:

SELECT 
IDLOG, DTHORA, USUARIO, VALORANTIGO AS "VALOR ANTINGO",
VALOR AS "VALOR ATUAL", TIPOSQL AS "TIPO ALTERACAO", 
RIGHT(CHAVE,6), NOME,PROCESSO 
FROM ZLOG,PFUNC 
WHERE COLUNA = 'SALARIO'
AND RIGHT(CHAVE,6)=CHAPA
AND DATEPART(YEAR,DTHORA)=:PLN_$B$3_N
AND DATEPART(MONTH,DTHORA)=:PLN_$B$4_N
ORDER BY CHAVE, DTHORA, IDLOG

Segue exemplo

ALTERAÇÕES SALARIAIS                                    
Ano    2018                                
Mês    1                                
IDLOG    DATA    USUARIO    SAL.ANTIGO    SAL.NOVO    T    MATRÍCULA    NOME    FUNÇÃO ANTERIOR   FUNÇÃO ATUAL
 

Agradeço.

 

Share this post


Link to post
Share on other sites

Olá Edivan! Bom dia!

Se quer analisar o campo mesmo alterado você está certo vendo pela ZLOG, caso não necessite saber o campo exato e sim se teve uma mudança naquele processo poderá consultar nas tabelas de históricos:

Salário: PFHSTSAL

Função: PFHSTFCO

No seu script acho que se incluir a tabela PFUNCAO e na condição unir os campos da tabela PFUNC e PFUNCAO acho que funcionará.

SELECT 
IDLOG, DTHORA, USUARIO, VALORANTIGO AS "VALOR ANTINGO",
VALOR AS "VALOR ATUAL", TIPOSQL AS "TIPO ALTERACAO", 
RIGHT(CHAVE,6), NOME,PROCESSO 
FROM ZLOG,PFUNC, PFUNCAO
WHERE COLUNA = 'SALARIO'
AND RIGHT(CHAVE,6)=CHAPA
AND DATEPART(YEAR,DTHORA)=:PLN_$B$3_N
AND DATEPART(MONTH,DTHORA)=:PLN_$B$4_N
AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
ORDER BY CHAVE, DTHORA, IDLOG

 

E também vi que compara a chapa com parte do campo CHAVE da tabela ZLOG, talvez não seja tão eficiente fazer dessa maneira.

Veja aí e qq coisa retorna!

Abraços.

Share this post


Link to post
Share on other sites

Converti aqui pra minha base ORACLE e acho que funcionou do jeito que precisa.

SELECT 
IDLOG, DTHORA, USUARIO, VALORANTIGO AS "VALOR ANTINGO",
VALOR AS "VALOR ATUAL", TIPOSQL AS "TIPO ALTERACAO",
SUBSTR(CHAVE, GREATEST(-LENGTH(CHAVE),-6)), PFUNC.NOME,PROCESSO, PFUNCAO.NOME
FROM ZLOG,PFUNC, PFUNCAO
WHERE COLUNA = 'SALARIO'
AND SUBSTR(CHAVE, GREATEST(-LENGTH(CHAVE),-6))=CHAPA
AND TO_CHAR(DTHORA, 'YYYY')='2018'
AND TO_CHAR(DTHORA, 'MM')='02'
AND PFUNC.CODFUNCAO = PFUNCAO.CODIGO
ORDER BY CHAVE, DTHORA, IDLOG

Share this post


Link to post
Share on other sites
Em 22/08/2019 at 20:23, LUIZ ALBERTO FONSECA disse:

Deu erro na variável LENGTH

image.png

Sua base é Oracle Luiz? Esse comando é específico para bases em Oracle. Para SQL Server é o LEN(campo) ou no caso desta linha AND RIGHT(CHAVE,6)=CHAPA

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Similar Content

    • By Jair - Fórmula
      Script com função para montagem de data com último dia útil do mês, considerando a tabela de feriados do RM, ou seja, se o último dia do mês cair em algum feriado cadastrado no RM, retorna o dia útil anterior.Para o caso de usar versão do SQL mais antiga, onde não existe a função EOMONTH(). É só comentar a linha em questão que usa essa função do SQL Server deixando a outra. Mantenha a que preferir usar... 
       
      If OBJECT_ID (N'dbo.fnc_UltDiaUtilRM' ) is not null Drop Function dbo.fnc_UltDiaUtilRM; Go Create Function dbo.fnc_UltDiaUtilRM (@DataBase DateTime) Returns Date as Begin Declare @UltDia Date Declare @CalendOficial Varchaaaar(10) Set @CalendOficial = '0000001' -- Código do Calendário Oficial a ser usado do RM -- Usando a Função EOMONTH que funciona para o SQL 2012 em diante... Set @UltDia = EOMONTH(@DataBase) -- Usando a Função DateAdd apenas para montar o último dia do mês, que funciona para o SQL 2008 e mais atuais... Set @UltDia = DATEADD(dd, -DAY(DATEADD(M, 1, @DataBase)), DATEADD(M, 1, @DataBase)) inicio: If ( Select DiaFeriado From GFeriado (nolock) Where DiaFeriado = @UltDia and CodCalendario = @CalendOficial ) is not null Begin Set @UltDia = DateAdd(d, -1, @UltDia) End if (Select DatePart(dw, @UltDia)) in (1, 7) or ( Select DiaFeriado From GFeriado (nolock) Where DiaFeriado = @UltDia and CodCalendario = @CalendOficial ) is not null Begin Set @UltDia = DateAdd(d, -1, @UltDia) goto inicio End Return(@UltDia) End Go -- Exemplo de utilização Select dbo.fnc_UltDiaUtilRM (Getdate())
      Exemplo de utilização
      Select dbo.fnc_UltDiaUtilRM (Getdate())
       
      **** Veja que foi usado em uma parte no texto acima o VARCHAAAAR e não o nome correto, pois, há um bloqueio de segurança para evitar códigos maliciosos que façam ataques no fórum. Então, apenas enviando em arquivo, ou trocando essa palavra desta forma que fiz. Ao copiar e passar para seu ambiente, sempre deverá corrigir para o termo correto!! 😀
    • By Jair - Fórmula
      Uma função que pode ser bem útil na hora de montar alguns relatórios, no MSSQL, é esta para tratar as datas e trazer sempre o último dia do mês. Ela recebe como parametro apenas o MES e o ANO.
      Por exemplo, pra montar a data com o início do mes, da PFFINANC, pode-se montar com o MESCOMP e ANOCOMP, adicionando '01' no início sempre... mas o final, o último dia, é variável.
      Estava falando com o Júnior ( grande colaborador aqui do Fórum ) e montei essa função, que você pode utilizar em qualquer sentença.
      -=-=-=-=-=-=-=-=-=-=-=-
      Create Function ZFimdoMes (@mes int, @ano int)
      Returns Datetime
      Begin
      ----------------------------------------------------------------------------------
      -- Função para gerar uma data com o último dia do mes,
      -- recebendo como parametros apenas o mes e ano.
      --
      -- Criada por Jair G. Silva - Fórmula Desenvolvimento (17/08/06)
      ----------------------------------------------------------------------------------
      Declare @FimdoMes Datetime
      Select @FimdoMes = DateAdd(Month,1,(cast((Cast(@Ano as varchar)
      + '/' + cast(@Mes as varchar) + '/' + '01' ) as Datetime)))-1
      Return (@FimdoMes)
      ---------------------------------------------------------------------------------
      -- Para usar a função, deve sempre chamar como no exemplo abaixo:
      -- Select dbo.ZFimdoMes(8,2006) ou Select dbo.ZFimdoMes( mescomp , anocomp )
      ---------------------------------------------------------------------------------
      End
      -=-=-=-=-=-=-=-=-=-=-=-
      Espero que possa lhe ajudar em suas próximas sentenças e montagens de relatórios.
      Abraços.
    • By Edivan
      Olá pessoal!
      Tenho a consulta baixo, porém, queria que ela retornasse as Seções (Setor) das respectivas funções. Alguém pode dar uma ajuda ?
      SELECT DISTINCT PFUNCAO.CODIGO,PFUNCAO.NOME,
                (SELECT MIN(SALARIO) 
               FROM PFUNC PFUNC1 
               WHERE PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO 
               GROUP BY CODFUNCAO)MENOR,
           (SELECT MAX(SALARIO) FROM PFUNC PFUNC1 
              WHERE PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO 
              GROUP BY CODFUNCAO)MAIOR,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='A' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)A,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='P' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)P,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='T' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)T,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='M' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)M,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='E' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)E,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='F' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)F,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               CODSITUACAO='V' AND CODCOLIGADA=1
               GROUP BY CODSITUACAO),0.00)V,
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               DATEDIFF(DAY,PFUNC1.DATAADMISSAO,GETDATE()) < 365 AND CODCOLIGADA=1 
               GROUP BY CODFUNCAO),0.00)'-1A',
           ISNULL((SELECT COUNT(*)FROM PFUNC PFUNC1 WHERE
               PFUNC1.CODFUNCAO=PFUNC.CODFUNCAO AND
               DATEDIFF(DAY,PFUNC1.DATAADMISSAO,GETDATE()) > 365 AND CODCOLIGADA=1 
               GROUP BY CODFUNCAO),0.00)'+1A'
           
      FROM PFUNC,PFUNCAO
      WHERE PFUNC.CODCOLIGADA=1 AND 
      PFUNC.CODSITUACAO<>'D' AND
      PFUNC.CODCOLIGADA=PFUNCAO.CODCOLIGADA AND 
      PFUNCAO.CODIGO=PFUNC.CODFUNCAO
      GROUP BY CODFUNCAO,CODSITUACAO,PFUNCAO.NOME,PFUNCAO.CODIGO,DATAADMISSAO
    • By marcosjmfilho
      Olá,
      Existe a possibilidade de fazer por processo interno do sistema, a troca dos códigos das seções?
      Há uma necessidade de mudarmos a mascara da seção e com isso mover todos os funcionários e históricos para esses novos códigos.
      Está em desenvolvimento uma script via banco de dados para executar tal tarefa, mas queria saber se alguma coisa automática no sistema.
    • By airan73
      Olá, Na base do RM possuímos tabelas que guardam o histórico da filial e do centro de custo do funcionário, como por exemplo a PFHSTSEC que guarda o histórico das Seções ou a PFHSTFCO que temos o histórico de funções ?
      Encontrei as tabelas GFILIAL (Filial) e PFRATEIOFIXO (CC) que posso ligar com a PFUNC, o problema que estas tabelas não guardam o histórico, apenas a posição atual. Obrigado.
    • By Raimundo Neto
      Bom dia
      Estou com um problema no calculo de Rescisão, segue exemplo do mesmo:
      Quando calculo uma rescisão com data do dia 13/04/2016, o mesmo puxa apenas 12 dias de saldo de salario, sendo que o certo seria 13 dias, alguém já passou por isto e tem a solução do mesmo.
    • By gabrielcsga
      Bom dia.
      Preciso de ajuda para montar um relatório que mostre o histórico de alteração de funções de funcionários.
      Consultei um post semelhante mas não consegui aproveitar muito as dicas.
      Algum membro já criou algum relatório parecido ou pode mostrar uma consulta que mostre isso?
      Desde já agradeço.
    • By Henry
      Pessoal, bom dia!
      Estava pesquisa nas formulas uma forma de pegar o salário depois que o funcionário é demitido. Vi que tem a formula "L" que traz o salário liquido, mas não funciona quando o funcionário está com status de demitido no Labore.
      Preciso pegar esse valores, depois que o funcionário esta demitido. Alguma ideia?
      Atenciosamente,
      Henry
  • Recent

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.