Fórum problemas em criar Tela de seleção para todos os relatórios #357768
28/04/2008
0
Boa noite, amigos estou tentando criar uma tela de seleção para todos os relatórios, esta tela deve ser exibida a partir de qualquer tela que tenha relatório, o que não está funcionando é as opções de ordenação da tela, ou seja, não está mostrando os campos de ordenação para o usuário escolher e não estou conseguindo passar o relatório que vai estar associado a esta tela. Por favor, me ajudem, segue o código fonte abaixo:
unit UAssImp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, quickrpt, Db, DBTables, printers, qrextra, QRExport,
qrprntr, Grids, Buttons, MDOQuery;
type
TfrmAssImp = class(TForm)
h_lbAviso: TLabel;
h_gbxRelatorio: TGroupBox;
h_btnVisualizar: TButton;
h_btnImprimir: TButton;
h_btnFechar: TButton;
h_lstbxRelatorio: TListBox;
h_pnlOrdenacao: TPanel;
h_lbOrdenacao: TLabel;
h_sbtnOrdenacao: TSpeedButton;
h_pnlOpcAvanc: TPanel;
h_lbOpcAvanc: TLabel;
h_sbtnOpcavanc: TSpeedButton;
h_gbxselOrdenacao: TGroupBox;
h_strgrdOrdenacao: TStringGrid;
H_pnlFiltro: TPanel;
h_dsOrdenacao: TDataSource;
procedure h_btnClickSys(Sender: TObject);
procedure h_btnFecharClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure h_strgrdOrdenacaoDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Move_Opcao(ColunaOrigem, ColunaDestino, Linha: integer);
procedure Arruma_Coluna(Coluna: Integer);
constructor Create(AOWner: TComponent;
DataSet: TMDOQuery); reintroduce;
end;
var
frmAssImp: TfrmAssImp;
I_QtdOpcoes: Integer;
_uSQL, S_Ordem: string;
report: TQuickRep;
implementation
{$R *.dfm}
procedure TfrmAssImp.h_btnClickSys(Sender: TObject);
var
L, L1: integer;
begin
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
Close;
SQL.Clear;
SQL.Text := _uSQL;
for L := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[1, L] = ´´ then
break;
for L1 := 0 to FieldCount - 1 do
if Fields[L1].DisplayLabel = h_strgrdOrdenacao.Cells[1, L] then
begin
if S_Ordem = ´´ then
S_Ordem := ´ Order By ´ + Fields[L1].Origin
else
S_Ordem := S_Ordem + ´, ´ + Fields[L1].Origin;
end;
SQL.Text := SQL.Text + S_Ordem;
Open;
end;
if sender = h_btnVisualizar then
report.preview
else
if sender = h_btnImprimir then
report.print;
end;
procedure TfrmAssImp.h_btnFecharClick(Sender: TObject);
begin
Close;
end;
constructor TfrmAssImp.Create(AOWner: TComponent; DataSet: TMDOQuery);
begin
inherited
create(AOWner);
h_dsOrdenacao.DataSet := DataSet;
end;
procedure TfrmAssImp.FormShow(Sender: TObject);
var
K: integer;
begin
I_QtdOpcoes := 0;
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
_uSQL := SQL.Text;
For K := 0 to FieldCount - 1 do
if Fields.Fields[K].Tag = 1 then
begin
Inc(I_QtdOpcoes);
h_strgrdOrdenacao.RowCount := I_QtdOpcoes + 1;
h_strgrdOrdenacao.Cells[0, I_QtdOpcoes] :=
Fields.Fields[K].DisplayLabel;
end;
h_strgrdOrdenacao.FixedRows := 1;
h_strgrdOrdenacao.Cells[0, 0] := ´Opções´;
h_strgrdOrdenacao.Cells[1, 0] := ´Ordem selecionada´
end;
end;
procedure TfrmAssImp.Move_Opcao(ColunaOrigem, ColunaDestino,
Linha: integer);
var
x: Integer;
begin
for x := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[ColunaDestino, x] = ´´ then
begin
h_strgrdOrdenacao.Cells[ColunaDestino, x] :=
h_strgrdOrdenacao.Cells[ColunaDestino, Linha];
h_strgrdOrdenacao.Cells[ColunaOrigem, Linha] := ´´;
break;
end;
Arruma_Coluna(ColunaOrigem);
end;
procedure TfrmAssImp.Arruma_Coluna(Coluna: Integer);
var
j: Integer;
begin
for j := 1 to I_QtdOpcoes - 1 do
if h_strgrdOrdenacao.Cells[Coluna, j] = ´´ then
begin
h_strgrdOrdenacao.Cells[Coluna, j] :=
h_strgrdOrdenacao.Cells[Coluna, j + 1];
h_strgrdOrdenacao.Cells[Coluna, j + 1] := ´´;
end;
end;
procedure TfrmAssImp.h_strgrdOrdenacaoDblClick(Sender: TObject);
begin
if h_strgrdOrdenacao.Row > 0 then
if h_strgrdOrdenacao.Col = 0 then
Move_Opcao(0, 1, h_strgrdOrdenacao.Row)
else
Move_Opcao(1, 0, h_strgrdOrdenacao.Row);
end;
end.
unit UAssImp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, quickrpt, Db, DBTables, printers, qrextra, QRExport,
qrprntr, Grids, Buttons, MDOQuery;
type
TfrmAssImp = class(TForm)
h_lbAviso: TLabel;
h_gbxRelatorio: TGroupBox;
h_btnVisualizar: TButton;
h_btnImprimir: TButton;
h_btnFechar: TButton;
h_lstbxRelatorio: TListBox;
h_pnlOrdenacao: TPanel;
h_lbOrdenacao: TLabel;
h_sbtnOrdenacao: TSpeedButton;
h_pnlOpcAvanc: TPanel;
h_lbOpcAvanc: TLabel;
h_sbtnOpcavanc: TSpeedButton;
h_gbxselOrdenacao: TGroupBox;
h_strgrdOrdenacao: TStringGrid;
H_pnlFiltro: TPanel;
h_dsOrdenacao: TDataSource;
procedure h_btnClickSys(Sender: TObject);
procedure h_btnFecharClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure h_strgrdOrdenacaoDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Move_Opcao(ColunaOrigem, ColunaDestino, Linha: integer);
procedure Arruma_Coluna(Coluna: Integer);
constructor Create(AOWner: TComponent;
DataSet: TMDOQuery); reintroduce;
end;
var
frmAssImp: TfrmAssImp;
I_QtdOpcoes: Integer;
_uSQL, S_Ordem: string;
report: TQuickRep;
implementation
{$R *.dfm}
procedure TfrmAssImp.h_btnClickSys(Sender: TObject);
var
L, L1: integer;
begin
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
Close;
SQL.Clear;
SQL.Text := _uSQL;
for L := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[1, L] = ´´ then
break;
for L1 := 0 to FieldCount - 1 do
if Fields[L1].DisplayLabel = h_strgrdOrdenacao.Cells[1, L] then
begin
if S_Ordem = ´´ then
S_Ordem := ´ Order By ´ + Fields[L1].Origin
else
S_Ordem := S_Ordem + ´, ´ + Fields[L1].Origin;
end;
SQL.Text := SQL.Text + S_Ordem;
Open;
end;
if sender = h_btnVisualizar then
report.preview
else
if sender = h_btnImprimir then
report.print;
end;
procedure TfrmAssImp.h_btnFecharClick(Sender: TObject);
begin
Close;
end;
constructor TfrmAssImp.Create(AOWner: TComponent; DataSet: TMDOQuery);
begin
inherited
create(AOWner);
h_dsOrdenacao.DataSet := DataSet;
end;
procedure TfrmAssImp.FormShow(Sender: TObject);
var
K: integer;
begin
I_QtdOpcoes := 0;
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
_uSQL := SQL.Text;
For K := 0 to FieldCount - 1 do
if Fields.Fields[K].Tag = 1 then
begin
Inc(I_QtdOpcoes);
h_strgrdOrdenacao.RowCount := I_QtdOpcoes + 1;
h_strgrdOrdenacao.Cells[0, I_QtdOpcoes] :=
Fields.Fields[K].DisplayLabel;
end;
h_strgrdOrdenacao.FixedRows := 1;
h_strgrdOrdenacao.Cells[0, 0] := ´Opções´;
h_strgrdOrdenacao.Cells[1, 0] := ´Ordem selecionada´
end;
end;
procedure TfrmAssImp.Move_Opcao(ColunaOrigem, ColunaDestino,
Linha: integer);
var
x: Integer;
begin
for x := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[ColunaDestino, x] = ´´ then
begin
h_strgrdOrdenacao.Cells[ColunaDestino, x] :=
h_strgrdOrdenacao.Cells[ColunaDestino, Linha];
h_strgrdOrdenacao.Cells[ColunaOrigem, Linha] := ´´;
break;
end;
Arruma_Coluna(ColunaOrigem);
end;
procedure TfrmAssImp.Arruma_Coluna(Coluna: Integer);
var
j: Integer;
begin
for j := 1 to I_QtdOpcoes - 1 do
if h_strgrdOrdenacao.Cells[Coluna, j] = ´´ then
begin
h_strgrdOrdenacao.Cells[Coluna, j] :=
h_strgrdOrdenacao.Cells[Coluna, j + 1];
h_strgrdOrdenacao.Cells[Coluna, j + 1] := ´´;
end;
end;
procedure TfrmAssImp.h_strgrdOrdenacaoDblClick(Sender: TObject);
begin
if h_strgrdOrdenacao.Row > 0 then
if h_strgrdOrdenacao.Col = 0 then
Move_Opcao(0, 1, h_strgrdOrdenacao.Row)
else
Move_Opcao(1, 0, h_strgrdOrdenacao.Row);
end;
end.
Eriley
Curtir tópico
+ 0
Responder
Posts
28/04/2008
Eriley
Boa noite, amigos estou tentando criar uma tela de seleção para todos os relatórios, esta tela deve ser exibida a partir de qualquer tela que tenha relatório, o que não está funcionando é as opções de ordenação da tela, ou seja, não está mostrando os campos de ordenação para o usuário escolher e não estou conseguindo passar o relatório que vai estar associado a esta tela. Por favor, me ajudem, segue o código fonte abaixo:
unit UAssImp;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, quickrpt, Db, DBTables, printers, qrextra, QRExport,
qrprntr, Grids, Buttons, MDOQuery;
type
TfrmAssImp = class(TForm)
h_lbAviso: TLabel;
h_gbxRelatorio: TGroupBox;
h_btnVisualizar: TButton;
h_btnImprimir: TButton;
h_btnFechar: TButton;
h_lstbxRelatorio: TListBox;
h_pnlOrdenacao: TPanel;
h_lbOrdenacao: TLabel;
h_sbtnOrdenacao: TSpeedButton;
h_pnlOpcAvanc: TPanel;
h_lbOpcAvanc: TLabel;
h_sbtnOpcavanc: TSpeedButton;
h_gbxselOrdenacao: TGroupBox;
h_strgrdOrdenacao: TStringGrid;
H_pnlFiltro: TPanel;
h_dsOrdenacao: TDataSource;
procedure h_btnClickSys(Sender: TObject);
procedure h_btnFecharClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure h_strgrdOrdenacaoDblClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure Move_Opcao(ColunaOrigem, ColunaDestino, Linha: integer);
procedure Arruma_Coluna(Coluna: Integer);
constructor Create(AOWner: TComponent;
DataSet: TMDOQuery); reintroduce;
end;
var
frmAssImp: TfrmAssImp;
I_QtdOpcoes: Integer;
_uSQL, S_Ordem: string;
report: TQuickRep;
implementation
{$R *.dfm}
procedure TfrmAssImp.h_btnClickSys(Sender: TObject);
var
L, L1: integer;
begin
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
Close;
SQL.Clear;
SQL.Text := _uSQL;
for L := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[1, L] = ´´ then
break;
for L1 := 0 to FieldCount - 1 do
if Fields[L1].DisplayLabel = h_strgrdOrdenacao.Cells[1, L] then
begin
if S_Ordem = ´´ then
S_Ordem := ´ Order By ´ + Fields[L1].Origin
else
S_Ordem := S_Ordem + ´, ´ + Fields[L1].Origin;
end;
SQL.Text := SQL.Text + S_Ordem;
Open;
end;
if sender = h_btnVisualizar then
report.preview
else
if sender = h_btnImprimir then
report.print;
end;
procedure TfrmAssImp.h_btnFecharClick(Sender: TObject);
begin
Close;
end;
constructor TfrmAssImp.Create(AOWner: TComponent; DataSet: TMDOQuery);
begin
inherited
create(AOWner);
h_dsOrdenacao.DataSet := DataSet;
end;
procedure TfrmAssImp.FormShow(Sender: TObject);
var
K: integer;
begin
I_QtdOpcoes := 0;
with h_dsOrdenacao.DataSet as TMDOQuery do
begin
_uSQL := SQL.Text;
For K := 0 to FieldCount - 1 do
if Fields.Fields[K].Tag = 1 then
begin
Inc(I_QtdOpcoes);
h_strgrdOrdenacao.RowCount := I_QtdOpcoes + 1;
h_strgrdOrdenacao.Cells[0, I_QtdOpcoes] :=
Fields.Fields[K].DisplayLabel;
end;
h_strgrdOrdenacao.FixedRows := 1;
h_strgrdOrdenacao.Cells[0, 0] := ´Opções´;
h_strgrdOrdenacao.Cells[1, 0] := ´Ordem selecionada´
end;
end;
procedure TfrmAssImp.Move_Opcao(ColunaOrigem, ColunaDestino,
Linha: integer);
var
x: Integer;
begin
for x := 1 to I_QtdOpcoes do
if h_strgrdOrdenacao.Cells[ColunaDestino, x] = ´´ then
begin
h_strgrdOrdenacao.Cells[ColunaDestino, x] :=
h_strgrdOrdenacao.Cells[ColunaDestino, Linha];
h_strgrdOrdenacao.Cells[ColunaOrigem, Linha] := ´´;
break;
end;
Arruma_Coluna(ColunaOrigem);
end;
procedure TfrmAssImp.Arruma_Coluna(Coluna: Integer);
var
j: Integer;
begin
for j := 1 to I_QtdOpcoes - 1 do
if h_strgrdOrdenacao.Cells[Coluna, j] = ´´ then
begin
h_strgrdOrdenacao.Cells[Coluna, j] :=
h_strgrdOrdenacao.Cells[Coluna, j + 1];
h_strgrdOrdenacao.Cells[Coluna, j + 1] := ´´;
end;
end;
procedure TfrmAssImp.h_strgrdOrdenacaoDblClick(Sender: TObject);
begin
if h_strgrdOrdenacao.Row > 0 then
if h_strgrdOrdenacao.Col = 0 then
Move_Opcao(0, 1, h_strgrdOrdenacao.Row)
else
Move_Opcao(1, 0, h_strgrdOrdenacao.Row);
end;
end.
A ordenação já consegui resolver, só não consigo mostrar o relatório no evento procedure TfrmAssImp.h_btnClickSys(Sender: TObject);
Estou usando o seguinte código para chamar o relatório:
try
frmAssImp := TfrmAssImp.Create(self, dm.SQLCdsClassCta);
dm.SQLCdsClassCta.Close;
dm.SQLCdsClassCta.SQL.Clear;
dm.SQLCdsClassCta.SQL.Text := ´select * from VWCLASSCTA´;
frmAssImp.ShowModal;
try
report := Th_qrHerdarRCR1.Create(nil);
S_Ordem := ´ Order By CODCTA, CODSUBCTA, CODCLASSCTA´;
finally
report.Free;
report := nil;
end;
finally
dm.SQLCdsClassCta.Close;
frmAssImp.Free;
end;
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)