C# 在使用VS 2012保存Crystal Reports的自定义函数时,需要获取错误号消息

C# 在使用VS 2012保存Crystal Reports的自定义函数时,需要获取错误号消息,c#,visual-studio,visual-studio-2012,crystal-reports,C#,Visual Studio,Visual Studio 2012,Crystal Reports,我需要在Crystal Reports 2010版中创建一个自定义函数。 下面是代码。 在Visual Studio 2012中使用Field Explorer保存函数时,我不断收到一个错误“Number is required”。 它突出显示了这段代码:ret:=ret+fchar 你能告诉我我做错了什么吗。 我是否有任何语法问题可以纠正 我创建的自定义函数如下所示: 函数(StringVar rollNo、StringVar rollNoFormat) 当pos>0时 ( ret因为您在声明

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

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

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

函数(StringVar rollNo、StringVar rollNoFormat)

当pos>0时 (


ret

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

我把pos:=pos-1移到了ELSE后面的括号中,没有出现错误。所以要么是错误,要么是rollno或rollnoformat的值不是字符串。

@Chris:不起作用。我相信长度是NumberVar类型。你能想点别的吗。现在,我可能读错了,但当你声明fchar时,你是e使用MID,但从最后一个字母(pos:=长度(rollNoFormat))开始,然后询问最后一个字母?您可以更容易地使用正确的(rollNoFormat,1,1)。这样您就不需要pos和XPO,也许这会让它更简洁。我想澄清一下,我的意思是长度接受一个类型StringVar并返回一个NumberVar。例如:NumberVar variable=Len(StringVar)因此,我们不需要像你所说的那样进行任何转换。我希望你告诉我,如果我在上面的测试中的任何构造/语法是错误的。例如,如果还有其他偏执等,或者你认为可能是错误的。我感谢你提前帮我。请让我知道。
    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);
)
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;
));