MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    Filtro na origem do relatório

    Compartilhe
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Filtro na origem do relatório

    Mensagem  JIR em Seg Jan 21, 2019 11:21 am

    Olá Boa Tarde a todo o Forum,

    Em temos o Amigo Alexandre Neves ajudou neste filtro em que no relatório pegava apenas funcionários que na tabela pontos esteja em Inactividade e DataFim =31-12-9999 e ainda se na tabela Ausências o CodAusencia fosse <>6004

    SELECT * FROM (SELECT [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio AS InAusencia, tbAusencias.DataFim AS FimAusencia, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT FROM ((((Ficheiro_Mestre INNER JOIN Pontos ON Ficheiro_Mestre.[Nº ORDEM] = Pontos.[Nº ORD]) LEFT JOIN [Entidades Analiticas] ON Pontos.CCusto = [Entidades Analiticas].[E ANAL]) LEFT JOIN tbEmpresas ON Ficheiro_Mestre.CodEmpresa = tbEmpresas.CodEmpresa) LEFT JOIN tbAusencias ON Pontos.[Nº ORD] = tbAusencias.NOrdem) LEFT JOIN tbCodAusencia ON tbAusencias.CodAusencia = tbCodAusencia.CodAusencia GROUP BY [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio, tbAusencias.DataFim, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT HAVING [DESIGNAÇAO ENT ANALI] Like "*Inactividade*" AND Pontos.DataFim=#12/31/9999# AND SIT=1
    ORDER BY [Nº ORD]) WHERE [Nº ORD] NOT IN (SELECT [Nº ORD] FROM Pontos LEFT JOIN tbAusencias ON Pontos.[Nº ORD] = tbAusencias.NOrdem WHERE CodAusencia=6004)


    tudo correto até aqui, mas necessitava agora o seguinte

    pegava apenas funcionários que na tabela pontos esteja em Inactividade e DataFim =31-12-9999 e ainda se na tabela Ausências o CodAusencia fosse <>6004 e fosse o último registo com codAusencia <>6004

    É que a tabela pode ter CodAusencia <>6004 mas não ser último registo

    (como não tenho id, podia ser pela o máxima DataFim)


    Agradeço ajuda

    José Silva
    Anexos
    Inactividade_Rev2.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (193 Kb) Baixado 8 vez(es)


    Última edição por Alexandre Neves em Qui Fev 07, 2019 2:16 pm, editado 1 vez(es) (Razão : corrigido título, de 'Filtro na oringem do relatorio' para 'Filtro na origem do relatório')
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR em Seg Jan 28, 2019 9:57 pm

    ups,


    Pretendo que o resultado da consulta, filtre  por campo [Nº ORD]
    todos os registos da tabela “pontos” em que o campo [DESIGNAÇAO ENT ANALI] seja = "*Inactividade*" AND Pontos.DataFim=#12/31/9999#
    mas se na outra tabela e para o mesmo NOrdem  na  “tbAusências”  o campo [CodAusencia]=6004 e [DataFim] seja o último registo com o [CodAusencia]=6004
    já não incluía esse registo

    o exemplo anexo está a fazer correto se na tbAusencia o campo [CodAusencia]=6004, exclui esse registo

    mas eu quero que exclua os registos que na tbAusencia o campo [CodAusencia]=6004, mas só se for o último, caso não seja o último registo, não excluir

    na imagem inseri manualmente o funcionário Nº 3, seria assim o correto, mas na consulta não está a aparecer

    Anexos
    Inactiv_Rev3.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (149 Kb) Baixado 10 vez(es)
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR em Qua Fev 06, 2019 9:59 pm

    ups
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7127
    Registrado : 05/11/2009

    Re: Filtro na origem do relatório

    Mensagem  Alexandre Neves em Qui Fev 07, 2019 1:15 pm

    Boa tarde
    Não entendi bem
    Quer incluir na consulta o último registo com CodAusencia<>6004?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR em Qua Fev 13, 2019 9:49 pm

    Boa Noite, Caro Alexandre Neves

    antes de mais as minhas desculpas por não ter respondido logo, mas por razões de ordem particular estive ausente.

    então é o seguinte:
    pretendo que no relatório da BD anexa apareçam só os colaboradores que na tabela "Pontos" estão em inactividade, mas só os que tem datafim = 31-12-9999

    mas tem ainda outra condição, se na “tbAusências” o campo [CodAusencia]=6004 e [DataFim] seja o último registo com o [CodAusencia]=6004, esse colaborador já não aparecia no relatório.

    neste momento está a fazer parcialmente correto, filtra quem está em inactividade na tabela "Pontos, e caso na “tbAusências” exista algum registo desse colaborador com [CodAusencia]=6004, já não aparece no relatório e eu queria que aparecesse porque embora tenha [CodAusencia]=6004, não é o último registo, ou o que tem a data fim mais alta.

    Ou seja para estar correto, no relatório tem de aparecer o colaborador com Nº Ord 3 porque na tabela "Pontos" tem registo de Inactividade e datafim=31-12-9999 e na “tbAusências” o último registo tem o campo [CodAusencia] =6800


    espero que tenha entendido

    Obrigado

    José Silva
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7127
    Registrado : 05/11/2009

    Re: Filtro na origem do relatório

    Mensagem  Alexandre Neves em Sex Fev 15, 2019 12:22 pm

    Boa tarde
    Veja se é isto
    SELECT FimAusencia, * FROM (SELECT [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio AS InAusencia, tbAusencias.DataFim AS FimAusencia, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT FROM ((((Ficheiro_Mestre INNER JOIN Pontos ON Ficheiro_Mestre.[Nº ORDEM] = Pontos.[Nº ORD]) LEFT JOIN [Entidades Analiticas] ON Pontos.CCusto = [Entidades Analiticas].[E ANAL]) LEFT JOIN tbEmpresas ON Ficheiro_Mestre.CodEmpresa = tbEmpresas.CodEmpresa) LEFT JOIN tbAusencias ON Pontos.[Nº ORD] = tbAusencias.NOrdem) LEFT JOIN tbCodAusencia ON tbAusencias.CodAusencia = tbCodAusencia.CodAusencia GROUP BY [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio, tbAusencias.DataFim, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT HAVING [DESIGNAÇAO ENT ANALI] Like "*Inactividade*" AND Pontos.DataFim=#12/31/9999# AND SIT=1 ORDER BY [Nº ORD]) WHERE [Nº ORD] Not In (
    SELECT [Nº ORD] FROM Pontos LEFT JOIN tbAusencias ON Pontos.[Nº ORD]=tbAusencias.NOrdem WHERE (SELECT Max(NOrdem) FROM tbAusencias)=6004);


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR em Sex Fev 15, 2019 3:02 pm

    Boa Tarde, Caro Alexandre Neves,

    Provavelmente me expliquei mal

    A alteração deu uma listagem com 9 colaboradores, o correto seriam 5

    Ou seja mesmo estando em inatividade, quando o CodAusencia=6004, for o registo com data mais elevada, não aparece na listagem
    veja na listagem o funcionário Nº Ord 3, esse aparece e deve aparecer porque embora tenha cod ausência 6004, esse não é o registo com data mais elevada
    o NºOrd 5845 já não deve aparecer na listagem porque tem o ultimo registo com data mais elevada e codAusencia 6004
    o 37116, 42012 e 20736 igualmente não devem aparecer na listagem pela mesma razão
    O código anterior estava a fazer parcialmente correto porque excluía todos os que tivessem codausencia 6004, logo estava a excluir o funcionário nº 3, oque eu quero é que não exclua quando o codausencia 6004 não é o ultimo registo

    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7127
    Registrado : 05/11/2009

    Re: Filtro na origem do relatório

    Mensagem  Alexandre Neves em Sex Fev 15, 2019 4:03 pm

    Será isto?
    SELECT FimAusencia, * FROM (SELECT [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio AS InAusencia, tbAusencias.DataFim AS FimAusencia, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT FROM ((((Ficheiro_Mestre INNER JOIN Pontos ON Ficheiro_Mestre.[Nº ORDEM] = Pontos.[Nº ORD]) LEFT JOIN [Entidades Analiticas] ON Pontos.CCusto = [Entidades Analiticas].[E ANAL]) LEFT JOIN tbEmpresas ON Ficheiro_Mestre.CodEmpresa = tbEmpresas.CodEmpresa) LEFT JOIN tbAusencias ON Pontos.[Nº ORD] = tbAusencias.NOrdem) LEFT JOIN tbCodAusencia ON tbAusencias.CodAusencia = tbCodAusencia.CodAusencia GROUP BY [Nº ORD], CCusto, [DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, DesigAusencia, tbAusencias.DataInicio, tbAusencias.DataFim, NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, ZONA, SIT HAVING [DESIGNAÇAO ENT ANALI] Like "*Inactividade*" AND Pontos.DataFim=#12/31/9999# AND SIT=1 ORDER BY [Nº ORD]) WHERE [Nº ORD] Not In (
    SELECT [Nº ORD] FROM Pontos LEFT JOIN tbAusencias ON Pontos.[Nº ORD]=tbAusencias.NOrdem WHERE CodAusencia=6004 and NOrdem=DLast('NOrdem','tbAusencias'));

    Falou em último registo, registo com data mais elevada (qual data?)
    Se não for este código, informe ao certo e disponibilize dados que trabalha para o resultado do filtro ser igual


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR em Dom Fev 17, 2019 7:58 pm

    Caro, Alexandre Neves,

    anexo o exemplo

    que está a fazer parcialmente correto ou seja:

    a intenção é saber quais os funcionários que na tabela "Pontos" estão em Inactividade com datafim = 31-12-9999

    todos os funcionários que na tabela "Pontos" estiverem em Inactividade com datafim = 31-12-9999 devem aparecer na listagem, exceto se na tabela "tbAusencias" o campo [CodAusencia] 6004 for o último registo

    se testar na bd em anexo, o funcionário nº ordem 3 não aparece na listagem porque tem CodAusencia=6004, mas deveria aparecer porque esse registo não é o último, só não deveria aparecer se no lugar do cod 6800 fosse 6004

    ou seja só não deve aparecer na listagem quando o último registo com codausencia 6004 for o último




    quando falava em último registo, registo com data mais elevada (era na tbAusencias a datafim mais elevada é quem manda pois se o cod for  6004 esse funcionário não é considerado na listagem mesmo que esteja em inactividade, mas se o codausencia for diferente de 6004 deve aparecer na listagem )

    espero ter explicado corretamente

    José Silva
    Anexos
    Inactividade_Rev5.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (83 Kb) Baixado 5 vez(es)
    Alexandre Neves
    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7127
    Registrado : 05/11/2009

    Re: Filtro na origem do relatório

    Mensagem  Alexandre Neves Ontem à(s) 10:28 am

    Boa tarde
    Será isto
    SELECT Pontos.[Nº ORD], Pontos.CCusto, [Entidades Analiticas].[DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, tbCodAusencia.DesigAusencia, tbAusencias.DataInicio AS InAusencia, tbAusencias.DataFim AS FimAusencia, Ficheiro_Mestre.NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, Ficheiro_Mestre.ZONA, Ficheiro_Mestre.SIT
    FROM ((((Ficheiro_Mestre INNER JOIN Pontos ON Ficheiro_Mestre.[Nº ORDEM] = Pontos.[Nº ORD]) LEFT JOIN [Entidades Analiticas] ON Pontos.CCusto = [Entidades Analiticas].[E ANAL]) LEFT JOIN tbEmpresas ON Ficheiro_Mestre.CodEmpresa = tbEmpresas.CodEmpresa) LEFT JOIN tbAusencias ON Pontos.[Nº ORD] = tbAusencias.NOrdem) LEFT JOIN tbCodAusencia ON tbAusencias.CodAusencia = tbCodAusencia.CodAusencia
    GROUP BY Pontos.[Nº ORD], Pontos.CCusto, [Entidades Analiticas].[DESIGNAÇAO ENT ANALI], Pontos.DataInicio, Pontos.DataFim, tbAusencias.CodAusencia, tbCodAusencia.DesigAusencia, tbAusencias.DataInicio, tbAusencias.DataFim, Ficheiro_Mestre.NOME, Ficheiro_Mestre.CodEmpresa, tbEmpresas.NomeEmpresa, Ficheiro_Mestre.ZONA, Ficheiro_Mestre.SIT, Pontos.[%Imput]
    HAVING (((Pontos.[Nº ORD]) Not In (SELECT NOrdem FROM (SELECT NOrdem,Last(CodAusencia) as Ult FROM tbAusencias GROUP BY NOrdem) WHERE Ult=6004)) AND (([Entidades Analiticas].[DESIGNAÇAO ENT ANALI]) Like "*Inactividade*") AND ((Pontos.DataFim)=#12/31/9999#) AND ((Ficheiro_Mestre.SIT)=1))
    ORDER BY Pontos.[Nº ORD];


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo
    avatar
    JIR
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 97
    Registrado : 28/08/2016

    Re: Filtro na origem do relatório

    Mensagem  JIR Hoje à(s) 11:50 am

    Boa Tarde, Caro Alexandre Neves,

    Desculpe a demora na resposta mas estive a fazer testes para ver se definitivamente fechava este tema, surgiram apenas duas dúvidas

    1- o teste correu bem para tabelas com poucos registos, é isto mesmo, mas quando tentei em real com tabelas de muitos registos, demora demasiado tempo (uma eternidade a gerar o relatório), sabe dizer porquê, estarei a cometer algum erro ou é mesmo assim? (anexei a BD Inactividade_Rev6.accdb com as tabelas reais) será que pode testar e ajudar a diminuir o tempo que o relatório demora a gerar

    2 - Como faço se quiser verificar por exemplo WHERE Ult=6004 ou 6000 ou 6002

    Not In (SELECT NOrdem FROM (SELECT NOrdem,Last(CodAusencia) as Ult FROM tbAusencias GROUP BY NOrdem) WHERE Ult=6004))


    Se puder ajudar agradeço para dar como resolvido

    José Silva
    Anexos
    Inactividade_Rev6.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (975 Kb) Baixado 0 vez(es)

      Data/hora atual: Sex Fev 22, 2019 2:13 pm