ID: enum_IDHelp_RelatFaturamentoExecucaoProjeto
Versão: 2.05.0
Nome do Relatório: Comparação Execução x Faturamento de Projeto (Relatórios/Produção/Projetos)
Objetivo: Efetuar a visualização do executado e faturado por projetos no período observando os valores de US utilizados na execução das ordens de serviço em comparação a rateio de faturamento por nota fiscal de serviço para cada obra.
Layouts: Os seguintes layouts podem ser aplicados na geração do relatório
Sintético: Mostra a totalização de execução e faturamento por projeto de forma a visualizar o resultado final do projeto/obra
Analítico: Mostra todos os lançamentos que geraram execução ou faturamento dentro de um projeto/obra.
Filtros: Para geração dos dados são observados os seguintes filtros.
Período: Período de datas para apuração dos dados a serem utilizadas para filtrar as ordens de serviço e as notas fiscais de serviço.
Contrato: Exige a indicação de um contrato base para geração do relatório e deverá ser permitido apenas contratos que o usuário tenha acesso.
Projeto: Permite a seleção de um projeto específico dentro do contrato
Setores: Permite a seleção de setores que o usuário tem acesso, quando não é informado setor as informações virão apenas de setores que o usuário tem acesso.
Extras:
Existe a opção de exportação dos dados para CSV no botão exportar existente na barra de ferramentas do sistema, os dados gerados serão o resultado das consultas obtidas para geração dos layouts de relatórios.
Querys para geração dos relatórios.
Query para geração dos dados macro:
select contrato.codigo as CodigoContrato, (contrato.numero) as NumeroContrato, (cliente.nomerazaosocial) as ClienteContrato, (projeto.codigo) as CodigoProjeto, (projeto.numeroprojeto) as NumeroProjeto, ('Execucao') as Tipo, (os.codigosetor) as CodigoSetor, (setor.setor) as Setor, (os.codigo) as Numero, (os.data) as Data, (servicoos.ValorMoedaServico) as Valor, (0) as ValorFaturamento, (servicoos.ValorMoedaServico) as ValorExecucao, (servicoos.ValorMoedaServico*-1) as ValorMatematico From os inner join projetoos on projetoos.codigoos = os.codigo inner join projeto on projeto.codigo = projetoos.codigoprojeto inner join contrato on contrato.codigo = projeto.codigocontrato inner join cliente on cliente.codigo = contrato.codigocliente inner join setor on setor.codigo = os.codigosetor inner join servicoos on servicoos.co
digoos = os.codigo Where (contrato.Codigo = 375 and os.data BETWEEN '1999-01-01' and '2028-12-12') union select (rateioprojeto.codigocontrato) as CodigoContrato, (contrato.numero) as NumeroContrato, (cliente.nomerazaosocial) as ClienteContrato, (rateioprojeto.codigoprojeto) as CodigoProjeto, (projeto.numeroprojeto) as NumeroProjeto, ('Faturamento') as Tipo, (nfservico.codigosetor) as CodigoSetor, (setor.setor) as Setor, (nfservico.numero) as Numero, (nfservico.dataemissao) as Data, (rateioprojeto.valorfaturado) as Valor, (rateioprojeto.valorfaturado) as ValorFaturamento, (0) as ValorExecucao, (rateioprojeto.valorfaturado) as ValorMatematico From rateioprojeto inner join nfservico on nfservico.codigo = rateioprojeto.codigonf inner join contrato on contrato.codigo = rateioprojeto.codigocontrato inner join cliente on cliente.codigo = contrato.codigocliente inner join projeto on projeto.codigo = rateioprojeto.codigoprojeto
inner join setor on setor.codigo = nfservico.codigosetor Where (rateioprojeto.tiponf = 0 and nfservico.TipoNFServico = 1 and rateioprojeto.codigocontrato = 375 and nfservico.dataemissao BETWEEN '1999-01-01' and '2028-12-12')
OBS: Para os campos abaixo deve ser feita as seguintes observações.
Campo | Descrição |
Valor | Este campo é preenchido em todas as linhas sendo o valor de faturamento ou de execução dependendo do campo de tipo, porem sempre vem preenchido |
ValorFaturamento | O campo de valor faturamento é preenchido apenas quando o registro se tratar de faturamento em nota fiscal de serviço, sendo zerado para o caso de execução em ordem de serviço. |
ValorExecucao | O campo de valor de execução é apenas preenchido quando o registro se tratar de ordem de serviço e quando não for o caso este item vem zerado. |
ValorMatematico | O campo de valor matemático corresponde ao valor a ser utilizado para soma do saldo do projeto sendo o valor de execução sendo gerado como valor negativo e o valor de faturamento como valor positivo de forma que se for somando esta coluna o resultado será o saldo de execução menos o faturamento |
Query para geração dos dados sintéticos: Vale lembrar que a consulta utilizada para geração dos dados sintéticos se aplica a uma consulta sobre a consulta dos dados macros, agrupando dos campos e efetuando os cálculos de totalização.
select (CodigoSetor) as CodigoSetor, (Setor) as Setor, (NumeroProjeto) as NumeroProjeto, sum((ValorExecucao)) as Execucao, sum((ValorFaturamento)) as Faturamento, sum((ValorMatematico)) As Saldo From Query1 Group By CodigoSetor, Setor, NumeroProjeto
ViewsDB: atl_vw_zeus_fatexecprojeto
Descrição: Foi criada uma viewr de banco de dados para manter as informações de execução de obras. Para não pesar o processamento de banco de dados os dados serão processados a partir de uma data específica. O query utilizando na geração da Viewr é:
SELECT
STRAIGHT_JOIN
contrato.codigo AS CodigoContrato,
( contrato.numero ) AS NumeroContrato,
( cliente.nomerazaosocial ) AS ClienteContrato,
( projeto.codigo ) AS CodigoProjeto,
( projeto.numeroprojeto ) AS NumeroProjeto,
( 'Execucao' ) AS Tipo,
( os.codigosetor ) AS CodigoSetor,
( setor.setor ) AS Setor,
( os.codigo ) AS Numero,
( os.DATA ) AS DATA,
( servicoos.ValorMoedaServico ) AS Valor,
( 0 ) AS ValorFaturamento,
( servicoos.ValorMoedaServico ) AS ValorExecucao,
( servicoos.ValorMoedaServico *- 1 ) AS ValorMatematico
FROM
os
INNER JOIN projetoos ON projetoos.codigoos = os.codigo
INNER JOIN projeto ON projeto.codigo = projetoos.codigoprojeto
INNER JOIN contrato ON contrato.codigo = projeto.codigocontrato
INNER JOIN cliente ON cliente.codigo = contrato.codigocliente
INNER JOIN setor ON setor.codigo = os.codigosetor
INNER JOIN servicoos ON servicoos.codigoos = os.codigo
WHERE
( os.data>='2023-08-01' and servicoos.ValorMoedaServico>0)
union
SELECT
( rateioprojeto.codigocontrato ) AS CodigoContrato,
( contrato.numero ) AS NumeroContrato,
( cliente.nomerazaosocial ) AS ClienteContrato,
( rateioprojeto.codigoprojeto ) AS CodigoProjeto,
( projeto.numeroprojeto ) AS NumeroProjeto,
( 'Faturamento' ) AS Tipo,
( nfservico.codigosetor ) AS CodigoSetor,
( setor.setor ) AS Setor,
( nfservico.numero ) AS Numero,
( nfservico.dataemissao ) AS DATA,
( rateioprojeto.valorfaturado ) AS Valor,
( rateioprojeto.valorfaturado ) AS ValorFaturamento,
( 0 ) AS ValorExecucao,
( rateioprojeto.valorfaturado ) AS ValorMatematico
FROM
rateioprojeto
INNER JOIN nfservico ON nfservico.codigo = rateioprojeto.codigonf
INNER JOIN contrato ON contrato.codigo = rateioprojeto.codigocontrato
INNER JOIN cliente ON cliente.codigo = contrato.codigocliente
INNER JOIN projeto ON projeto.codigo = rateioprojeto.codigoprojeto
INNER JOIN setor ON setor.codigo = nfservico.codigosetor
INNER JOIN setorusuario ON setorusuario.codigosetor = nfservico.codigosetor
AND setorusuario.codigousuario = 2930
WHERE
( rateioprojeto.tiponf = 0 AND nfservico.TipoNFServico = 1 and nfservico.dataemissao >='2023-08-01')