Crystal Report循环取值问题:匹配WOS与RS表返回上一步工序号
Crystal Reports 上一步工序匹配实现方案
原代码错误原因
- 没有定义变量存储循环中递减的工序号,每次减1操作没有被持久化保存,循环永远基于原始Step Number执行,永远无法得到正确匹配结果
- 没有将RS表的同工单所有Step Number转换为可匹配的集合,直接单值判断只会匹配当前行对应的RS工序,不会遍历当前工单的所有RS有效工序
正确实现公式
// 1. 初始化变量:存储当前待匹配的工单工序号 NumberVar currentStep := ToNumber({WO3_WorkOrderOperationDetail.StepNumber}); // 2. 读取当前工单对应的所有RS工艺路线有效工序号集合 NumberVar Array validRouteSteps := Array(ToNumber({WO_97_UDF_WORoutingLines.StepNumber})); // 3. 循环递减直到匹配到RS中存在的工序,添加currentStep>0避免无匹配时死循环 Do ( currentStep := currentStep - 1 ) While Not( currentStep In validRouteSteps And currentStep > 0 ); // 4. 返回最终匹配结果 currentStep
配置注意事项
- 必须先保证WOS工单工序表和RS工艺路线表已经通过工单唯一ID建立正确的表关联,公式才能读取到当前工单对应的所有RS工序集合,不会跨工单匹配
- 无匹配场景下公式默认返回0,可根据业务需求修改边界判断逻辑,例如把返回值调整为Null、-1或其他自定义标识
- 如果公式运行时提示数组错误,可将公式放置在「工单分组」的上下文内执行,避免读取全表RS工序号
内容的提问来源于stack exchange,提问作者pestomania
相关产品推荐
相关产品推荐

