Crystal Report行号公式失效:所有行重复显示001
Crystal Report行号公式修复指南
问题根源
你写的公式里,NumberVar rowNum是局部变量,每次计算这个公式时变量都会被重新初始化,导致每次执行都是先重置为0再加1,最终所有行都显示001。另外必须保证报表已经按{Invoice Number Field}正确排序,否则Previous()的判断逻辑会失效。
修复方案
方案一:改用共享变量
把局部变量改成共享变量,让变量值在报表全程保持,不会每次计算都重置:
Shared NumberVar rowNum; If OnFirstRecord or {Invoice Number Field} <> Previous({Invoice Number Field}) then rowNum := 0; rowNum := rowNum + 1; Right('000' + toText(rowNum, 0, ''), 3)
方案二:分组场景下的更优写法(如果已按发票号分组)
如果报表已经按{Invoice Number Field}创建了分组,用组头初始化变量更稳妥:
- 在发票号分组的组头区域添加一个公式,内容为:
Shared NumberVar rowNum := 0;
- 把原来的行号公式改成:
Shared NumberVar rowNum; rowNum := rowNum + 1; Right('000' + toText(rowNum, 0, ''), 3)
必要前提:确保报表按发票号排序
打开「排序专家」,添加{Invoice Number Field}作为排序字段,选升序或降序都行——只有排序正确,Previous()才能准确识别当前行是否属于新的发票组。
验证
预览报表,检查每个发票号下的行号是否从001开始递增,切换到新发票号时行号重新从001计数。
内容的提问来源于stack exchange,提问作者Tichaona Jermaine Gaza
相关产品推荐
相关产品推荐

