Select de produtos devolvidos

Firebird

17/07/2013

Gostaria de saber como fazer para selecionar os produtos de uma venda após a devolução de algum produto?

Exemplo

codigo descrição qtd preco_unitario total
1 bala 2 R$ 1,00 R$ 2,00
2 doce 3 R$ 2,00 R$ 6,00
3 paçoca 4 R$ 0,50 R$ 2,00


se eu devolver 1 doce e uma bala o relatorio mostra:

codigo descrição qtd preco_unitario total
1 bala 1 R$ 1,00 R$ 1,00
1 doce 2 R$ 2,00 R$ 4,00
3 paçoca 4 R$ 0,50 R$ 2,00
Edgar Junior

Edgar Junior

Curtidas 0

Respostas

William

William

17/07/2013

Olá Edgar, entendi a sua necessidade do relatório, mas não entendi a sua dúvida !!!

Qual é exatamente seu problema:

- Debitar as quantidades devolvidas?
- Construir a instrução SQL?
GOSTEI 0
Edgar Junior

Edgar Junior

17/07/2013

Construir a instrução SQL...
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/07/2013

Para lhe ajudar precisamos saber como você trata essa devolução.
O primeiro relatório é um select simples na tabela de itens da venda, certo?
Quando você faz a devolução, apenas subtrai a quantidade devolvida do item da venda? Se sim, o mesmo select deve mostrar os dados atualizados.
GOSTEI 0
William

William

17/07/2013

Edgar se você já debitou essa quantidade no banco, teoricamente seria só executar a mesma instrução SQL da primeira consulta.

Ou você quer um relatório só de produtos devolvidos?
GOSTEI 0
Edgar Junior

Edgar Junior

17/07/2013

Consegui fazer dessa maneira

select
cast(lpad(oi.codigo_produto,6,'0') as varchar(6)) as produto_codigo,
cast(p.descricao as varchar(60)) as produto_descricao,
cast(pm.descricao as varchar(50)) as produto_marca,
cast(coalesce(p.ref_produto_fornec,'') as varchar(20)) as produto_ref_fabricante,
cast(coalesce(oi.valor_total,0) / coalesce(oi.quantidade,0) as numeric(15,2)) as valor_unitario,
cast(m.sigla as varchar(5)) as unidade_medida_venda,
cast(oi.quantidade as numeric(15,3)) as qtd_vendida,
cast(coalesce(oi.quantidade_estornado,0) as numeric(15,3)) as qtd_devolvida,
cast(coalesce(oi.quantidade,0) - coalesce(oi.quantidade_estornado,0) as numeric(15,3)) as qtd_disponivel,
cast(sum((coalesce(oi.quantidade,0) - coalesce(oi.quantidade_estornado,0)) * (coalesce(oi.valor_total,0) / coalesce(oi.quantidade,0))) as numeric(15,2)) as valor_total
from devolucao_item di
join devolucao d on d.codigo = di.codigo_devolucao
left join orcamento o on o.codigo = d.codigo_orcamento
left join orcamento_item oi on oi.codigo_orcamento = o.codigo
left join produto p on (p.codigo = oi.codigo_produto)
left join produto_marca pm on (pm.codigo = p.cod_marca)
left join medidas m on (m.codigo = p.codigo_medida_venda)
where di.codigo_devolucao = :Codigo_Devolucao
and coalesce(d.codigo_orcamento,0) > 0
and coalesce(oi.quantidade,0) <> coalesce(oi.quantidade_estornado,0)
group by 1,2,3,4,5,6,7,8,9

union

select
cast(lpad(vi.codigo_produto,6,'0') as varchar(6)) as produto_codigo,
cast(p.descricao as varchar(60)) as produto_descricao,
cast(pm.descricao as varchar(50)) as produto_marca,
cast(coalesce(p.ref_produto_fornec,'') as varchar(20)) as produto_ref_fabricante,
cast(coalesce(vi.valor_total,0) / coalesce(vi.quantidade,0) as numeric(15,2)) as valor_unitario,
cast(m.sigla as varchar(5)) as unidade_medida_venda,
cast(vi.quantidade as numeric(15,3)) as qtd_vendida,
cast(coalesce(vi.devolucao_quantidade,0) as numeric(15,3)) as qtd_devolvida,
cast(coalesce(vi.quantidade,0) - coalesce(vi.devolucao_quantidade,0) as numeric(15,3)) as qtd_disponivel,
cast(sum((coalesce(vi.quantidade,0) - coalesce(vi.devolucao_quantidade,0)) * (coalesce(vi.valor_total,0) / coalesce(vi.quantidade,0))) as numeric(15,2)) as valor_total
from devolucao_item di
join devolucao d on d.codigo = di.codigo_devolucao
left join venda v on v.codigo = d.codigo_venda
left join venda_item vi on vi.codigo_venda = v.codigo
left join produto p on (p.codigo = vi.codigo_produto)
left join produto_marca pm on (pm.codigo = p.cod_marca)
left join medidas m on (m.codigo = p.codigo_medida_venda)
where di.codigo_devolucao = :Codigo_Devolucao
and coalesce(d.codigo_venda,0) > 0
and coalesce(vi.quantidade,0) <> coalesce(vi.devolucao_quantidade,0)
group by 1,2,3,4,5,6,7,8,9
GOSTEI 0
Edgar Junior

Edgar Junior

17/07/2013

Obrigado pelo interesse.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

17/07/2013

Valeu então por compartilhar a solução.
Estou concluindo o tópico.
GOSTEI 0
POSTAR