Relatório a Prazo (ajuda)

Delphi

04/03/2013

Ola galera , precisava de uma mão de alguem para elaboração de um relatório aprazo :s
Clovis Junior

Clovis Junior

Curtidas 0

Respostas

Rafael Cunha

Rafael Cunha

04/03/2013

Explique melhor o que está precisando para que fique mais fácil poder te ajudar.
GOSTEI 0
William

William

04/03/2013

Complementando o colega Rafael:

1 - Qual a versão do Delphi?

2 - Qual gerador de relatório vc vai usar?

3 - Qual SGBD vc está usando?

4 - Como estão gravados os dados necessários para gerar o relatório?

5 - Quais são os parâmetros para gerar tal relatório?
GOSTEI 0
Bruno Leandro

Bruno Leandro

04/03/2013

Ola ficou muito generico, voce poderia especificar com maior riqueza de detalhes a sua dificuldade, para que possamos auxilia-lo da melhor forma
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Meu banco de dados eh Firebird, eu uso a ferramenta IDE Delphi 2010 , o componente para relatorio eu estou usandu quickreport , so que assim quando fiz o relatorio avista para a cliente ele emite o relatorio com duas vias , uma via para a cliente e uma via para o estabelecimento ficou mais ou menos assim

[URL=http://imageshack.us/photo/my-images/42/semttulonkj.png/][IMG]http://img42.imageshack.us/img42/9829/semttulonkj.png[/IMG][/URL]

Agora amigos , queria criar um relatorio deste padrão com vendas aprazo,

meu sql de venda avista do relatorio é este


select
c.nome_cliente,
(i.prec_unitario * i.quantidade) as total,
 v.codigo,
 p.nome,
 i.prec_unitario,
 i.quantidade,
v.total_venda
from cliente c, produtos_servicos p, itens i,venda_servico v
where v.codigo = :codvenda
and i.cod_venda = v.codigo
and c.cod_cliente = v.cod_cliente
and p.cod_produto_servicos = i.cod_produto_servico 
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Este é o codigo no qual fica no final da linha de codigo na finalização da venda avista

dm.IBQ_RelVenda.Close;
        dm.IBQ_RelVenda.ParamByName('codvenda').AsInteger :=
          dm.IB_VENDAS_SERVICOSCODIGO.AsInteger;
        dm.IBQ_RelVenda.Prepare;
        dm.IBQ_RelVenda.Open;
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Esta é a imagem

http://imageshack.us/photo/my-images/42/semttulonkj.png/
GOSTEI 0
William

William

04/03/2013

Vc quer gerar um relatório para cada parcela?
GOSTEI 0
Bruno Leandro

Bruno Leandro

04/03/2013

certo, e o que diferencia uma compra a vista e uma compra a prazo, é gerado parcelas pendentes ?, fica com data contabilização do pagamento nula ou não teria esse tratamento
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Não nao , é um relatorio tpw aprazo mesmo , eh como se fosse de uma venda normal avista sabe , a questao é que aprazo eu coloquei nesta tabela para que ele guarde pra mim as notas das pessoas que efetuaram a venda aprazo , no qual será armanezado na tabela de contas receber , por isso que criei esta tabela parcela , pra ela pegar a situação da venda .
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

a minha tabela parcela tem os seguintes campos
http://imageshack.us/photo/my-images/812/semttulovzv.png/
ou seja neste referencia COD_VENDA eu estou pegando da tabela de venda os dados no quais forem vendas aprazo. correto??
fiz um relacionamento entre elas no qual vai se diferir entre situações da venda , "pago" , "em aberto" Sao as situaçoes de uma venda.
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Aqui será arquivada as vedas aprazo no qual tudo vem da tabela PARCELA


http://imageshack.us/photo/my-images/801/semttulovh.png/
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

certo, e o que diferencia uma compra a vista e uma compra a prazo, é gerado parcelas pendentes ?, fica com data contabilização do pagamento nula ou não teria esse tratamento


Isso , sao parcelas ou parcelas unidas no quais estao pendentes sim
GOSTEI 0
Bruno Leandro

Bruno Leandro

04/03/2013

pra voce pegar as vendas a prazo acredito que tenha numero_de_parcelas > 1, ja liste todas as vendas que foram a prazo

select cod_venda
from vendas
inner join parcela on parcela.cod_venda = vendas.cod_venda
where numero_de_parcelas > 1
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

pra voce pegar as vendas a prazo acredito que tenha numero_de_parcelas > 1, ja liste todas as vendas que foram a prazo

select cod_venda
from vendas
inner join parcela on parcela.cod_venda = vendas.cod_venda
where numero_de_parcelas > 1


Entao so que pra eu realizar a consulta de clientes que esta com dividas em abertas eu utilizo este codigo para pesquisar os clientes




With DM.IB_RECEBER Do
  begin
    Close;
    SQL.Clear;
    SQL.add(
      'Select venda_servico.data_venda,parcela.cod_parcela, parcela.valor_parcela,cliente.nome_cliente,parcela.situacao,parcela.valor_pago,parcela.data_pagamento');
    SQL.add(' From VENDA_SERVICO ');
    SQL.add('Inner Join PARCELA');
    SQL.add(' On PARCELA.COD_VENDA = VENDA_SERVICO.CODIGO');
    SQL.add('Inner Join CLIENTE');
    SQL.add('On VENDA_SERVICO.COD_CLIENTE = CLIENTE.COD_CLIENTE');
    SQL.add('and (upper(cliente.nome_cliente) like upper(:name))');
    ParamByName('name').AsString :=  Edit1.Text + '%';
    Open;
    DM.IBTransaction1.CommitRetaining;

  end;
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

pra voce pegar as vendas a prazo acredito que tenha numero_de_parcelas > 1, ja liste todas as vendas que foram a prazo

select cod_venda
from vendas
inner join parcela on parcela.cod_venda = vendas.cod_venda
where numero_de_parcelas > 1


Entao so que pra eu realizar a consulta de clientes que esta com dividas em abertas eu utilizo este codigo para pesquisar os clientes




With DM.IB_RECEBER Do
  begin
    Close;
    SQL.Clear;
    SQL.add(
      'Select venda_servico.data_venda,parcela.cod_parcela, parcela.valor_parcela,cliente.nome_cliente,parcela.situacao,parcela.valor_pago,parcela.data_pagamento');
    SQL.add(' From VENDA_SERVICO ');
    SQL.add('Inner Join PARCELA');
    SQL.add(' On PARCELA.COD_VENDA = VENDA_SERVICO.CODIGO');
    SQL.add('Inner Join CLIENTE');
    SQL.add('On VENDA_SERVICO.COD_CLIENTE = CLIENTE.COD_CLIENTE');
    SQL.add('and (upper(cliente.nome_cliente) like upper(:name))');
    ParamByName('name').AsString :=  Edit1.Text + '%';
    Open;
    DM.IBTransaction1.CommitRetaining;

  end;
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Só que neste sql ele nao me traz as informações dos produto/serviço que preciso :s precisaria de captar estes dados da tabela de produtos :s



Select venda_servico.data_venda,parcela.cod_parcela, parcela.valor_parcela,cliente.nome_cliente,parcela.situacao,parcela.valor_pago,parcela.data_pagamento
From VENDA_SERVICO
Inner Join PARCELA
On PARCELA.COD_VENDA = VENDA_SERVICO.CODIGO
Inner Join CLIENTE
On VENDA_SERVICO.COD_CLIENTE = CLIENTE.COD_CLIENTE
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Só que neste sql ele nao me traz as informações dos produto/serviço que preciso :s precisaria de captar estes dados da tabela de produtos :s



Select venda_servico.data_venda,parcela.cod_parcela, parcela.valor_parcela,cliente.nome_cliente,parcela.situacao,parcela.valor_pago,parcela.data_pagamento
From VENDA_SERVICO
Inner Join PARCELA
On PARCELA.COD_VENDA = VENDA_SERVICO.CODIGO
Inner Join CLIENTE
On VENDA_SERVICO.COD_CLIENTE = CLIENTE.COD_CLIENTE


Coloque para nós a estrutura de suas tabelas, assim poderemos montar uma consulta SQL, com junções que retornem os dados desejados.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Entao amigo tentei colocar este codigo na query para me passar os dados so que nao mostra nem um dado registrado :s



select
v.data_venda ,
parc.valor_parcela,
c.nome_cliente,
parc.situacao,
PARC.numero_de_parcelas,
PARC.numero_daparcela,
p.nome

from parcela parc,cliente c,venda_servico v,produtos_servicos p,itens i

where codigo = :codivenda
and v.codigo = parc.cod_venda
and v.cod_cliente = c.cod_cliente
and p.cod_produto_servicos = i.cod_produto_servico


se tiver como me passar pra mim teu email seria melhor
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

CREATE TABLE CLIENTE (
COD_CLIENTE INTEGER NOT NULL,
NOME_CLIENTE VARCHAR(40),
ENDERECO_CLIENTE VARCHAR(40),
NUMERO NUMERIC(15,2),
TELEFONE_RESD CHAR(15),
TELEFONE_CEL CHAR(15),
TELEFONE_OUTRO CHAR(15),
CIDADE VARCHAR(40),
CEP CHAR(16),
EMAIL VARCHAR(40)




CREATE TABLE ITENS (
COD_ITENS INTEGER NOT NULL,
COD_VENDA INTEGER NOT NULL,
COD_PRODUTO_SERVICO INTEGER,
QUANTIDADE INTEGER,
PREC_UNITARIO FLOAT
);



CREATE TABLE PARCELA (
COD_PARCELA INTEGER NOT NULL,
COD_VENDA INTEGER,
VALOR_PARCELA FLOAT,
SITUACAO VARCHAR(30),
NUMERO_DE_PARCELAS INTEGER,
NUMERO_DAPARCELA INTEGER,
VALOR_PAGO FLOAT,
DATA_VENCIMENTO DATE,
DATA_PAGAMENTO DATE,
FORMA_PAG VARCHAR(30),
COD_PRODUTO INTEGER
);




CREATE TABLE PRODUTOS_SERVICOS (
COD_PRODUTO_SERVICOS INTEGER NOT NULL,
NOME VARCHAR(40),
QUANTIDADE INTEGER,
PRECO_UNIT FLOAT,
TIPO VARCHAR(1)
);






CREATE TABLE VENDA_SERVICO (
CODIGO INTEGER NOT NULL,
COD_CLIENTE INTEGER,
DATA_VENDA DATE,
TOTAL_VENDA FLOAT,
TIPO CHAR(10),
COD_PAGAMENTO INTEGER
);


GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Teste o código abaixo:
Select v.data_venda, p.cod_parcela, p.valor_parcela,
c.nome_cliente, p.situacao, pr.nome, p.valor_pago, p.data_pagamento
From VENDA_SERVICO v
Inner Join PARCELA p
On P.COD_VENDA = V.CODIGO
Inner Join CLIENTE c
On V.COD_CLIENTE = C.COD_CLIENTE
Inner Join PRODUTOS_SERVICOS pr
On P.cod_produto = PR.cod_produto_servicos
where P.situacao = :PSITUACAO
order by 1


Veja se retorna o que vc deseja, qualquer coisa, estamos as disposição para tentar ajudar.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Não teria como você passar o teu email amigo??
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Teste o código abaixo:
Select v.data_venda, p.cod_parcela, p.valor_parcela,
c.nome_cliente, p.situacao, pr.nome, p.valor_pago, p.data_pagamento
From VENDA_SERVICO v
Inner Join PARCELA p
On P.COD_VENDA = V.CODIGO
Inner Join CLIENTE c
On V.COD_CLIENTE = C.COD_CLIENTE
Inner Join PRODUTOS_SERVICOS pr
On P.cod_produto = PR.cod_produto_servicos
where P.situacao = :PSITUACAO
order by 1

Tipo ele nao me retornou nem um valor , todos nulos

Veja se retorna o que vc deseja, qualquer coisa, estamos as disposição para tentar ajudar.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Com este codigo

Select
parcela.valor_parcela,
itens.quantidade,
itens.prec_unitario,
produtos_servicos.nome,
cliente.nome_cliente,
venda_servico.data_venda,
parcela.situacao


From PARCELA
Inner Join VENDA_SERVICO
On PARCELA.COD_VENDA = VENDA_SERVICO.CODIGO
Inner Join ITENS
On VENDA_SERVICO.CODIGO = ITENS.COD_VENDA
Inner Join PRODUTOS_SERVICOS
On PRODUTOS_SERVICOS.COD_PRODUTO_SERVICOS = ITENS.COD_PRODUTO_SERVICO
Join CLIENTE
On CLIENTE.COD_CLIENTE = VENDA_SERVICO.COD_CLIENTE



Ele esta me retornando apenas venda avista e nao EM ABERTO
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Olhem a imagem


http://img825.imageshack.us/img825/9595/semttulowmk.png
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Olhem a imagem


http://img825.imageshack.us/img825/9595/semttulowmk.png


Blza, seu banco é grande? Manda pro email: perivaldo_m@bol.com.br

Acho que está fácil de resolver, vou ficar aguardando, e após resolver colocaremos a solução no fórum.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

ok , eu estou lhe enviando meu banco de dados pra você dar uma olhada , o que eu queria mesmo , fazer o relatorio de cada cliente aprazo , ou seja em aberto , eu estou lhe enviando tambem o fonte pode ser??
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

ok , eu estou lhe enviando meu banco de dados pra você dar uma olhada , o que eu queria mesmo , fazer o relatorio de cada cliente aprazo , ou seja em aberto , eu estou lhe enviando tambem o fonte pode ser??


Tranquilo, estou aguardando, assim que estiver pronto te envio e compartilho a solução no fórum.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Ok amigo , eu lhe enviei o fonte em teu email pra você dar uma analisada
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Ok amigo , eu lhe enviei o fonte em teu email pra você dar uma analisada


Certo, vamos ao começo então, Vendas a prazo arquivadas, tem uma opção de consulta, blza, o que você gostaria que acontecesse nesse form?

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

nesta consulta , queria que listasse pra mim os produtos que o cliente efetuou a compra , tpw listasse todos produtos , ai neste caso ele nao lista os produtos do cliente , apenas mesmo o total e a situação da venda
so que neste caso nao queria que ficasse juntamente com a venda avista e ele esta mostrando a situação avista , pq quando você faz a venda avista , ela tambem fica inclusa nesta parte de vendas arquivadas , ou seja esta vendas arquivadas seria apenas vendas em abertas ou seja aprazo.E la na parte da venda quando vc vai efetuar tem um radiobuttom que tem opção avista e aprazo , no aprazo quando vc seleciona e coloca final da venda , eu queria que gerasse um relatório do mesmo jeito da venda avista.
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

porque na consulta vc ativa ela , ao vai em consultar cliente neste consultar cliente é o mesmo SQL das grid's
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

porque na consulta vc ativa ela , ao vai em consultar cliente neste consultar cliente é o mesmo SQL das grid's


Gostaria de sua permissão para modificar algumas coisas em seu projeto.


Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Claro concerteza meu amigo fica avontadi vio
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Qualquer coisa caso vc conseguir me mande pelo email
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Qualquer coisa caso vc conseguir me mande pelo email


Feito conforme sua solicitação, não sei se é exatamente o que você deseja, porém solicito que você assim que possível retorne ao tópico dando um feedback, é sempre bom compartilhar com os colegas as soluções encontradas.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Eai meu amigo Martins , Entao cara , ficou otimo mesmo , so que na hora quando vou copilar o codigo ele esta dando este erro


Property Continuous does not exit, ai pula para este outra mensagem

Erro Deading QuickRep2.Page. Property Continuous does not exit
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

E quando vou em meu DM ele mostra uma mensagem que Erro reading DM.SERVERTYP : Property Servertype does not exit
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Martins , qualquer coisa tiver on preciso falar contigo pra tirar uma duvida
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Martins eu estava percebendo que , este problema de nao aparecer os produtos da parcela é que ele nao esta sendo lançado o cod_produto_serviço na venda ou seja na parcela ele nao esta lendo o cod_produto_servico, so que quand coloquei este codigo

if (rbAprazo.Checked = True) then
begin
while i <= StrToInt(edtParcela.text) do
begin
dm.IB_PARCELA.Insert;

dm.IB_ParcelaCOD_VENDA.Value := dm.IB_VENDAS_SERVICOSCODIGO.Value;
dm.ib_parcelacod_produto_servicos := dm.IB_PRODUTOS_SERVICOSCOD_PRODUTO_SERVICOS; // Modificação aqui
dm.IB_ParcelaDATA_VENCIMENTO.Value := Date;
dm.IB_ParcelaVALOR_PARCELA.Value := valorparcel;
dm.IB_PARCELAFORMA_PAG.text := 'A PRAZO';
dm.IB_ParcelaSITUACAO.Value := 'EM ABERTO';
dm.IB_ParcelaNUMERO_DE_PARCELAS.Value := StrToInt(edtParcela.text);
dm.IB_ParcelaNUMERO_DAPARCELA.Value := i;
dm.IB_PARCELA.Post;
dm.IBTransaction1.CommitRetaining;
i := i + 1;
end;
..

...


...

ele ainda nao esta dando comiti dizendo qual produto que foi efetuado a compra daquela parcela , por isso que ele nao esta listando os produtos, queria saber o porque nao esta lançando estes produtos na tabela de parcela , porque no codigo da venda eu introduzi a linha dm.ib_parcelacod_produto_servicos := dm.IB_PRODUTOS_SERVICOSCOD_PRODUTO_SERVICOS;
pra ele receber o codigo , mais na hora que eu vou ver no banco ele nao esta null na tabela de parcelas
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Alguem aqui ?
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Alguem aqui ?

Já está compilando normal, sem erros?

Boa sorte e bons códigos!
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Martins eu estava percebendo que , este problema de nao aparecer os produtos da parcela é que ele nao esta sendo lançado o cod_produto_serviço na venda ou seja na parcela ele nao esta lendo o cod_produto_servico, so que quand coloquei este codigo

if (rbAprazo.Checked = True) then
begin
while i <= StrToInt(edtParcela.text) do
begin
dm.IB_PARCELA.Insert;

dm.IB_ParcelaCOD_VENDA.Value := dm.IB_VENDAS_SERVICOSCODIGO.Value;
dm.ib_parcelacod_produto_servicos := dm.IB_PRODUTOS_SERVICOSCOD_PRODUTO_SERVICOS; // Modificação aqui
dm.IB_ParcelaDATA_VENCIMENTO.Value := Date;
dm.IB_ParcelaVALOR_PARCELA.Value := valorparcel;
dm.IB_PARCELAFORMA_PAG.text := 'A PRAZO';
dm.IB_ParcelaSITUACAO.Value := 'EM ABERTO';
dm.IB_ParcelaNUMERO_DE_PARCELAS.Value := StrToInt(edtParcela.text);
dm.IB_ParcelaNUMERO_DAPARCELA.Value := i;
dm.IB_PARCELA.Post;
dm.IBTransaction1.CommitRetaining;
i := i + 1;
end;
..

...


...

ele ainda nao esta dando comiti dizendo qual produto que foi efetuado a compra daquela parcela , por isso que ele nao esta listando os produtos, queria saber o porque nao esta lançando estes produtos na tabela de parcela , porque no codigo da venda eu introduzi a linha dm.ib_parcelacod_produto_servicos := dm.IB_PRODUTOS_SERVICOSCOD_PRODUTO_SERVICOS;
pra ele receber o codigo , mais na hora que eu vou ver no banco ele nao esta null na tabela de parcelas


Em qual parte do projeto está esse código e como ele é disparado?

É no fechamento da venda, veja que você não pode ir buscar esse código do produto direto na tabela de produtos, pq como o sistema vai saber qual foi deles, se vc estiver usando uma tabela temporária, pegue os códigos dos produtos a partir dela.

Boa sorte e bons códigos!

GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Só retificando, se o seu código for disparado no fechamento da venda, você não pode fazer como está, indo buscar o código do produto na tabela de produtos sem que o sistema saiba qual produto foi selecionado. Se você estiver usando uma tabela temporária, tipo um ClientDataSet para gravar os itens da venda antes de gravar na tabela, pegue os códigos dos produtos de lá, lembrando que após a finalização da venda com sucesso o Cds deve ser limpo.

Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Na tabela de vendas que coloquei o codigo
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Sim sim eu estou usandu uma tabela temporaria para itens
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Então eu teria que passar este código
dm.IB_PARCELA.FieldByName('COD_PRODUTO_SERVICOS').Value := dm.IB_PRODUTOS_SERVICOSCOD_PRODUTO_SERVICOS.AsInteger;

dentro do botão de inserir os itens correto?
pelo que vejo se eu colocar diretamente ele nao vai captar o items que foi selecionado para a venda ??
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Martins em qual horario você fica disponivel no Forum , seria melhor pra gente esta trocando uma ideia
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Martins em qual horario você fica disponivel no Forum , seria melhor pra gente esta trocando uma ideia
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

04/03/2013

Conseguiu resolver o problema? Já está tudo certo com o programa?


Boa sorte e bons códigos!
GOSTEI 0
Clovis Junior

Clovis Junior

04/03/2013

Entao lhe enviei o fonte do programa como esta para você dar uma analizada Martins , chegou alguma coisa ai pra você?
GOSTEI 0
POSTAR