如何在Crystal报表中的所有明细行之间级联计算变量?

2020-09-03 20:20发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我当前正在使用CR v 14.2.5.2618,并且正在处理一个报表,该报表显示实时DB表,该表按机器保存生产计划信息。 因此,计划表中填充了一些历史生产订单,当前正在运行的生产订单以及承诺全天运行的订单。

我想做的是估计每个订单的完成时间,以便专门提取一个人可能预测的将在单个生产班次中完成的订单。 如果订单已开始或完成,则DB表仅保存生产开始时间和生产完成时间。 通常,我将至少有一个开始时间可以使用(如果需要创建一个起点,可以轻松地将默认值指定为(现在)。

除了生产开始时间外,我还有一个计算得出的"订单完成时间",该时间是对订单运行需要多长时间的计算-因此我可以不计入第一个订单的预计完成时间 问题。

所以这是我的字段(在打印记录内容时,我是新手,所以下面可能不需要时,我可能会这样做):

@总订单时间(完成订单的时间)= cstr(int({@ Tot Ord Time}/60),0)&":"&right(" 0"&cstr( {@Tot Ord Time} mod 60,0),2)-我这样做是为了使时间变成易于阅读的格式,例如10:0的10分钟,2:30的2小时30分钟,等等。

Operation.SetupStartDateTime -(又名订单开始生产时),默认格式为8/16/2019 2:49:37 AM

Operation.RunStopDateTime -(又名订单完成时),默认格式为8/16/2019 2:49:37 AM

VarPreviousOpStop -在此获取上一个操作的停止时间:

同时打印记录; 共享DateTimevar VarPrePreviousOpStop;

VarPreviousOpStop:=上一个({Operation.RunStopDateTime});

@ProjRunStop ,我在其中执行以下计算

打印记录;

IF为非({Operation.SetupStartDateTime}),然后dateadd(" n",{@ Tot Order Time},{@ VarPreviousOpStop})否则dateadd(" n",{@ Tot Ord Time},{Operation.SetupStartDateTime} )

但是对我而言,@ ProjRunStop仅在记录停止包含SetupStartDateTime之前起作用。 因此,我需要知道如何在其余的详细信息行中向下传递该信息。

数据示例(为空表示db表尚无该字段的数据):

总订单时间:SetupStart:RunStop:ProjRunStop:Order

1:01 1:00 am 4:00 am 2:01 am 1

1:43 4:00 am(空)5:43 am 2

1:37(空)(空)(空)3

我正在尝试为列表中的所有订单填写ProjRunStop,以便我可以在轮班结束时创建截止时间,即下午2:30。

任何帮助将不胜感激。

谢谢!

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


我当前正在使用CR v 14.2.5.2618,并且正在处理一个报表,该报表显示实时DB表,该表按机器保存生产计划信息。 因此,计划表中填充了一些历史生产订单,当前正在运行的生产订单以及承诺全天运行的订单。

我想做的是估计每个订单的完成时间,以便专门提取一个人可能预测的将在单个生产班次中完成的订单。 如果订单已开始或完成,则DB表仅保存生产开始时间和生产完成时间。 通常,我将至少有一个开始时间可以使用(如果需要创建一个起点,可以轻松地将默认值指定为(现在)。

除了生产开始时间外,我还有一个计算得出的"订单完成时间",该时间是对订单运行需要多长时间的计算-因此我可以不计入第一个订单的预计完成时间 问题。

所以这是我的字段(在打印记录内容时,我是新手,所以下面可能不需要时,我可能会这样做):

@总订单时间(完成订单的时间)= cstr(int({@ Tot Ord Time}/60),0)&":"&right(" 0"&cstr( {@Tot Ord Time} mod 60,0),2)-我这样做是为了使时间变成易于阅读的格式,例如10:0的10分钟,2:30的2小时30分钟,等等。

Operation.SetupStartDateTime -(又名订单开始生产时),默认格式为8/16/2019 2:49:37 AM

Operation.RunStopDateTime -(又名订单完成时),默认格式为8/16/2019 2:49:37 AM

VarPreviousOpStop -在此获取上一个操作的停止时间:

同时打印记录; 共享DateTimevar VarPrePreviousOpStop;

VarPreviousOpStop:=上一个({Operation.RunStopDateTime});

@ProjRunStop ,我在其中执行以下计算

打印记录;

IF为非({Operation.SetupStartDateTime}),然后dateadd(" n",{@ Tot Order Time},{@ VarPreviousOpStop})否则dateadd(" n",{@ Tot Ord Time},{Operation.SetupStartDateTime} )

但是对我而言,@ ProjRunStop仅在记录停止包含SetupStartDateTime之前起作用。 因此,我需要知道如何在其余的详细信息行中向下传递该信息。

数据示例(为空表示db表尚无该字段的数据):

总订单时间:SetupStart:RunStop:ProjRunStop:Order

1:01 1:00 am 4:00 am 2:01 am 1

1:43 4:00 am(空)5:43 am 2

1:37(空)(空)(空)3

我正在尝试为列表中的所有订单填写ProjRunStop,以便我可以在轮班结束时创建截止时间,即下午2:30。

任何帮助将不胜感激。

谢谢!

付费偷看设置
发送
2条回答
xfwsx85
1楼-- · 2020-09-03 20:43

我可能会根据先前的停止时间创建一个预计的SetupStart时间。 可能看起来像这样:

如果不是OnFirstRecord,那么
   (如果IsNull(({{Operation.SetupStartDateTime})
     以前的(@ProjRunStop)
   其他
     ({Operation.SetupStartDateTime}))
 其他
  //如果第一条记录没有设置开始日期,则要使用什么

,这会将开始时间设置为上一次运行的结束时间。 如果在项目运行之间存在停机时间,则还可以为该值添加几分钟。

然后使用此公式代替@ProjRunStop公式中的字段。 您可能需要进行一些调整,并在@ProjRunStop中设置一个变量,然后在此新公式中使用它,因为我不确定crystal是否可以让您在两个公式相互引用的地方进行循环引用。

-戴尔

亦是此间程序员
2楼-- · 2020-09-03 20:36

感谢戴尔-效果很好。

一周热门 更多>