【问题标题】:Crystal reports select critera with comma delimited水晶报表选择用逗号分隔的标准
【发布时间】:2018-03-09 22:42:28
【问题描述】:

我有一份水晶报表需要更改选择条件。目前标准将数据库字段与我在报告中创建的参数进行比较。

{MaterialCR.MaterialId} = {?MaterialId}

我现在有一个包含逗号分隔数据的字段,我需要确保该参数包含新字段中的任何其他 ID。

Materialused 中有这些数据。 "MA0161 ,MA0167"(无双引号)。这不起作用

{MaterialCR. MaterialUsed} = {?MaterialId}

我试图创建一个函数来比较两者,但它似乎不起作用。它不会将参数视为字符串数组。

我的材质匹配功能不起作用

Function MaterialMatch (MaterialUsed as string,v1 ()  As String)
    dim MyArray() as string
   MyArray = Split (MaterialUsed,"," )

    dim Match as boolean
    Match = false
    dim x as number
    For x = 1 To count(v1) Step 1 
        IF "ALL" in v1 then
            Match = true
            x = count(MyArray)
        end if   
        if MyArray(x) in v1 then
            Match = true
            x = count(MyArray)
        end if   
     Next x

    MaterialMatch = Match
End Function

这就是我正在查看的数据的样子。我们有许多带有材质 ID 的材质。我们还需要选择相关的时间。它没有材料 ID,因为它是多对一的情况。我需要检索与材料相关的所有记录,包括时间。获取带有 ID 的材料不是问题。我还需要获取时间记录。我修改了此报告使用的视图,以包含与时间重叠的材料。这就是我卡住的地方。

这就是我选择的专家公式现在的样子。我知道用料部分不对。

(
{JobTimeMaterialCR.MaterialId} = {?MaterialId} 
or 
(
    {JobTimeMaterialCR.Type} = "Time"   
    and 
    {JobTimeMaterialCR.MaterialUsed} = {?MaterialId} 

))

【问题讨论】:

  • 您真的需要逗号分隔的数据吗?为什么不将参数字段设置为允许多个值?然后就可以使用IN-operator...
  • 我添加了更多关于为什么我使用逗号分隔数据的信息。
  • 只是为了确保我的逻辑正确......你有一个字符串 X 和一个字符串 Y 中的潜在数组,其中包含未知数量的元素,用逗号分隔。您想根据是否在 X 中找到潜在数组 Y 的任何一个元素来选择记录?
  • 这听起来对我来说是正确的。

标签: crystal-reports


【解决方案1】:

我能够使用我在评论中描述的逻辑编写一个适合我的公式。将此公式用作您的记录选择公式。在公式工作室中,可以在选择公式 > 记录选择中找到这些。

Local StringVar array values := Split({?Search Values},",");
Local NumberVar indexCount := Count(values);
Local BooleanVar found := false;
Local NumberVar counter;

For counter := 1 to indexCount Step 1 Do
(
    If InStr({ARINVT.DESCRIP}, values[counter]) > 0 Then
        found := true
);
found;

这很艰难,但是一个好的开始。搜索区分大小写,因此如果您想要不区分大小写的搜索,您可能需要使用一些 Lower() 函数对其进行调整。此外,如果分隔符和 CSV 字符串中的搜索字符串之间存在空格,则该空格将包含在搜索中。 Replace() 函数可以帮助您解决此问题,但这会阻止您在搜索字符串中使用空格。如果您需要在搜索中使用空格,那么在构建 CSV 字符串时请注意逗号之前或之后没有空格,即您的分隔符。

如果您在理解我的公式的语法方面需要任何帮助,请随时发表评论,我会回答任何问题。

我使用了一个名为{?Search Values} 的参数字段来模拟CSV 字符串数据。 {ARINVT.DESCRIP} 是我的测试数据库中的一个字段名称,我曾经在数千条记录中搜索我在参数字段中键入的关键词。您将希望将公式中的这些字段名称替换为您的字段名称,并且您应该能够轻松完成这项工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    相关资源
    最近更新 更多