Fórum Grade em tempo de execução com FORTES REPORT #518802
04/05/2015
0
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
Curtir tópico
+ 0
Responder
Posts
04/05/2015
Wash
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;
Responder
Gostei + 0
19/05/2015
Wash
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.
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)