Grade em tempo de execução com FORTES REPORT
Olá pessoal!
Meu problema é o seguinte:
eu tenho uma tabela que possui as informações: código do produto, descrição, grade1, grade2 e quantidade.
Então por exemplo, nessa tabela eu possuo 2 registros:
1, camiseta verde P, verde, P e 1;
2, camiseta verde M, verde, M e 1.
Quando eu abro esse registro para exibição, eu o coloco em grade, ou seja, crio o clientdataset em tempo de execução,
colocando os fields como cor/tamanho, todas as grade2 e o total. Ficaria mais ou menos assim:
COR/TAMANHO | P | M | TOTAL
E vou inserindo nesse clientdataset, então quando coloco ele em um DBGRID, é exibido da seguinte forma:
COR/TAMANHO | P | M | TOTAL
VERDE | 1 | 1 | 2
TOTAL | 1 | 1 | 2
Porém, não sei como fazer isso em um relatório, no Fortes Report.
Alguém tem alguma ideia?
[img:descricao=Grade]http://arquivo.devmedia.com.br/forum/imagem/393515-20150504-172152.png[/img]
Meu problema é o seguinte:
eu tenho uma tabela que possui as informações: código do produto, descrição, grade1, grade2 e quantidade.
Então por exemplo, nessa tabela eu possuo 2 registros:
1, camiseta verde P, verde, P e 1;
2, camiseta verde M, verde, M e 1.
Quando eu abro esse registro para exibição, eu o coloco em grade, ou seja, crio o clientdataset em tempo de execução,
colocando os fields como cor/tamanho, todas as grade2 e o total. Ficaria mais ou menos assim:
COR/TAMANHO | P | M | TOTAL
E vou inserindo nesse clientdataset, então quando coloco ele em um DBGRID, é exibido da seguinte forma:
COR/TAMANHO | P | M | TOTAL
VERDE | 1 | 1 | 2
TOTAL | 1 | 1 | 2
Porém, não sei como fazer isso em um relatório, no Fortes Report.
Alguém tem alguma ideia?
[img:descricao=Grade]http://arquivo.devmedia.com.br/forum/imagem/393515-20150504-172152.png[/img]
Wash
Curtidas 0
Respostas
Wash
04/05/2015
Esse é o código que uso para montar a grade e preencher o DBGRID com o CLIENTDATASET.
Está funcionando perfeitamente!
Agora para criar essa mesma grade no FORTES REPORT em tempo de execução, eu não tenho ideia.
Está funcionando perfeitamente!
Agora para criar essa mesma grade no FORTES REPORT em tempo de execução, eu não tenho ideia.
procedure TfrmGrade.MontarGrade;
var
cds1,
cds2: TClientDataSet;
g1, g2, ng1, ng2: string;
procedure DefineTamanho(tam: integer);
var
w: integer;
begin
DBGridEh1.Columns[0].Width := cdsGrade.fieldbyname('TIPO_Y').Size;
for w := 2 to DBGridEh1.Columns.Count - 1 do
begin
DBGridEh1.Columns[w].Width := tam;
DBGridEh1.Columns[w].Footer.ValueType := fvtSum;
DBGridEh1.Columns[w].Footer.FieldName := DBGridEh1.Columns[w].FieldName;
end;
end;
begin
cdsGrade.DisableControls;
if cdsgrade.Active then
sistema.Db.DeleteAll(cdsGrade, false, false);
g1 := sistema.Db.getFieldValue('select CODIGRADE1 from mpalmo where codi = ' +
cdsDadosPriITEMPAI.AsString, 'CODIGRADE1');
g2 := sistema.Db.getFieldValue('select CODIGRADE2 from mpalmo where codi = ' +
cdsDadosPriITEMPAI.AsString, 'CODIGRADE2');
if ((g1 <> '') and (g2 <> '')) then
begin
cds1 :=
criaTClientDataSet('select * from GRADEITEMPAIITE where st=''A'' and Codigrade='
+ g1 + ' ORDER BY DES ');
cds2 :=
criaTClientDataSet('select * from GRADEITEMPAIITE where st=''A'' and Codigrade='
+ g2 + ' ORDER BY DES ');
ng1 := sistema.Db.getFieldValue('select DES from GRADEITEMPAI where Codi=' +
g1, 'DES');
ng2 := sistema.Db.getFieldValue('select DES from GRADEITEMPAI where Codi=' +
g2, 'DES');
cdsD1.Data := cds1.Data;
cdsD2.Data := cds2.Data;
cdsGrade.Fields.Clear;
cdsGrade.FieldDefs.Clear;
// --- Monta a Grade
cdsGrade.FieldDefs.Add('TIPO_Y', ftString, 60);
cdsGrade.FieldDefs.Add('CODIGRADEITEMPAIITE', ftInteger);
cds2.First;
while not cds2.Eof do
begin
cdsGrade.FieldDefs.Add(cds2.fieldbyname('CODI').AsString, ftFloat);
cds2.Next;
end;
cdsGrade.FieldDefs.Add('TOT', ftFloat);
cdsGrade.Close;
cdsGrade.CreateDataSet;
cdsGrade.Open;
cds2.First;
while not cds2.Eof do
begin
with cdsGrade do
begin
if FieldByName(cds2.fieldbyname('CODI').AsString) is TFloatField then
begin
FieldByName(cds2.fieldbyname('CODI').AsString).DisplayLabel :=
cds2.fieldbyname('DES').AsString;
FieldByName(cds2.fieldbyname('CODI').AsString).OnValidate :=
cdsGradeYValidate;
end;
end;
cds2.Next;
end;
// --- Colunas Montadas
cds1.First;
while not cds1.Eof do
begin
cdsGrade.Insert;
cdsGrade.FieldByName('TIPO_Y').AsString :=
cds1.fieldbyname('DES').AsString;
cdsGrade.FieldByName('CODIGRADEITEMPAIITE').AsInteger :=
cds1.fieldbyname('CODI').AsInteger;
cdsGrade.Post;
cds1.Next;
end;
with cdsGrade do
begin
FieldByName('TOT').DisplayLabel := 'TOTAL';
FieldByName('TOT').ReadOnly := true;
FieldByName('TIPO_Y').ReadOnly := true;
end;
cds1.Close;
freeandnil(cds1);
cds2.Close;
freeandnil(cds2);
end;
cdsGrade.EnableControls;
DBGridEh1.Repaint;
DBGridEh1.Columns[1].Visible := false;
Sleep(100);
Application.ProcessMessages;
DefineTamanho(70);
DBGridEh1.Columns[0].Title.Caption := ng1 + '/' + ng2;
end;GOSTEI 0
Wash
04/05/2015
Resolvi com um POG mesmo.
Criei as colunas e as deixei com VISIBLE false, conforme for preenchendo, vou colocando o VISIBLE para true.
Criei as colunas e as deixei com VISIBLE false, conforme for preenchendo, vou colocando o VISIBLE para true.
GOSTEI 0