我的要求是生成多名员工的员工详细信息报告。查询的参数将是员工编号和日期范围。
这是我正在使用的记录选择公式
{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
请帮我解决这个问题。谢谢!
答案 0 :(得分: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;)
这是一个开箱即用的简单思考;)
答案 1 :(得分:0)
1)将您的EMP_LEAVE_REPORT_VIEW.EMP_NO转换为字符串。 2)然后使用带有{EMP_LEAVE_REPORT_VIEW.EMP_NO}和{?empNoList}的Like或In运算符
只需在更大的字符串{?empNoList}中搜索字符串版本EMP_LEAVE_REPORT_VIEW.EMP_NO。您可以避免使用阵列。