康虎云报表中同一个数据表,多张不同格式报表,如何实现根据不同条件显示(打印)不同页

admin 2021-3-12 53064

有个客户提出个需求:

同一张数据表,需要根据条件生成并打印不同格式的报表。我这边通过一个订单来演示一下。

Step 1: 

准备数据生成Json,导入康虎云报表打印设计器,并生成第一张报表



Step 2: 

另外创建四个新报表,Page2、Page3、Page4、Page5,为节省时间,我把Page1的格式复制到后四个Page中,并在报表标题后增加 下划线+数字 来区分,以便预览时可以看清效果。



Step 3: 在每个报表页的主数据栏(MasterData)右上角的“sale_order”上双击,输入过滤条件。

Page1只显示订单号为 S00009 的内容,则过滤条件是 <sale_order.name>='S00013',其他类推:

Page2过滤条件为 <sale_order.name>='S00015';

Page3过滤条件为 <sale_order.name>='S00020';

Page4过滤条件为 <sale_order.name>='S00021';

Page5过滤条件为 <sale_order.name>='S00022';

下面是Page2的设置截图,其他Page一样操作



Step 4: 

在左侧报表报表对象窗口,滚动条拉到最上面,找到report对象,点击选中report,然后在左下侧事件中,找到“OnStartReport”事件,在后面空格中双击,切换到代码编辑窗口:


然后在代码编辑窗口的OnStartReport事件函数内部编写代码:

procedure OnStartReport(Sender: TfrxComponent);
begin
{手写代码从这里开始}
  //获取报表主数据栏(MasterData)对应的数据表(DataSet)
  DS := TfrxDBDataSet(Report.GetDataset('sale_order')).DataSet;
  if DS <> nil then begin
  
    //按Page1里的过滤条件对数据表进行过滤,如果过滤后数据指针到结果,则表示无数据而隐藏Page1
    DS.Filtered := False;
    DS.Filter := 'name=''S00013''';
    DS.Filtered := True;
    if DS.Eof then Page1.Visible := False;
    
    //按Page2里的过滤条件对数据表进行过滤,如果过滤后数据指针到结果,则表示无数据而隐藏Page2
    DS.Filtered := false;
    DS.Filter := 'name=''S00095''';          //这里故意设置一个不存在的订单号,以验证是否能隐藏Page2
    DS.Filtered := true;
    if DS.Eof then Page2.Visible := False;
    
    //按Page3里的过滤条件对数据表进行过滤,如果过滤后数据指针到结果,则表示无数据而隐藏Page3
    DS.Filtered := false;
    DS.Filter := 'name=''S00020''';
    DS.Filtered := true;
    if DS.Eof then Page3.Visible := False;
    
    //按Page4里的过滤条件对数据表进行过滤,如果过滤后数据指针到结果,则表示无数据而隐藏Page4
    DS.Filtered := false;
    DS.Filter := 'name=''S00021''';
    DS.Filtered := true;
    if DS.Eof then Page4.Visible := False;
    
    //按Page5里的过滤条件对数据表进行过滤,如果过滤后数据指针到结果,则表示无数据而隐藏Page5
    DS.Filtered := false;
    DS.Filter := 'name=''S00022''';
    DS.Filtered := true;
    if DS.Eof then Page5.Visible := False;
    
    //最后取消加上的过滤条件
    DS.Filtered := false;
    DS.Filter := '';
    DS.Filtered := true;
    
  end;
      
{手写代码到这里结束}
end;

截图如下:



Step 5:

再预览一下效果:


我们再把Page2的过滤条件改一下,改成数据集中不存在订单号,比如: S00095,预览后发现销售订单_2隐藏不见了:



上传的附件:
最新回复 (0)
返回