Relatório Cruzado ou Matriz no Fortes Report
Boa tarde, estou buscando ajuda para o Fortes Report em Delphi, de como fazer um relatório estilo o da foto
Os demais tratamentos como o campo cab que está o filtro vou tratar dentro do delphi, pois aqui está somente a tabela que terio os dados para cruzar
https://i.stack.imgur.com/pjSoE.jpg
, estou usando Delphi 11 CE e Firebird 3.0 como base de Dados, fiz alguns testes dentro do IBExpert, mas não ficou bom o resultado utilizando as filiais (conforme foto) como colunas, até pensei em pivotar as datas, porém fiquei pensando sem sair muito do lugar na questão de criar as colunas dentro do relatório em tempo de execução. Não tenho interesse em mudar o componente de relatório para o Fast Reports, que já vi que possui o matrix/crosstab dependendo a versão do Fast Reports pois a impressão do relatório vai ficar aparecendo o detalhe de licenciamento, o que não é algo que eu deseje na impressão final. Segue abaixo a SQLs que eu pretendo usarSELECT escala_filiais.descricao||' ('||SUBSTRING(100+EXTRACT(HOUR FROM escala_filiais.horario_ABERTURA)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM escala_filiais.horario_ABERTURA)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM escala_filiais.horario_FECHAMENTO)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM escala_filiais.horario_FECHAMENTO) FROM 2 FOR 2)||')' "FILIAL", LIST(( CASE WHEN domingo.CARGO = 1 THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' WHEN domingo.cargo = 2 THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' WHEN domingo.cargo = 3 AND (DOMINGO.horario_i = escala_filiais.horario_ABERTURA AND DOMINGO.horario_f = escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev WHEN domingo.cargo = 3 AND (DOMINGO.horario_i <> escala_filiais.horario_ABERTURA OR DOMINGO.horario_f <> escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' WHEN domingo.cargo = 4 AND (DOMINGO.horario_i = escala_filiais.horario_ABERTURA AND DOMINGO.horario_f = escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev WHEN domingo.cargo = 4 AND (DOMINGO.horario_i <> escala_filiais.horario_ABERTURA OR DOMINGO.horario_f <> escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' WHEN domingo.cargo = 6 AND (DOMINGO.horario_i = escala_filiais.horario_ABERTURA AND DOMINGO.horario_f = escala_filiais.horario_FECHAMENTO) THEN 'Depósito: '||funcionarios.nome_abrev WHEN domingo.cargo = 6 AND (DOMINGO.horario_i <> escala_filiais.horario_ABERTURA OR DOMINGO.horario_f <> escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' WHEN domingo.cargo = 5 AND (DOMINGO.horario_i = escala_filiais.horario_ABERTURA AND DOMINGO.horario_f = escala_filiais.horario_FECHAMENTO) THEN 'Depósito Central: '||FUNCIONARIOS.nome_abrev WHEN domingo.cargo = 5 AND (DOMINGO.horario_i <> escala_filiais.horario_ABERTURA OR DOMINGO.horario_f <> escala_filiais.horario_FECHAMENTO) THEN funcionarios.nome_abrev||' ('||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_i)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_i)FROM 2 FOR 2)||' - '||SUBSTRING(100+EXTRACT(HOUR FROM DOMINGO.horario_f)FROM 2 FOR 2)||':'||SUBSTRING(100+EXTRACT(minute FROM DOMINGO.horario_f) FROM 2 FOR 2)||')' else null end), ' - ') AS FUNCIONARIO, DOMINGO.DATA, DOMINGO.horario_i "INICIO", DOMINGO.HORARIO_F "FIM", funcionarios_cargo.descricao "CARGO" FROM escala_domingo DOMINGO LEFT JOIN funcionarios on funcionarios.id = DOMINGO.funcionario LEFT JOIN escala_filiais on escala_filiais.id = domingo.filial LEFT JOIN funcionarios_cargo on funcionarios_cargo.id = DOMINGO.cargo WHERE DOMINGO.CAB = 1 GROUP by DOMINGO.data, "FILIAL", "INICIO", "FIM", "CARGO", DOMINGO.CARGO ORDER BY DOMINGO.DATA, "FILIAL", DOMINGO.CARGO, "FUNCIONARIO"
Os demais tratamentos como o campo cab que está o filtro vou tratar dentro do delphi, pois aqui está somente a tabela que terio os dados para cruzar
Raoni
Curtidas 0