Filemaker 如果下拉列表包含文本更改计算

Filemaker if dropdown contains text alter calculation

我相当确定已经回答了类似的问题,但我现在正为此而掉头发。我正在使用 Filemaker Pro 13

我已经完成了更新一些模板的工作,我以前做过这个,但我所做的只是更新事物的视觉方面。现在我想根据“选择的公司”动态更新一些标签和计算(下拉自定义值都是文本)。

目前所有成本都乘以 2。因此,如果原始成本 = 4 美元,则客户成本为 8 美元。但是,如果选择 'Company 4' 而不是乘以 2,则需要乘以 1.5。

我目前有两个功能,我正在尝试在字段框上使用此功能。

第一个函数:

If (Company: = "Comp4"; 1;0)

第二个函数:

If (${Function1}; ${$Cost}*1.5; ${$Cost}*2 )

这行不通,因此回答了这个问题。据我所知,if statements work as (Condition; If true do X; Else do Y;).这可能是问题所在?我确实有编程背景,但现在这个程序让我难以置信。

如果之前有人回答过这个问题,那么我向您致以最诚挚的歉意。

感谢您为我指明正确方向的任何答案或帮助。

编辑:刚试过这个:

If (ValueCount(FilterValues(Company;"Comp4"));${$Cost}*1.5; ${$Cost}*2)

这没有用。理想情况下,如果我可以将其放入一个很棒的函数中,但到目前为止我仍然失败。

编辑 2:

关于功能/功能不工作。我通常只会得到 ${$Cost}*2 方面的事情会发生,但是 ${$Cost}*1.5 即使选择了 "Comp4" 也不会。这让我觉得要么是系统没有检测到 "Comp4" 被选中,要么我需要到别处寻找我需要查看的值。

编辑 3:使用的实际值和计算

可以这么说,目前正在使用和工作(只是做 *2 方面的事情) 字段名称:x2$Charges 计算:${$Charges}*2. - $Charges is the 'cost' fields (10 of them).

我想做的是选择特定公司时而不是做成本*2我想做成本*1.5。

上述公司的支票是:

字段名称:x2CheckSSL 计算:If(Sales Rep.|Distributor: = "SSL";1.5;2)

其中销售代表|分销商:是 'Company'

IF 语句与您描述的完全一样,我不明白您为什么需要两个不同的函数。我不明白你的语法 - ${$Cost}。您要在输出中添加“$”吗?

假设您在公司 table/layout 中有一个供选择的字段 "slelect_company" 并且您将成本存储在名为 $cost

的变量中

您的计算将是:

If (Companies::slelect_company = "Comp4"; $Cost*1.5; $Cost*2 )

如果设置字段输出结果,使用格式加$符号

如果您在布局上设置标签以显示输出,请使用:

If (Companies::slelect_company = "Comp4"; "$" & $Cost*1.5; "$" & $Cost*2 )

如果您有不止一项检查,您可以使用 Case - 类似于其他语言中的 switch

很难判断您的语法有什么问题,因为我们不知道您的字段的确切名称。此外,"this does not work" 不是对问题的良好描述。

您拥有 ${$Cost} 这样的构造这一事实表明您的字段名称无效。

如果您有名为 Company 和 Cost 的字段,则计算字段(在与这两个字段相同的 table 中定义)=

If ( Company = "Comp4" ; 1.5 ; 2 ) * Cost

应该提供预期的结果。


在更一般的层面上,这不是一个好的方法。所有这些因素 {"Comp4", 1.5, 2} 都是 数据 ,不应硬编码到计算公式中。

正确地说,每个公司都应该在自己的记录中存储一个加价值,当您 select 一家公司时,会在一个字段中查找该值。或者,只有一些(首选)公司会有标记,而其他公司会使用存储在首选项 table.

中的默认值

此外,此 table(发票?)中的公司字段实际上应该是 CompanyID,并且仅存储 selected 公司的(无意义的)ID。


已添加:

根据评论中的说明,这是如何快速解决当前问题的建议。

假定以下字段:

$Charges - 数字[10]
Sales Rep.|Distributor: - 文字
x2$Charges - 计算[10] = [见下面的公式]

x2$Charges的计算公式改为=

If ( Extend (Sales Rep.|Distributor: ) = "SSL" ; 1.5 ; 2 ) * ${$Charges}

不需要 x2CheckSSL 字段。

重要提示:

您不应为此使用重复字段。我建议您尽快重写您的解决方案并修复此处发现的缺陷,即:

  1. 将您的字段重命名为有效(且合理*)的名称;
  2. 将重复字段转换为相关 table;
  3. 中的记录
  4. 在计算中使用查找而不是硬编码数据。

(*) 例如不是以“:”结尾的名字:

与其将您的计算放在函数中,不如尝试创建一个新的计算字段并将您的计算放在那里。提交记录后,您将看到此计算字段的值发生变化,并且您将知道您的函数是否正常工作。 为此

  • 转到文件->管理->数据库
  • 输入新字段名称和 select "calculation" 作为类型,然后按创建。
  • 输入您的计算结果,例如if(Companies::select_company = "Comp4"; Companies::Cost * 1.5; Companies::Cost * 2)

当您在输入计算后尝试按确定时,计算引擎会告诉您错误是什么。 如果它从未检测到 "Comp4" 条件,那么您的字符串比较中存在错误,可能是尾随 space 或大写字符或类似字符。