0

我的要求是生成多个员工的员工详细信息报告。查询的参数将是员工编号和日期范围。

这是我正在使用的记录选择公式

{EMP_LEAVE_REPORT_VIEW.LEAVE_START_DATE} in {?sDate} to {?eDate}

and
(
Stringvar Array strings := Split({?empNoList}, "_");

Numbervar Array numbers;
Redim numbers[Ubound(strings)];

Numbervar i;
for i := 1 to Ubound(strings) do (
numbers[i] := ToNumber(strings[i]);

if {EMP_LEAVE_REPORT_VIEW.EMP_NO} = numbers[i] then 
(true;)
else 
(false;)

);
)

首先,我正在检查日期。然后我将员工列表作为一个字符串 {?empNoList} 例如:5162_5468_5896_5236 我使用“_”作为分隔符将其拆分为单独的字符串,并将这些值再次分配到一个数字数组中并使用该值进行过滤员工。

但是这个公式不起作用。它给出了所有员工的详细信息。这是我转换字符串数组的方式的问题,还是我的代码的 for 循环有问题?

我使用此代码并尝试将一个员工编号分配给 {?empNoList} 并且它有效。

if (ToNumber({?empNoList}) = {EMP_LEAVE_REPORT_VIEW.EMP_NO}) then true else false

请帮我解决这个问题。在此先感谢!

4

2 回答 2

1

我找到了解决方案!

Stringvar Array strings := Split({?empNoList}, "_"); //Spliting and saving the string in a string array
Numbervar Array numbers;        //Creating a number array
Redim numbers[Ubound(strings)]; //Declaring number array size
Numbervar i;                       

//For loop to traverse through string and convert each into numbers and saving them in the numbers array
for i := 1 to Ubound(strings) do (      
    numbers[i] := ToNumber(strings[i]);
);

if({EMP_LEAVE_REPORT_VIEW.EMP_NO} in numbers)  //If condition to check whether Employee number is in the numbers array
then
(true;)
else (false;)

这是一个简单的开箱即用的想法;)

于 2012-11-19T12:34:27.520 回答
0

1) 将您的 EMP_LEAVE_REPORT_VIEW.EMP_NO 转换为字符串。2) 然后将 Like 或 In 运算符与 {EMP_LEAVE_REPORT_VIEW.EMP_NO} 和 {?empNoList} 一起使用

只需在较大的字符串 {?empNoList} 中搜索字符串版本 EMP_LEAVE_REPORT_VIEW.EMP_NO。您可以避免使用数组。

于 2012-11-19T07:06:35.613 回答