Crystal 报告 select 以逗号分隔的标准

Crystal reports select critera with comma delimited

我有一份 crystal 报告,我需要更改 select 标准。当前标准将数据库字段与我在报告中创建的参数进行比较。

{MaterialCR.MaterialId} = {?MaterialId}

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

Materialused 中包含此数据。 "MA0161 ,MA0167"(无双引号)。这行不通

{MaterialCR. MaterialUsed} = {?MaterialId}

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

我的 material 匹配功能不起作用

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

这就是我正在查看的数据的样子。我们有很多 material 里面有一个 Material ID。我们也有相关的时间需要 select。它没有 material id,因为它是多对一的情况。我需要检索与 material 相关的所有记录,包括时间。使用 id 获取 material 不是问题。我还需要获取时间记录。我修改了此报告使用的视图以包含与时间重叠的 material。这就是我被困的地方。

这就是我的 select 专家公式现在的样子。我知道 material 使用的部分是错误的。

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

))

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

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 字符串中的 delim 字符和搜索字符串之间存在 space,则 space 将包含在搜索中。 Replace() 函数可以帮助您解决这个问题,但这会阻止您在搜索字符串中使用 spaces。如果您需要在搜索中使用 spaces,那么在构建您的 CSV 字符串时请注意在作为分隔字符的逗号前后没有 spaces。

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

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