billjr07 0 Denunciar post Postado Junho 29, 2005 Olá,Estou tendo o seguinte problema.Tenho que construir um relatório que será uma Tabela de Preços, ondeconsulto 3 tabelas. Como tentarei demonstrar a seguir:TiposVeiculos (1) ---> (n) TabelaPrecos (n) <---- (1) DestinosPreciso que no relatório eu imprima em cada linha o destino e seusvalores correspondentes com os tipo de veículos. Exemplo:Estado - Cidade - Distancia - Valor Tipo1 - Valor Tipo2 - Valor Tipo3 - etc.Pensei em criar uma tabela temporária para criar uma coluna com ovalor de cada tipo de veículo, mas não sei como criar o relatorio,sendo que o tipo de veículo depende do número de registros na tabela.Estou utilizando o QReport no Delphi 7.Alguém tem alguma solução para isto?[]´sJunior Compartilhar este post Link para o post Compartilhar em outros sites
Mordegarius 0 Denunciar post Postado Junho 30, 2005 Amigo,Eu tenho um exemplo que eu desenvolvi para um amigo que tinha basicamente a mesma dúvida que você... tbm utilizando uma tabela temporária... abaixo segue o código de exemplo...//***************************************************************************//// Exemplo para impressão de relatório em colunas N x N //// //// Autor............: Evandro Viter //// Data da Criação..: 01/04/2005 //// Data da Alteração: 01/04/2005 ////***************************************************************************//unit Unit2;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBTables, DB, RxMemDS, DateUtils, Grids, DBGrids, Buttons, ExtCtrls;type TForm2 = class(TForm) Button1: TBitBtn; Button2: TBitBtn; Total: TRxMemoryData; TotalJaneiro: TCurrencyField; TotalFevereiro: TCurrencyField; TotalMarco: TCurrencyField; DataSource1: TDataSource; Query1: TQuery; Query1TOTAL: TFloatField; Query1COD_AGT: TStringField; TotalCodigo: TIntegerField; DataSource2: TDataSource; TotalAbril: TCurrencyField; TotalMaio: TCurrencyField; TotalJunho: TCurrencyField; TotalJulho: TCurrencyField; TotalAgosto: TCurrencyField; TotalSetembro: TCurrencyField; TotalOutubro: TCurrencyField; TotalNovembro: TCurrencyField; TotalDezembro: TCurrencyField; Panel1: TPanel; DBGrid1: TDBGrid; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form2: TForm2;implementationuses Unit1;{$R *.dfm}procedure TForm2.Button1Click(Sender: TObject);var i, dia: Integer;begin Total.EmptyTable; For i:= 1 to 12 do begin dia:= DaysInAMonth(1997, i); Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Select Sum(Vl_Dep) As Total, Cod_Agt'); Query1.SQL.Add('From ARR_DEP'); if Length(IntToStr(i)) = 1 then Query1.SQL.Add('Where Dt_lote Between ''0' + inttostr(i) + '/01/1997'' And ''0' + inttostr(i) + '/' + IntToStr(Dia) + '/1997''') else Query1.SQL.Add('Where Dt_lote Between ''' + inttostr(i) + '/01/1997'' And ''' + inttostr(i) + '/' + IntToStr(Dia) + '/1997'''); Query1.SQL.Add('Group By Cod_Agt'); Query1.SQL.Add('Order By Cod_Agt Desc'); Query1.Open; Total.Open; while Not (Query1.Eof) do begin Case i of 1: begin Total.Insert; Total.FieldByName('Codigo').AsInteger:= Query1.FieldByName('Cod_Agt').AsInteger; Total.FieldByName('Janeiro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; 2: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Fevereiro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 3: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Marco').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 4: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Abril').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 5: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Maio').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 6: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Junho').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 7: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Julho').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 8: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Agosto').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 9: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Setembro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 10: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Outubro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 11: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Novembro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; 12: begin Total.First; while not total.Eof do begin if Query1.FieldByName('Cod_Agt').AsInteger = Total.FieldByName('Codigo').AsInteger then begin Total.Edit; Total.FieldByName('Dezembro').AsCurrency:= Query1.FieldByName('Total').AsCurrency; Total.Post; end; Total.Next; end; end; end; Query1.Next; end; Total.First; end; Form1.QuickRep1.Preview;end;procedure TForm2.Button2Click(Sender: TObject);begin Total.Free; Close;end;end.Espero ter ajudado!![]'s Compartilhar este post Link para o post Compartilhar em outros sites
proteus 0 Denunciar post Postado Junho 30, 2005 complementando, uma dica bem interessante sobre tabelas temporárias é o uso do rxMemoryData,,, no pacote RXLib...mto bom pra isso Compartilhar este post Link para o post Compartilhar em outros sites
billjr07 0 Denunciar post Postado Junho 30, 2005 Obrigado, vou testar aqui. Compartilhar este post Link para o post Compartilhar em outros sites