0

Crystal Reports バージョン 2010 でカスタム関数を作成する必要があります。
以下はコードです。
Visual Studio 2012 でフィールド エクスプローラーを使用して関数を保存すると、「番号が必要です」というエラーが表示され続けます。
コードの次の部分が強調表示されます。

私が間違っていることを教えてください。
修正できる構文の問題はありますか?

私が作成したカスタム関数を以下に示します。

関数 (StringVar rollNo、StringVar rollNoFormat)

Local NumberVAR  pos := Length(rollNoFormat);
Local NumberVAR xpos := Length(rollNo);
Local StringVAR ret := "";
 Local StringVAR fchar := "";

一方、pos > 0 Do (

    fchar := Mid(rollNoFormat, pos, 1);
    If (fchar = "X") 
    Then
    (
        ret := ret + Mid(rollNo, xpos, 1);
        xpos := xpos - 1;       
    )
    Else
    (
        ret := ret + fchar;
    )

    pos := pos - 1;
);

If (Length(rollNoFormat) = 0 )
Then
( 
   ret := rollNo;
) 
Else
( 
 ret := StrReverse(ret);
)

戻る

4

1 に答える 1

0

fchar を宣言するときに、数値 (pos) を文字列に追加しようとしているためです。pos を文字列に変換してみてください:Local NumberVAR pos := Val(Length(rollNoFormat));またはその効果に何か。基本的には文字列と数値を混在させているので、どちらかを変換して一致させます。

それが役立つことを願って、

クリス

編集:

2 つの文字列フィールドを使用して式を再現しようとしました。括弧に関係するあなたとは別のエラーが発生しました。これは、rollno および rollnoFormat の代用品を使用して私のために働いたコードです。

Local NumberVAR  pos := Length(immaster.prodclass);
Local NumberVAR xpos := Length(immaster.itemtype);
Local StringVAR ret := "";
Local StringVAR fchar := "";
While pos > 0 Do (

fchar := Mid(rollNoFormat, pos, 1);
If (fchar = "X") 
Then
(
ret := ret + Mid(rollNo, xpos, 1);
xpos := xpos - 1;       
)
Else
(
ret := ret + fchar;    
pos := pos - 1;
));

ELSE の後に pos := pos - 1 を括弧内に移動しましたが、エラーは発生しませんでした。したがって、それがエラーであるか、rollno または rollnoformat のいずれかの値が文字列ではありません。

于 2013-10-21T23:18:15.927 に答える