Fórum Relatorio usando Rave (Multiplos Detail) #376410
27/04/2010
0
Jorge Trento
Curtir tópico
+ 0Posts
27/04/2010
Wesley Yamazack
Seguindo aquela ideia que lhe passei na video, inclua quantos Band você tiver que agrupar, e configure o mesmo igual ao fornecedor. Veja o exemplo que eu tenho
Terei band Funcionario(group key Codfuncionario) / cliente(group key Codcliente) / venda(group key Codvenda)
Terei databande Itemvenda(detailkey = codvenda) esta é a unica diferença
FuncionarioA
Cliente1
Venda1
ItemVenda1
ItemVenda2
ItemVenda3
ItemVenda4
ItemVenda5
=======================================
FuncionarioB
Cliente2
Venda2
ItemVenda1
ItemVenda2
ItemVenda3
ItemVenda4
ItemVenda5
=======================================
FuncionarioC
Cliente3
Venda3
ItemVenda1
ItemVenda2
ItemVenda3
ItemVenda4
ItemVenda5
Agora você tem que preparar o teu script SQL , observe como fiz o meu.
SELECT C.IDCLIENTE CODCLIENTE, C.DESCRICAO DESCCLIENTE,
F.IDFUNCIONARIO CODFUNCIONARIO, F.DESCRICAO DESCFUNCIONARIO,
P.IDPRODUTO CODPRODUTO, P.DESCRICAO DESCPRODUTO,
V.IDVENDA, V.DATA, V.TOTAL,
VI.IDVENDAITEM, VI.QUANTIDADE, VI.VALOR
FROM CLIENTE C, FUNCIONARIO F, VENDA V, VENDAITEM VI, PRODUTO P
WHERE V.IDVENDA = VI.IDVENDA
AND V.IDFUNCIONARIO = F.IDFUNCIONARIO
AND V.IDCLIENTE = C.IDCLIENTE
AND P.IDPRODUTO = VI.IDPRODUTO
ORDER BY F.IDFUNCIONARIO, C.IDCLIENTE, V.IDVENDA, VI.IDVENDAITEM
Até aqui tranquilo certo ? Faça esta aplicação e veja se irá funcionar, qualquer coisa estamos aqui pra ajudar, se precisar me avisa que eu gravo uma vídeo pra ti.
Att,
Wesley Y
Gostei + 0
28/04/2010
Jorge Trento
Gostei + 0
28/04/2010
Wesley Yamazack
Para mudar a ordem das bands, você tem que clicar com o botão direito em cima da banda desejada e ir em
Order / Move.... Assim você irá consegui mudar a posição delas.
Quando a repetição é isso mesmo, veja como fica o meu resultset.
Desccliente Codfuncionario Descfuncionario CodProduto DescProduto idvenda data total idvendaitem MARCOS DA SILVA 1 JEFFERSON 1 PRODUTO 1 1 2010-01-01 100 1 MARCOS DA SILVA 1 JEFFERSON 2 PRODUTO 2 1 2010-01-01 100 2 WESLEY 1 JEFFERSON 1 PRODUTO 1 3 2010-01-01 200 3 WESLEY 1 JEFFERSON 2 PRODUTO 2 3 2010-01-01 200 4 WESLEY 1 JEFFERSON 3 PRODUTO 3 3 2010-01-01 200 5 WESLEY 1 JEFFERSON 4 PRODUTO 4 4 2010-01-02 32 6 WESLEY 1 JEFFERSON 5 PRODUTO 5 4 2010-01-02 32 7 WESLEY 1 JEFFERSON 6 PRODUTO 6 4 2010-01-02 32 8 WESLEY 1 JEFFERSON 3 PRODUTO 3 5 2010-01-02 3 9 WESLEY 1 JEFFERSON 2 PRODUTO 2 5 2010-01-02 3 10
Sacou a ideia ? Quebrar cada tabela sua em uma banda.
Um abraço
Wesley Y
Gostei + 0
28/04/2010
Jorge Trento
Segue no link abaixo o arquivo de rave que estou usando para o teste, para entendimento do que fiz, da uma verificada ve se é isso:
http://video.devmedia.com.br/discovirtual/151708/relfaturaAtraso.zip Tenho um inquilino em um imovel, ele tem varios fiadores e varias faturas, tudo isso regido por um contrato INQUILINO 1
FIADOR 1
FIADOR 2
FIADOR 3
IMOVEL 1
FATURA 1
FATURA 2
FATURA 3
===========================
INQUILINO 2
FIADOR 1
FIADOR 2
IMOVEL 2
FATURA 1
FATURA 2 Legenda: Keyinq, nomeinq = inquilino keyfia, nomefia = fiador sincon = contato sinimo = imovel sinfat1 = fatura
select (sincad.key_cad) as keyfia, (sincad.nome_cad) as nomefia,
(sincad.ddcom_cad || sincad.fonecom_cad) as fonecomfia,
(sincad.dddres_cad || sincad.foneres_cad) as foneresfia,
(sincad1.key_cad) as keyinq, (sincad1.nome_cad) as nomeinq,
(sincad1.ddcom_cad || sincad1.fonecom_cad) as fonecominq,
(sincad1.dddres_cad || sincad1.foneres_cad) as foneresinq,
sinimo.key_seq_imo, sinimo.endere_imo, sinimo.biarro_imo,
sincon.key_sincon, sinfat1.key_sinfat, sinfat1.mescom_fat,
sinfat1.anocom_fat, sinfat1.vencin_fat, sinfat1.total_fat,
(sinfat1.mescom_fat || sinfat1.anocom_fat) as competencia,
sinfat1.vlrmulta_fat, sinfat1.totcmulta_fat, sinfat1.keyloc_fat
from sinimo inner join sincon on (sinimo.key_seq_imo = sincon.key_seq_imo_con)
inner join sinfat1 on (sincon.key_sincon = sinfat1.key_sincon_fat)
inner join sinfia on (sincon.key_sincon = sinfia.key_fia_sincon)
inner join sincad on (sinfia.key_fia_sincad = sincad.key_cad)
inner join sincad sincad1 on (sincon.key_cad_con = sincad1.key_cad)
order by sincon.key_sincon
Gostei + 0
29/04/2010
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
30/04/2010
Wesley Yamazack
Estou aqui montando um BD para poder fazer um exemplo igual ao seu, porém estou querendo confirmar se a estrutura base das suas tabelas estão corretas, veja :
FATURA
FIADOR IDFATURA
IDFIADOR DESCRICAO
DESCRICAO IDIMOVEL
INQUILINO
IMOVEL IDINQUILO
IDIMOVEL NOME
DESCRICAO IDFIADOR
IDFIADOR
Confirme isso por favor
Um abraço
Wesley Y
Gostei + 0
30/04/2010
Jorge Trento
/**** Generated by IBExpert 2008.08.08 30/4/2010 11:41:49 ****/
/******************************************************************************/ SET SQL DIALECT 3; SET NAMES ISO8859_1; SET CLIENTLIB 'C:\SISIMO\fbclient.dll'; CREATE DATABASE 'localhost:C:\SISIMO\BDSISIMO\SISLOC.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET ISO8859_1; /******************************************************************************/
/**** Tables ****/
/******************************************************************************/ CREATE TABLE SINCAD (
KEY_CAD KEY_DOMAIN NOT NULL,
NOME_CAD VARCHAR(50) NOT NULL,
DATNAS_CAD DATE,
SEXO_CAD CHAR(1),
CLASE_CAD CHAR(1) NOT NULL,
CNPJ_CAD VARCHAR(18),
CPF_CAD VARCHAR(15),
RG_CAD VARCHAR(14),
KEYPROF_CAD INTEGER NOT NULL,
EDIFCOM_CAD VARCHAR(30),
EMPRES_CAD VARCHAR(50),
ENDCOM_CAD VARCHAR(50),
BAICOM_CAD VARCHAR(30),
CIDCOM_CAD VARCHAR(30),
UFCOM_CAD CHAR(2),
CAICOM_CAD CHAR(5),
CEPCOM_CAD CHAR(8),
OBSCOM_CAD INTEGER,
DDCOM_CAD VARCHAR(4),
FONECOM_CAD VARCHAR(8),
RAMCOM_CAD VARCHAR(8),
DDDFAXCOM_CAD CHAR(4),
FONEFAXCOM_CAD VARCHAR(8),
EDIFRES_CAD VARCHAR(30),
ENDRES_CAD VARCHAR(50),
BAIRRES_CAD VARCHAR(30),
CIDRES_CAD VARCHAR(30),
UFRES_CAD CHAR(2),
CEPRES_CAD CHAR(8),
CAIRES_CAD CHAR(5),
OBSRES_CAD INTEGER,
DDDRES_CAD CHAR(4),
FONERES_CAD CHAR(8)
);
CREATE TABLE SINCON (
KEY_SINCON KEY_DOMAIN NOT NULL,
KEY_SEQ_IMO_CON INTEGER NOT NULL,
KEY_CAD_CON INTEGER NOT NULL
);
CREATE TABLE SINFAT1 (
KEY_SINFAT KEY_DOMAIN NOT NULL,
TIPREG_FAT CHAR(1) NOT NULL,
ANOCOM_FAT CHAR(4) NOT NULL,
MESCOM_FAT CHAR(2) NOT NULL,
KEY_SINCON_FAT INTEGER NOT NULL,
VENCIN_FAT DATE NOT NULL,
TOTAL_FAT FLOAT,
PERCMULTA_FAT FLOAT,
VLRMULTA_FAT FLOAT,
TOTCMULTA_FAT FLOAT
);
CREATE TABLE SINFIA (
KEY_FIA_SINCON INTEGER NOT NULL,
KEY_FIA_SINCAD INTEGER NOT NULL,
CAUCAO_FIA FLOAT,
BANCO_FIA INTEGER
);
CREATE TABLE SINIMO (
KEY_SEQ_IMO KEY_DOMAIN NOT NULL,
KEY_CAD_IMO KEY_DOMAIN NOT NULL,
KEY_SINSUB KEY_DOMAIN,
SITUAC_IMO CHAR(1) NOT NULL,
NOME_IMO VARCHAR(50),
KEY_CON_IMO KEY_DOMAIN,
ENDERE_IMO VARCHAR(50) NOT NULL,
BIARRO_IMO VARCHAR(50) NOT NULL
);
/******************************************************************************/
/**** Primary Keys ****/
/******************************************************************************/ ALTER TABLE SINCAD ADD CONSTRAINT PK_SINCAD PRIMARY KEY (KEY_CAD);
ALTER TABLE SINCON ADD CONSTRAINT PK_SINCON PRIMARY KEY (KEY_SINCON);
ALTER TABLE SINFAT1 ADD CONSTRAINT PK_SINFAT1 PRIMARY KEY (KEY_SINFAT);
ALTER TABLE SINFIA ADD CONSTRAINT PK_SINFIA PRIMARY KEY (KEY_FIA_SINCON, KEY_FIA_SINCAD);
ALTER TABLE SINIMO ADD CONSTRAINT PK_SINIMO PRIMARY KEY (KEY_SEQ_IMO);
/******************************************************************************/
/**** Foreign Keys ****/
/******************************************************************************/ ALTER TABLE SINCON ADD CONSTRAINT FK_SINCON_1 FOREIGN KEY (KEY_SEQ_IMO_CON) REFERENCES SINIMO (KEY_SEQ_IMO);
/* Fields descriptions */ DESCRIBE FIELD NOME_CAD TABLE SINCAD
'Nome da Pessoa a Ser CAdastrada'; DESCRIBE FIELD SEXO_CAD TABLE SINCAD
'ACEITAR SOMENTE M OU F (Não)'; DESCRIBE FIELD CLASE_CAD TABLE SINCAD
'Esste campo pode aceitar somente F ou J'; DESCRIBE FIELD KEYPROF_CAD TABLE SINCAD
'Vem a chave do Cadastro de Profissões e SubProfissões'; DESCRIBE FIELD EDIFCOM_CAD TABLE SINCAD
'Edifício do endereço comercial'; DESCRIBE FIELD EMPRES_CAD TABLE SINCAD
'Empresa Onde Trabalha'; DESCRIBE FIELD ENDCOM_CAD TABLE SINCAD
'Endereço da Empresa onde trabalha'; DESCRIBE FIELD CAICOM_CAD TABLE SINCAD
'Caixa Postal'; DESCRIBE FIELD OBSCOM_CAD TABLE SINCAD
'Ovservação do Correio'; DESCRIBE FIELD RAMCOM_CAD TABLE SINCAD
'Ramal de telefone comercial'; DESCRIBE FIELD EDIFRES_CAD TABLE SINCAD
'Edifício do endereço residecial'; DESCRIBE FIELD CAIRES_CAD TABLE SINCAD
'Caixa postal da residencia do fulano'; DESCRIBE FIELD KEY_SEQ_IMO_CON TABLE SINCON
' cHAVE DO CÓDIGO DO IMÓVEL'; DESCRIBE FIELD KEY_CAD_CON TABLE SINCON
' CHAVE DO INQUILINO PEGA NO CADASTRO SINCAD (SEQUENCIAL)'; DESCRIBE FIELD KEY_SINFAT TABLE SINFAT1
'CHAVE SEQUENCIAL - ARQUIVO CABECALHO DAS FATURAS BOLETOS DE ALUGUEL'; DESCRIBE FIELD TIPREG_FAT TABLE SINFAT1
' TIPO DE REGISTRO 1= FATURA MES 2 = FATURA FINAL'; DESCRIBE FIELD KEY_SINCON_FAT TABLE SINFAT1
'CHAVE PRIMARIA DO SINCON - PREVER UMA CHAVE PARA FATURA SEM ALUGUEL'; DESCRIBE FIELD VENCIN_FAT TABLE SINFAT1
'VENCIMENTO SERÁ O CAMPO DIAVCT_INQ_CON DA TABELA SINCON + O MESCOM_FAT +1 E O ANO ANOCOM_FAT'; DESCRIBE FIELD TOTAL_FAT TABLE SINFAT1
'TOTAL GERAL DA FATURA'; DESCRIBE FIELD PERCMULTA_FAT TABLE SINFAT1
'O CAMPO MULTA FAT SERÁ O CAMPO PERCMULTA_TAB DA SINTAB'; DESCRIBE FIELD VLRMULTA_FAT TABLE SINFAT1
'VLRMULTA_TAB = TOTAL_FAT * PERCMULTA_FAT'; DESCRIBE FIELD TOTCMULTA_FAT TABLE SINFAT1
'É IGUAL O TOTAL_FAT + VLRMULTA_FAT'; DESCRIBE FIELD KEY_SEQ_IMO TABLE SINIMO
' SEQUENCIA DA CHAVE DO IMÓVEL'; DESCRIBE FIELD KEY_CAD_IMO TABLE SINIMO
' CHAVE DO CADASTRO GERAL IDENTIFICA O PROPRIETARIO'; DESCRIBE FIELD KEY_SINSUB TABLE SINIMO
' CHAMA CHAVE DO CADASTRO DE SUB GRUPO DE IMOVEIS - CHAVE ESTRANGEIRA'; DESCRIBE FIELD SITUAC_IMO TABLE SINIMO
'SITUAÇÃO DO IMÓVEL PODE ASSUMIR 1 - OCUPADO 2 = VAGO 3 = INATIVO 9 excluido'; DESCRIBE FIELD KEY_CON_IMO TABLE SINIMO
' CHAVE DO CONTRATO QUE ESTA ATIVO NO IMÓVEL';
Gostei + 0
30/04/2010
Wesley Yamazack
Assim já ajuda, porém fica complicado ter que cadastrar os dados, assim vou perder mais tempo para montar o relatório, você não pode mandar o BD completo, ou o insert de alguns dados, que eu possa fazer o teu Select aparecer, registros e assim montar o relatório ?
Ficaria muito mais prático
Att,
Wesley Y
Gostei + 0
04/05/2010
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
07/05/2010
Wesley Yamazack
Você me passou isso :
INQUILINO 1 BAND1 - AGRUPADO POR INQUILINO
FIADOR 1 BAND2 - AGRUPADO POR FIADOR
FIADOR 2 BAND2 - AGRUPADO POR FIADOR
FIADOR 3 BAND2 - AGRUPADO POR FIADOR
IMOVEL 1 BAND3 - AGRUPADO POR IMÓVEL
FATURA 1 - DATABAND
FATURA 2 - DATABAND
FATURA 3 - DATABAND
===========================
INQUILINO 2 BAND1 - AGRUPADO POR INQUILINO
FIADOR 1 BAND2 - AGRUPADO POR FIADOR
FIADOR 2 BAND2 - AGRUPADO POR FIADOR
FIADOR 3 BAND2 - AGRUPADO POR FIADOR
IMOVEL 10 BAND3 - AGRUPADO POR IMÓVEL
FATURA 21 - DATABAND
FATURA 22 - DATABAND
FATURA 23 - DATABAND
A única coisa que você tem que fazer no seu select, que irá repetir diversas informações para todas as faturas que você tiver, porém com o agrupamento não tem problema, você tem que usar o order by inquilino, fiador, imovel, fatura, justamente nesta ordem, pois se no select tiver um fiador 1 para o inquilino 1, na primeira posição e na última posição tiver esta mesma sequencia o relatório irá exibir os dados separadamente. ok ?
Um abraço
Wesley Y
Gostei + 0
07/05/2010
Wesley Yamazack
Wesley Y
Gostei + 0
07/05/2010
Wesley Yamazack
Wesley Y
Gostei + 0
09/05/2010
Jorge Trento
Gostei + 0
10/05/2010
Wesley Yamazack
Att,
Wesley Y
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)