壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2558|回复: 1

如何编写C语言代码解决特殊业务处理

[复制链接]
发表于 2007/8/28 09:48:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
§1 基本意义
§2 示例一:外贸费用的计算
§3 示例一C语言代码设置
§4 示例二:采购付款金额的控制
§5 示例二结果

§1 基本意义
1) OA-ERP做为一个通用系统,因此不能在一些非常专们的需求方面走的太远,但是系统支持的C语言,可能帮助用户完成几乎是任何可能的需求。
2)C语言接口函数的说明,请见“高级设置”模块“USER函数”。
§2示例一:外贸费用的计算
1) 一个外贸用户,在销售报价、销售订单中,都因为存在费用,因此启用了费用方案、费用清单。 外贸费用01.gif
2) 这些费用中,一部分是固定的,例如手续费、标签费等。
3) 另外一部分费用,不是固定的,例如“单物品金额保值费”,它是根据物品清单的费用总和再乘以一个系数得到的;再如“关税”等,是其它费用的总和,再乘以一个系数得到的。
§3 C语言代码设置

1
)我们先定义费用项目如下。
外贸费用02.gif

注意这这里的两个特殊项目的序号分别是20003、20004,他们要特别处理。


2
)在销售报价单的中定义C语言程序:
外贸费用03.gif

这里只需要给第三行、第四行项目定义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);

}
外贸费用04.gif pro002.gif


[ 本帖最后由 向日葵 于 2007-8-28 09:49 编辑 ]
 楼主| 发表于 2007/8/28 09:55:04 | 显示全部楼层
§4
示例二:采购付款金额的控制
1) 一个制药企业,在采购付款时,要求金额超过,比如100万时,每次至多付款70%,这个特殊需求可以编写“采购付款单”的审核检查C语言代码来控制。
pro003.gif
根据需求,这张单据应该不能通过审核。因此我们来分析,应该如何编写C语言程序。

系统提供的Sum2(char *FieldName,char *Express1)函数可以获得清单中“应付款”,“此次付款”的值,
double D1=Sum2("Items","Tobepayed");
double D2=Sum2("Items","Nowpayed");
if(D1>=1000000 && D2>D1*0.7)
{
return -1;

}
return 0;
这里D1,获得“应付款”的值,因为清单的字段是"Items",注意表单可能有多个清单,因此这里要求注明清单的字段。D1,获得“此次付款”的值. 如果D1超过100万,而且“此次付款”超过D1的70%时,返回-1,表示审核失败。其它情况返回0,表示通过。
2) 将编写的函数录入到“用户C语言程序”,然后
pro006.gif
3) 然后再“采购付款”的业务设置窗口,按照下面方式设置审核检查函数
pro007.gif
注意,这里“iTable_AuditFunction”是审核检查函数的类型标记,因为有多种控制函数,因此不要弄错了。
§5
结果

设置好后,重新启动系统。
现在选择这张单据,审核出现如下提示,表示审核失败

pro004.gif
pro005.gif
修改金额为690,000.00,再审核,则通过。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 10:15 , Processed in 0.014698 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表