Relatório a Prazo (ajuda)
Clovis Junior
Respostas
Rafael Cunha
04/03/2013
William
04/03/2013
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?
Bruno Leandro
04/03/2013
Clovis Junior
04/03/2013
[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
Clovis Junior
04/03/2013
dm.IBQ_RelVenda.Close;
dm.IBQ_RelVenda.ParamByName('codvenda').AsInteger :=
dm.IB_VENDAS_SERVICOSCODIGO.AsInteger;
dm.IBQ_RelVenda.Prepare;
dm.IBQ_RelVenda.Open;
Clovis Junior
04/03/2013
http://imageshack.us/photo/my-images/42/semttulonkj.png/
William
04/03/2013
Bruno Leandro
04/03/2013
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
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.
Clovis Junior
04/03/2013
http://imageshack.us/photo/my-images/801/semttulovh.png/
Clovis Junior
04/03/2013
Isso , sao parcelas ou parcelas unidas no quais estao pendentes sim
Bruno Leandro
04/03/2013
select cod_venda
from vendas
inner join parcela on parcela.cod_venda = vendas.cod_venda
where numero_de_parcelas > 1
Clovis Junior
04/03/2013
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;
Clovis Junior
04/03/2013
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;
Clovis Junior
04/03/2013
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
Perivaldo Martins
04/03/2013
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!
Clovis Junior
04/03/2013
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
Clovis Junior
04/03/2013
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
);
Perivaldo Martins
04/03/2013
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!
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
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!
Clovis Junior
04/03/2013
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
Clovis Junior
04/03/2013
http://img825.imageshack.us/img825/9595/semttulowmk.png
Perivaldo Martins
04/03/2013
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!
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
Tranquilo, estou aguardando, assim que estiver pronto te envio e compartilho a solução no fórum.
Boa sorte e bons códigos!
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
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!
Clovis Junior
04/03/2013
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.
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
Gostaria de sua permissão para modificar algumas coisas em seu projeto.
Boa sorte e bons códigos!
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
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!
Clovis Junior
04/03/2013
Property Continuous does not exit, ai pula para este outra mensagem
Erro Deading QuickRep2.Page. Property Continuous does not exit
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
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
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
Já está compilando normal, sem erros?
Boa sorte e bons códigos!
Perivaldo Martins
04/03/2013
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!
Perivaldo Martins
04/03/2013
Boa sorte e bons códigos!
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
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 ??
Clovis Junior
04/03/2013
Clovis Junior
04/03/2013
Perivaldo Martins
04/03/2013
Boa sorte e bons códigos!
Clovis Junior
04/03/2013