各位高手:
本人现在做如下结构的报表,用的是qreport,苦于无法实现不同区域对应不同的table.请各位执教。
———————————————————————
Table1
———————————————————————
Table2 | Table1
|
———————————————————————
Table3
———————————————————————
项目急于完工,请各位大虾不吝赐教!!如果您指出使用其他的报表工具能够实现也可以。谢谢!
本人现在做如下结构的报表,用的是qreport,苦于无法实现不同区域对应不同的table.请各位执教。
———————————————————————
Table1
———————————————————————
Table2 | Table1
|
———————————————————————
Table3
———————————————————————
项目急于完工,请各位大虾不吝赐教!!如果您指出使用其他的报表工具能够实现也可以。谢谢!
解决方案 »
- 多程序运行问题
- 怎样把数据库里的数据, 关连到TClientDataSet上?具体情况如下:
- 大家看我的代码那个地方有误
- VC6 ATL写了个组件,在VC中使用的很好,在Delphi6中无法Import
- DELPHI支持在UNIT里写汇编么?
- 请问:如何通过InterBase建立数据库?为什么使用Server菜单栏的"Register"不能注册?
- SUIPack的suiListView不能正确显示。
- 菜鸟问题:关于空间动态生成的问题
- 主程序打开一个word文档,word文档显示后,主程序失去焦点,交给打开的word文档?
- 个人朋友请帮忙呀,这个问题并不难的
- Form1.Canvas.Brush.Color:=$00000000+i*$100;
- bde的bug?
begin
QryMaxID.Active := False;
QryMaxID.ParamByName('orderid').AsString := QryMaster.Fieldbyname('Orderid').AsString;
QryMaxID.Active := True;
end; Num := 0;
Block := 6;
BlockOld := 6;
S := 1;
FrmProductPacketPreview := TFrmProductPacketPreview.Create(self);
FrmProductPacketPreview.QuickRep1.Units := MM;
FrmProductPacketPreview.QuickRep1.Height := 252;
FrmProductPacketPreview.QuickRep1.Width := 220;// FrmProductPacketPreview.QuickRep1.Page.PaperSize := [Custom];
FrmProductPacketPreview.QuickRep1.Page.Length := 252;
FrmProductPacketPreview.QuickRep1.Page.Width := 220;
FrmProductPacketPreview.QuickRep1.Page.Units := MM; I := 60;
H := 65;
TI := 20;
TH := 70;
CI := 45;
CH := 60;
BI := 240;
BH := 190;
with (FDmdTranMaster as TDmdProductPacket) do
begin
QrySecond.First;
Number := QrySecond.FieldByName('PacketID').AsInteger;
while not QrySecond.Eof do
begin
if (Number <> QrySecond.FieldByName('PacketID').AsInteger) or (Num = 10)
or ((Number = QryMaxID.FieldByName('Packetid').AsInteger) and (QrySecond.RecordCount = S))
then
begin
aLabel.Caption := '';
Number := QrySecond.FieldByName('PacketID').AsInteger; if (QrySecond.RecordCount <> S) then
Block := Block + 1; Num := 0;
aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Top := TI;
aLabel.Left := TH;
aLabel.Font.Size := 12;
aLabel.Font.Style := [fsbold];
aLabel.Caption := QryMaster.FieldByName('custordnb').AsString + ' 电 缆 装 箱 单'; aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Top := CI;
aLabel.Left := CH;
aLabel.Font.Size := 8;
aLabel.Font.Style := [fsbold];
aLabel.Caption := '序号'; aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Top := CI;
aLabel.Left := CH + 120;
aLabel.Font.Size := 8;
aLabel.Font.Style := [fsbold];
aLabel.Caption := '电缆型号'; aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Top := CI;
aLabel.Left := CH + 250;
aLabel.Font.Size := 8;
aLabel.Font.Style := [fsbold];
aLabel.Caption := '数量'; aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Top := BI;
aLabel.Left := BH;
aLabel.Font.Size := 8;
aLabel.Font.Style := [fsbold];
aLabel.Caption := '第 ' + IntToStr(BlockOld - 5) + ' 箱 共 ' + QryMaster.FieldByName('PacketID').AsString + ' 箱';
end; if ((Block mod 6) = 0) and (BlockOld <> Block) then
begin
FrmProductPacketPreview.QuickRep1.Prepare;
FrmProductPacketPreview.QuickRep1.Preview;
// FrmProductPacketPreview.QuickRep1.Print;
end; if BlockOld <> Block then
case Block mod 6 of
0: begin I := 60; H := 65; TI := 20; TH := 70; CI := 45; CH := 60; BI := 240; BH := 190; BlockOld := Block; end;
1: begin I := 360; H := 65; TI := 320; TH := 70; CI := 345; CH := 60; BI := 550; BH := 190; BlockOld := Block; end;
2: begin I := 660; H := 65; TI := 620; TH := 70; CI := 645; CH := 60; BI := 860; BH := 190; BlockOld := Block; end;
3: begin I := 60; H := 440; TI := 20; TH := 450; CI := 45; CH := 435; BI := 240; BH := 540; BlockOld := Block; end;
4: begin I := 360; H := 440; TI := 320; TH := 450; CI := 345; CH := 435; BI := 550; BH := 540; BlockOld := Block; end;
5: begin I := 660; H := 440; TI := 620; TH := 450; CI := 645; CH := 435; BI := 860; BH := 540; BlockOld := Block; end;
end;//print begin
aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Left := H;
aLabel.Top := I;
aLabel.Height := 17;
aLabel.width := 40;
aLabel.Caption := InttoStr(S); aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Left := H + 100;
aLabel.Top := I;
aLabel.Height := 17;
aLabel.width := 40;
aLabel.Caption := QrySecond.FieldByName('ItemCode').AsString + QrySecond.FieldByName('Attribute').AsString; aLabel := TQRLabel.Create(FrmProductPacketPreview);
aLabel.Parent := FrmProductPacketPreview.QRBand1;
aLabel.Left := H + 250;
aLabel.Top := I;
aLabel.Height := 17;
aLabel.width := 40;
aLabel.Caption := QrySecond.FieldByName('Qty').AsString; I := I + 15;
Num := Num + 1;
S := S + 1;
//print end
QrySecond.Next;
end;// FrmProductPacketPreview.QuickRep1.Prepare;
FrmProductPacketPreview.QuickRep1.Preview;
FrmProductPacketPreview.Free;
以上打印的格式为,一张纸上打印六块内容,出自于同一个数据集。
可以先把表的数据全部取出来,
按一行一行,动态生成一个XML格式的报表文件,
生成的只需要是数据,这样很简单就可以生成的.
读入就可以了.表头可以先设计好.可以去www.soft198.com去看一下.
不过是要收费的.
便宜还是便宜的.