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

时间:2015-11-04 11:24:44

标签: field filemaker dynamically-generated dropdown

我很确定这样的东西已经得到了解答,但此刻我正在失去我的头发。我正在使用Filemaker Pro 13

我已经获得了更新一些模板的工作,我以前做过这个,但我所做的只是更新视觉方面的事情。现在,我希望动态更新一些标签和计算,具体取决于所选的公司(下拉所有文本的自定义值)。

目前所有费用都乘以2.因此,如果原始费用= 4美元,则客户费用为8美元。但是,如果选择“公司4”而不是乘以2,则需要乘以1.5。

我目前有两个函数,我试图在字段框中使用此功能。

第一个功能:

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

第二功能:

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

这不起作用,因此回答了这个问题。据我所知,如果陈述起作用(Condintion;如果是,则做X;否则做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)

销售代表|经销商:是'公司'

3 个答案:

答案 0 :(得分:0)

IF语句完全按照您的描述工作,我不明白为什么您需要两个不同的功能。我不明白你的语法 - $ {$ Cost}。你想加入" $"到你的输出?

让我们说你有一个可供选择的领域" slelect_company"在公司表/布局中,您将成本存储在名为$ cost

的变量中

您的计算将是:

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

如果将字段设置为输出结果,请使用格式添加$ sign

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

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

如果您有多个支票,您可以使用凯斯 - 类似于其他语言的切换

答案 1 :(得分:0)

很难说出您的语法有什么问题,因为我们不知道您的字段的确切名称。此外,"这不起作用"对问题不是很好的描述。

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

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

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

应该提供预期的结果。

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

正确地说,每家公司都应该在自己的记录中存储一个标记值,当您选择公司时,这将被查找到一个字段。或者,只有一些(首选)公司会有标记,而其他公司会使用存储在首选项表中的默认值。

此外,此表中的公司字段(发票?)应该是CompanyID,并且只存储所选公司的(无意义)ID。

加了:

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

假设以下字段:

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

x2$Charges的计算公式更改为=

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

不需要x2CheckSSL字段。

重要:

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

  1. 将您的字段重命名为有效(和合理的*)名称;
  2. 将重复字段转换为相关表格中的记录;
  3. 在计算中使用查找而不是硬编码数据。
  4. (*)例如不是以"结尾的名称:"

答案 2 :(得分:0)

不是将计算放在函数中,而是尝试创建一个新的计算字段并将计算放在那里。提交记录后,您将看到此计算字段的值发生变化,您将知道您的功能是否正常工作。 要做到这一点

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

计算引擎会告诉您在输入计算后尝试按下时错误是什么。 如果它从未检测到条件" Comp4"然后你的字符串比较中出现错误,可能是尾随空格,或者是大写字符或类似字符。