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
字段。
重要提示:
您不应为此使用重复字段。我建议您尽快重写您的解决方案并修复此处发现的缺陷,即:
- 将您的字段重命名为有效(且合理*)的名称;
- 将重复字段转换为相关 table;
中的记录
- 在计算中使用查找而不是硬编码数据。
(*) 例如不是以“:”结尾的名字:
与其将您的计算放在函数中,不如尝试创建一个新的计算字段并将您的计算放在那里。提交记录后,您将看到此计算字段的值发生变化,并且您将知道您的函数是否正常工作。
为此
- 转到文件->管理->数据库
- 输入新字段名称和 select "calculation" 作为类型,然后按创建。
- 输入您的计算结果,例如
if(Companies::select_company = "Comp4"; Companies::Cost * 1.5; Companies::Cost * 2)
当您在输入计算后尝试按确定时,计算引擎会告诉您错误是什么。
如果它从未检测到 "Comp4" 条件,那么您的字符串比较中存在错误,可能是尾随 space 或大写字符或类似字符。
我相当确定已经回答了类似的问题,但我现在正为此而掉头发。我正在使用 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
字段。
重要提示:
您不应为此使用重复字段。我建议您尽快重写您的解决方案并修复此处发现的缺陷,即:
- 将您的字段重命名为有效(且合理*)的名称;
- 将重复字段转换为相关 table; 中的记录
- 在计算中使用查找而不是硬编码数据。
(*) 例如不是以“:”结尾的名字:
与其将您的计算放在函数中,不如尝试创建一个新的计算字段并将您的计算放在那里。提交记录后,您将看到此计算字段的值发生变化,并且您将知道您的函数是否正常工作。 为此
- 转到文件->管理->数据库
- 输入新字段名称和 select "calculation" 作为类型,然后按创建。
- 输入您的计算结果,例如
if(Companies::select_company = "Comp4"; Companies::Cost * 1.5; Companies::Cost * 2)
当您在输入计算后尝试按确定时,计算引擎会告诉您错误是什么。 如果它从未检测到 "Comp4" 条件,那么您的字符串比较中存在错误,可能是尾随 space 或大写字符或类似字符。