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;)

);
)

まず、日付を確認しています。次に、従業員リストを1つの文字列{?empNoList}として取得します(例:5162_5468_5896_5236)。区切り文字として「_」を使用して文字列を分割し、それらの値を数値配列に再度割り当て、その値を使用してフィルタリングします。従業員。

しかし、この式は機能しません。すべての従業員の詳細がわかります。これは文字列配列を変換する方法の問題ですか、それともコードのforループに何か問題がありますか?

このコードを使用して、{?empNoList}に1人の従業員番号を割り当ててみましたが、うまくいきました。

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} と共に使用します。

単純に、文字列バージョン EMP_LEAVE_REPORT_VIEW.EMP_NO をより大きな文字列 {?empNoList} 内で検索します。配列の使用を避けることができます。

于 2012-11-19T07:06:35.613 に答える