多级报告的递归算法

时间:2019-01-16 19:48:24

标签: algorithm recursion reporting-services x++

我目前正在开发一个多层次的SSRS报告,并且正在努力使用该算法。我已经开发了一个如下所示的递归类,但是级别数字不正确。我希望父记录(由a,b和c表示)显示子记录,以便子记录的级别=(parentRecLevel + 1)。现在,级别值仅增加1。有人有什么建议吗?

protected BOMLevel getBomLevelItem(str itemId, int numLevel, boolean firstRec)
    while select tmpBOM
    {
        bomLevel = this.getBomLevelItem(bomLevel.ItemId, bomLevel.Level, false);
    }

当前结果(其中 b1 c1 c2 b c的子级):

1    a
2    b
2    b1
3    c
4    c1
5    c2

想要的结果:

1    a
2    b
3    b1
2    c
3    c1
3    c2

1 个答案:

答案 0 :(得分:1)

TLDR :不要重新发明轮子,使用现有的算法和框架。

我假设您的问题不是针对训练,而是一个现实世界的问题。如果这是一种练习,请尝试在大型社区中使用您选择的易于使用的语言很好地掌握递归,然后再回到x ++。

您的递归方法看起来不完整,因为在每次递归中,您都要遍历tmpBom的所有记录,除非您在其他地方修改了该表中的记录,否则这些遍历是没有意义的,并且永远不会终止。我也看不到这种方法如何产生您描述的结果。我建议您看一些递归算法培训资料,以了解递归的基本部分。

您标记了问题,语法也非常类似。不幸的是,您没有添加有关您正在使用的版本的信息,但我将假设是当前使用的最常见版本。

在此版本中,已经有现成的SSRS报告,该报告将向您显示物料清单的结构。您可以通过库存管理>报告>物料清单>行调用报告。修改此报告应该相当容易,以便在报告尚未满足您的要求时也可以显示级别。

如果仍然需要实现自己的解决方案,请查看类BOMSearch及其子级。它用于多个位置(请检查交叉引用),还可以用于扩展/分解物料清单。

还要注意,那里有很多文章试图解释如何用x ++代码扩展或爆炸材料清单,但是对于Internet上的所有事物,请当心:大多数它们是不完整的或简单的错误的。