Crystal报表,子报表和共享变量

时间:2009-06-05 22:33:03

标签: crystal-reports

我在页眉中有一个公式@InitVars,其中包含以下内容和类似的行:

shared numbervar runWaste:=0;

在详细信息v中,我有一个子报告,其中包含一个公式@SetRunWaste:

shared numbervar runWaste;
if (OnFirstRecord) then
(
if not(isnull({x.x-or})) and 
not(isnull({x.y-override})) and {x.y-override} = true then
runWaste:={x.x-or} 
  else
runWaste:= {x.x}
);
runWaste

我可以看到子报告中该公式的输出是18.00。

但是,在另一个子报告,详细信息az和详细信息w(作为测试)的主报告中,我都有以下公式@test:

shared numbervar runWaste;
runWaste;

在这两个地方,它显示为0.00。

为什么显示0而不是18?

我正在使用Crystal Reports版本11.0.0.895。

3 个答案:

答案 0 :(得分:9)

问题是@InitVars位于页眉中,而不是报表头。它将每个页面顶部的变量重置为0。

将@InitVars移动到报告标题会修复它,以便在详细信息az中的子报告中显示正确的数字。

当我在主报表中包含变量时,我仍然会看到一些奇怪的行为,但由于这只是用于调试,而不是主要目标,我不在乎。

答案 1 :(得分:1)

我有一个模糊的记忆,我现在很难证实共享变量没有从子报表返回。还在寻找;这是周五下午的好事。

编辑:我找不到我要找的东西,所以一般的想法。检查评估时间,并确保主报表上的后一部分在子报表之后进行评估(WhilePrintingRecords可能是您的朋友)。

答案 2 :(得分:0)

来自文章Adding Sub reports ,Find Sub Total and Grand Total(To main Report)

  

Crystal Reports是一项业务   以前的情报应用程序   设计和生成报告   广泛的数据来源。子   报告是主要的儿童报告   报告可以嵌入主要   报告。子报告非常多   用于构建报告。

     

添加子报告查找子总计   和每个子报告的总数   主要报告

     

主要报告

     

子报告1

     

小计:总和(LabTotal)

     

分报告2

     

小计:总和(ItemTotal)

     总计

     

子报告是非常有用的选项   水晶报告。假设我们想要   发现

     

添加Crystal报告

     
      
  1. 添加新项目 - > Crystal报告
  2.   
  3. 如果我们要创建Crystal Report我们自己的格式,请选择“作为空白   报告“来自水晶报告库
  4.   
  5. 右键单击“数据库”字段中的“数据库字段”   然后从数据库中选择表   制作链接(如有必要)
  6.   
  7. 右键单击“详细信息部分”并添加子报告。
  8.   
  9. 重复我们在主报告中执行的相同操作并拖动   需要字段到详细信息部分   报告
  10.         

    对于Eg:我们正在创建劳工报告   总劳动率可以   按

    计算      

    在公式字段中 - 名称LabTotal

         

    WhilePrintingRecords;共享NumberVar   LabTotal:=总和   ({PC_LABOUR_DETAILS.Total})

         

    ({PC_LABOUR_DETAILS) - 表总计   ---字段

         

    并将LabTotal的总和添加到sub中   总场

         

    如果我们要添加另一个子报告   离开主页面,再次右键单击   在“详细信息部分”并添加新的   部分 - >细节(b)并重复步骤4   和5我们在这里添加第二个子   报告材料和小计   材料可以计算为

         

    在公式字段中 - 名称ItemTotal

         

    WhilePrintingRecords;共享NumberVar   ItemTotal:=总和   {PC_MATERIAL_DETAILS.Total})

         

    ({PC_MATERIAL_DETAILS) - 表总计    - 字段

         

    并将ItemTotal的总和添加到sub中   总场

         

    主要报告

         

    找到两个子的总计   报告

         

    在公式字段名称-GrandTotal

    中      

    WhilePrintingRecords;共享NumberVar   ItemTotal;共享NumberVar LabTotal;   NumberVar TotalAmount; TotalAmount:=   ItemTotal + LabTotal;总金额