0

我需要在 Crystal Reports 2010 版中创建一个自定义函数。
下面是代码。
当我在 Visual Studio 2012 中使用字段资源管理器保存函数时,我不断收到错误“需要数字”。
它突出显示了这段代码:ret := ret + fchar;

你能告诉我我做错了什么吗?
我有任何可以纠正的语法问题吗?

我创建的自定义函数如下所示:

函数 (StringVar rollNo, StringVar rollNoFormat)

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

而 pos > 0 做 (

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

ret

4

1 回答 1

0

因为您在声明 fchar 时试图将数字 (pos) 添加到字符串中。尝试将 pos 转换为 string: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 回答