Relatório comparativo execução x faturamento de obra

Valdécio

Roniele Abreu

Autor Valdécio
Data de criação Aug 28, 2023
Última edição Modificado há 2 anos
Visualizações 36 visualizações

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