[firebase-br] Duvida SQL

Pedro Braga bragaped em gmail.com
Qua Ago 29 10:35:50 -03 2012


Bom Dia a Todos,
   Estou precisando realizar uma consulta de todas os itens vendidos que
ainda não foram pagos e que não ouveram devolução tenho as seguinte tabelas

COBRANCAS - Onde Gravo todos os itens Vendidos e sua situação (Pago, Em
Aberto)
ITEM_NF_EMITIDAS - Onde Gravo os Itens de notas Fiscais Emitidas (Nota
Modelo 1, Nota Fiscal Eletrônica)
NF_EMITIDAS - Onde Gravo o Cabeçalho da Nota e onde Possuo a Situação da
Mesma (Em Digitação, Transmitida/Impressa, Cancelada)

o que preciso é pegar as cobranças que não existem na tabela
ITEM_NF_EMITIDAS quando ou caso exista pegar apenas a diferença entre a
quantidade Cobranças e Quantidade Devolvidas.

Utilizo a SQL Abaixo porem quando existe uma ou mais Devoluções Canceladas
a mesma acaba duplicando os registro no resultset

select c.cod_produto as codigo,c.nom_produto as descricao,
c.qtd_quantidade-coalesce(iif(nf.status in (1,2,3),inf.quantidade,0),0) as
quantidade,
c.vlr_unitario, c.per_desconto, c.num_ecf,
iv.lote, pl.validade_mes, pl.validade_ano, pl.fabricacao_mes,
pl.fabricacao_ano, iv.cod_barras,
p.cst,p.cfop,p.ncm,p.COD_TRIBUTARIO, c.vlr_cobranca, c.vlr_pago
from cobrancas c
left join ite_vendas iv on iv.num_pedido=c.num_pedido and
iv.num_item=c.num_item and iv.cod_empresa=c.cod_empresa
left join produtos p on p.cod_produto=iv.cod_produto
left join produto_lote pl on pl.cod_produto=iv.cod_produto and
pl.lote=iv.lote

left join item_nf_emitidas inf on inf.cod_produto=c.cod_produto and
inf.num_cupom=c.num_ecf and inf.cfop in (1202,1411)
left join nf_emitidas nf on nf.cod_empresa=inf.cod_empresa and
nf.trm_numero=inf.trm_numero and nf.modelo=inf.modelo and
nf.num_nf=inf.num_nf

where c.cod_empresa=1 and c.frm_pagamento='CNV' and c.cod_convenio=18 and
parcela=1 and c.cod_situacao <= 3

and not exists(select inf.num_nf
                  from item_nf_emitidas inf
                  join nf_emitidas nf on nf.cod_empresa=inf.cod_empresa and
nf.trm_numero=inf.trm_numero and nf.modelo=inf.modelo and
nf.num_nf=inf.num_nf
                  where inf.cod_produto=c.cod_produto and
inf.num_cupom=c.num_ecf and inf.cfop in (1202,1411) and nf.status in
(1,2,3))

and cast(c.dat_emissao as date) between :dat_ini and :dat_fim and
c.vlr_cobranca>=0

Gostaria de saber dos Colegas se existe alguma maneira via SQL para fazer
isso ou caso tiver que criar um SP um auxilio quanto q forma que ficaria a
mesma.


Obrigado.
Pedro E. Braga
(18)8144-3939



Mais detalhes sobre a lista de discussão lista