我有一个报告,我正在尝试修改以删除记录选择,以便报告显示日期范围内的所有事件,但在数组中应用相同的过滤器,以便它只计算具有过滤器的事件我正在删除记录选择。
因此,在记录选择中我有以下内容:
and {OBI_EquipmentMaster.EquipmentType}=3
将报告限制为仅分配促销的驱动器(事件)。促销是设备类型= 3.
但是我想删除它并将此过滤器放在数组公式中,因此只有促销活动在交叉表中计算。
在我的数组构建器中,使用了以下公式:
whileprintingrecords;
stringvar d:= {OBI_EquipmentMaster.Description};
numbervar p:= {DriveProjectionAndCollectedTotals.ProcedureProjection};
numbervar pe:= {DriveProjectionAndCollectedTotals.ProceduresPerformed};
//numbervar et:= {OBI_EquipmentMaster.EquipmentType};
stringvar array ad;
numbervar array ap;
numbervar array ape;
numbervar c2:= 1;
numbervar n:=0;
// check to see if the description has been added to the string array
// if not, add it plus add the initial projection value to the number arrays
if not (d in ad) then
// tried to add filter for only certain equipment type - assigned to variable above
//if not (d in ad) and et=3 then
(
numbervar c:= c + 1;
redim preserve ad[c]; ad[c]:= d;
redim preserve ap[c]; ap[c]:= p;
redim preserve ape[c]; ape[c]:= pe;
)
else
// if the description is already in the array, find its position
// then add the new projection as a running total to the appropriate number array values
(
while c2 <= count(ad) do
(
if d = ad[c2] then (n := c2; exit while);
c2 := c2 + 1
);
ap[n]:= ap[n] + p;
ape[n]:= ape[n] + pe;
);
// grand running totals
numbervar gp:= gp + p;
numbervar gpe:= gpe + pe;
我对阵列的修改包括为设备类型添加另一个变量:
numbervar et:= {OBI_EquipmentMaster.EquipmentType};
在If语句中添加一行:
if not (d in ad) and *et=3* then
公式检查正常,但是当我尝试运行报告时,我收到一个错误,指出:
下标必须介于1和数组大小之间。
ap[n]:= *ap[n]* + p;
具体来说,ap [n]似乎不喜欢。
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:0)
我回去创建并分报告总结我需要的信息。对于子报告,我创建了以下链接:
OBI_EquipmentID
@StartDate
@EndDate
通过以下方式将它们联系起来:
{OBI_EquipmentMaster.EquipmentID} = {?Pm-OBI_EquipmentMaster.EquipmentID}
and {rpt_DriveMaster.FromDateTime} >= {?Pm-@StartDate}
and {rpt_DriveMaster.FromDateTime} <= {?Pm-@EndDate}
and {OBI_EquipmentMaster.EquipmentType}=3
我只想要用户在参数字段中选择的原始开始日期和结束日期之间发生的驱动器,然后只需要为其分配了促销(EquipmentType = 3)的驱动器。
现在我不确定为什么数据没有出现在子报告中,但是当我查看Crystal Reports生成的SQL查询时,我正在返回数据。