|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622 。
您需要 登录 才可以下载或查看,没有帐号?注册
x
§1 基本意义
§2 示例一:外贸费用的计算
§3 示例一C语言代码设置
§4 示例二:采购付款金额的控制
§5 示例二结果
§1 基本意义
1) OA-ERP做为一个通用系统,因此不能在一些非常专们的需求方面走的太远,但是系统支持的C语言,可能帮助用户完成几乎是任何可能的需求。
2)C语言接口函数的说明,请见“高级设置”模块“USER函数”。
§2示例一:外贸费用的计算
1) 一个外贸用户,在销售报价、销售订单中,都因为存在费用,因此启用了费用方案、费用清单。
2) 这些费用中,一部分是固定的,例如手续费、标签费等。
3) 另外一部分费用,不是固定的,例如“单物品金额保值费”,它是根据物品清单的费用总和再乘以一个系数得到的;再如“关税”等,是其它费用的总和,再乘以一个系数得到的。
§3 C语言代码设置
1)我们先定义费用项目如下。
注意这这里的两个特殊项目的序号分别是20003、20004,他们要特别处理。
2)在销售报价单的中定义C语言程序:
这里只需要给第三行、第四行项目定义C语言程序。我们将数量固定为1,于是只需要给单价字段定义C语言程序就可以了,“询价单物品金额保值费”是统计物品清单的费用总和,因此可以使用代码:
代码片段一
Sum2AndSet("Price","Items","Summoney");
这里Sum2AndSet的作用是:计算清单Items的表达式"Summoney"的总和,然后赋值给"Price"字段。
第四行“费用汇总项关税”的意义是,计算其它行的总金额,乘以一个系数,例如0.5,因此定义C语言程序是
代码片段二
float D1=Sum2("Items3","Summoney");
float D2=newGet2("Summoney");
newSet2("Price",(D1-D2)*0.5);
这里解释一下,第1行的意思是,计算清单"Items3"的表达式"Summoney"的总和,第2行的意思是,获得本行"Summoney"的值。因为仅仅计算其它行的"Summoney"的值,所以他们的结果要相减(D1-D2)。第3行的意思是,计算结果(D1-D2)*0.5,赋值给字段"Price"。
现在的问题是,在第三行用代码片段一,第四行则用代码片段二,其它行不计算,那么如何处理呢?
我们使用newGet2("Type1")获取字段"Type1"的序号,我们记得,第三行“询价单物品金额保值费”的序号是20003,第四行“费用汇总项关税”的序号是20004,因此C语言程序就是如下形式
最后代码
if(newGet2("Type1")==20003)
{
Sum2AndSet("Price","Items","Summoney");
}
if(newGet2("Type1")==20004)
{
float D1=Sum2("Items3","Summoney");
float D2=newGet2("Summoney");
newSet2("Price",(D1-D2)*0.5);
}
3)一点优化。上面代码中,newGet2("Type1")调用2次,影响了效率,因此采用下面优化的形式加速计算
优化后的代码片段
int type1=newGet2("Type1");
if(type1==20003)
{
Sum2AndSet("Price","Items","Summoney");
}
else if(type1==20004)
{
float D1=Sum2("Items3","Summoney");
float D2=newGet2("Summoney");
newSet2("Price",(D1-D2)*0.5);
}
[ 本帖最后由 向日葵 于 2007-8-28 09:49 编辑 ] |
|