select
  i.item,
  i.nome, 
  cast('Emitida' as varchar(20)) origem,
  ne.tipo, 
  opf.operacao,
  cast(opf.nome as varchar(50)) nome_operacao,
  sum(ie.quantidade * iif(opf.opfisico = '+', 1, -1)) quantidade
from
  notas_emitidas ne
  inner join itens_emitidos ie on ie.nota = ne.nota and ie.filial = ne.filial
  inner join itens i on i.item = ie.item
  inner join operacoes_fiscais opf on opf.operacao = ne.operacao
where
  ne.filial = :Filial
  and ne.cancelada = 'N'
  and ne.tipo in ('A', 'G', 'J')
  and ne.data_emissao >= :Data_Inicial and ne.data_emissao < :Data_Final + 1
group by
  1, 2, 3, 4, 5, 6

union all

select
  i.item,
  i.nome,
  cast('Recebida' as varchar(30)),
  nr.tipo,
  ope.operacao,
  cast(ope.descricao as varchar(50)),
  sum(ir.quantidade)
from
  notas_recebidas nr
  inner join itens_recebidos ir on ir.nota = nr.nota and ir.filial = nr.filial
  inner join itens i on i.item = ir.item
  inner join operacoes_entradas ope on ope.operacao = nr.operacao
where
  nr.filial = :Filial
  and nr.cancelada = 'N'
  and nr.tipo in ('B', 'G')
  and nr.data_entrada >= :Data_Inicial and nr.data_entrada < :Data_Final + 1
group by
  1, 2, 3, 4, 5, 6

order by
  1, 2, 3, 4, 5, 6
