水晶报告中的DSUM功能?

时间:2017-09-26 20:50:04

标签: crystal-reports

我正在尝试将旧的Microsoft Access报表转换为Crystal报表。除了这个最后的小细节之外,我的一切都很完美。 Access报告在if语句中为报告中的一个字段使用DSUM函数。

经过多次搜索,我确定CR没有类似的东西。

这基本上就是我正在处理的事情。

我有一份提案报告。在报告的详细信息中,我打印了数量,描述和几个价格字段。

数据看起来像这样:

Proposalnum Partitem RolltoItem Unitprice

18611 ............. 1 .......... NULL ........ 0.00

18611 ............. 2 ......... NULL ....... 17225.92

18611 ............ 3 ............ 2 ............ 156.90

18611 ............ 4 ............. 2 ............ 482.05

我需要做的是当我打印特定部件时,我需要查询其余记录,以找到rolltoitem字段中具有匹配编号的部件,并将unitprice添加到我正在打印的部件中

所以在这个例子中,当我打印partitem#2时,我需要将第3部分和第4部分的156.90和482.05添加到17225.92,所以我打印的总数为17864.87。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

据我所知,没有这样的功能。

但我会尝试这个。

一般的想法是:按ProposalNum对数据进行分组,并使用子报告选择“子行”并将“子项价格”相加。

详细说明:

  1. 按PartItem创建一个空组部分。
  2. 如果您只想显示RoolToItem为null的项目,请对此案例使用抑制函数。
  3. 在详细信息部分中,放置子报表。子报表的数据源与主报表相同。
  4. 更改子报表链接以根据字段选择子报表中的数据:主报表中的PartItem =子报表中的RolltoItem。
  5. 将其他字段传递给子报表而不选择数据:ProposalNum,PartItem,UnitPrice。我认为你需要在子报告之前创建参数 - 例如:ParentProposalNum,ParentPartItem,ParentUnitPrice。
  6. 创建一个新公式:ParentUnitPrice + Sum({YourDataSource.UnitPrice})
  7. 将公式放在子报表页脚中与其他字段一起使用。也许:ParentProposalNum,ParentPartItem,formula。
  8. 这是一个理论上的解决方案。我希望它能指出正确的方向。

答案 1 :(得分:0)

如果您尝试将Rolltoitem中具有相同值的所有项目的Unitprice列相加,则可以使用SQL Expression Field执行此操作。代码看起来像这样。我的Where子句可能需要调整,因为我不确定你的数据库结构是什么样的。

(
Select Sum("YourDataBaseTableName"."Unitprice")
From YourDataBaseTableName
Where "YourDataBaseTableName"."Rolltoitem" = *currentRolltoitemValue*
)

根据您使用的数据库类型,SQL表达式字段的语法也可能不同。我提供的语法非常通用,但应该适用于SQL Server。

编辑:添加示例并说明其工作原理。

这是我在水晶报表中的一个SQL表达字段,它打印出已装运货物的提单。

(   
Select  Sum("SHIPMENTS"."PALLET_COUNT")
From    SHIPMENTS
Where   "SHIPMENTS"."BOL_ID" = "BOL"."ID"
)

在我的数据库中,BOL表是起点。单个BOL可以包含一个或多个装运,并且单个装运可以包含一个或多个产品。 顶级分组在BOL.ID上。 PALLET_COUNT只能在每个货单上找到一次。我还对详细信息部分中的数据进行了排序要求,导致我无法使用“运行总计字段”。

这允许包含2个装运的BOL包含总共3个产品,如下所示:

BOL.ID    SHIPMENTS.ID    SHIPMENTS.BOL_ID    PALLET_COUNT    PRODUCT.ID
1         10              1                   2               XXX
1         9               1                   1               YYY
1         10              1                   2               ZZZ

此BOL的正确PALLET_COUNT应为3,因为PRODUCTS XXX和ZZZ属于同一个SHIPMENTS,而PALLET_COUNT由于与产品的关系而重复。