6.3 例:现款采购里,现金记帐科目可不可以根据不同的操作员绑定相应的科目?
系统包含了一个脚本引擎,用于增强系统的适应能力,使得使用者在一定程度上能对系统加以定制。
对于学过简单计算机语言的使用者掌握脚本语言并不困难。
了解脚本的应用场合能最大程度地发挥系统的能力,并带来效率的提升。
工资的计算公式定义(人力资源)
打印模板的控制
单据的控制(进销存)
界面的调整
权限的特殊控制
随着系统的扩展,将有更多的环节支持脚本。
解释执行器基本采用C的语法。下面是它的功能定义:
int,float,string,采用 string类型做字符串处理
l
赋值
=
例:
int a,b;
a=5;
b=2*a+3;
l
基本运算
+
- * /
例:
float a,b;
a=5.1;
b=2*a+3*2.3-12/4;
l
判断运算
> == < >= <= !=
例:
判断a是否大于b if(a>b)
判断a是否等于b if(a==b)
判断a是否小于b if(a<b)
判断a是否大于等于b if(a>=b)
判断a是否小于等于b if(a<=b)
判断a是否不等于b if(a!=b)
l
逻辑运算
|| && !
例:
判断a大于3或者b大于5 if(a>3 || b>5)
判断a大于3并且或者b大于5 if(a>3 && b>5)
判断非(a大于3)
if(!(a>3))
l
判断
if(条件)
{
}
else
{
};
if(条件)
{
}
else if(条件)
{
}
else if(条件)
{
}
else
{
};
l
循环
for(id=0;id<num;id++)
{
};
l
循环
do
{
}while(id<3);
l
循环
while(id<3)
{
};
l
选择
switch(变量)
{
case 1:
break;
.
.
.
};
l
其他控制
continue
break
goto test_lab
label test_lab
系统定义了一些内置函数,可以直接调用。
int add(int x,int y)
{
return x+y;
};
采用//作为注释
类型标识: S 字符型 I 整数型 F 数值型
这部分函数可以用来显示调试信息,或者要求确认、弹出告警。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
dbg |
S |
|
显示变量 |
要显示的变量 |
|
|
msg |
S |
|
显示提示 |
要显示的内容 |
|
|
warn |
S |
|
显示警告 |
要显示的内容 |
|
|
confirm |
S |
|
请确认 |
要显示的内容 |
1 确定 0 取消 |
|
log_all_para |
|
|
显示所有的变量 |
|
|
|
|
|
|
|
|
|
这组函数主要用于在脚本里设定弹出一个输入窗口,让操作员输入一些参数,便于进行后续处理。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
inp_clear |
|
|
清除内容 |
|
|
|
inp_get_val |
|
|
获得指定变量的值 |
变量 |
变量值 |
|
inp_set_val |
|
|
设置一个变量的值 |
变量标识,变量值 |
|
|
inp_def_dict |
|
|
定义一个选择型的变量 |
变量标识,变量意义,字典编号 |
|
|
inp_def_string |
|
|
定义一个字符型的变量 |
变量标识,变量意义 |
|
|
inp_def_date |
|
|
定义一个日期型的变量 |
变量标识,变量意义 |
|
|
inp_def_month |
|
|
定义一个月份型的变量 |
变量标识,变量意义 |
|
|
inp_def_int |
|
|
定义一个整数型的变量 |
变量标识,变量意义 |
|
|
inp_select |
|
|
选择变量组 |
变量组标识 |
|
|
inp_para |
|
|
弹出窗口,输入相关参数 |
|
|
|
|
|
|
|
|
|
例子:
inp_def_string('mnum','数量');
inp_def_date('mdate','日期');
inp_para();
inp_num=inp_get_val('mnum')
这部分函数可以用来访问参数。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
para_set |
SS |
I |
设置参数值 |
变量名称,值 |
|
|
para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
|
para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 确定 0 取消 |
|
|
|
|
|
|
|
这组函数主要用于在脚本里设定获取或者修改当前窗口输入控件的内容。这组函数对于修改窗口里面的项目内容非常有用。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
gui_list_inp_all |
|
|
显示当前窗口所有输入控件 |
|
|
|
gui_list_inp |
S |
|
显示指定名称控件包含的输入控件内容 |
控件的名称 |
|
|
gui_list_all |
|
|
显示当前窗口所有控件 |
|
|
|
gui_list |
S |
|
显示指定名称控件包含的控件内容 |
控件的名称 |
|
|
gui_hide |
S |
|
隐藏一个控件 |
控件的名称 |
|
|
gui_show |
S |
|
显示一个控件 |
控件的名称 |
|
|
gui_disable |
S |
|
使得一个控件不可操作 |
控件的名称 |
|
|
gui_enable |
S |
|
使得一个控件允许操作 |
控件的名称 |
|
|
gui_set_val |
SS |
|
设置指定控件的内容 |
控件的名称,要设置的值 |
|
|
gui_get_val |
S |
|
获取指定控件的内容 |
控件的名称 |
指定控件的内容 |
|
gui_set_text |
SS |
|
设置指定控件的标签 |
控件的名称,要设置的标签 |
|
|
gui_get_text |
S |
|
获取指定控件的标签 |
控件的名称 |
指定控件的标签 |
|
gui_set_text、gui_get_text和gui_set_val、gui_get_val的区别在于text相关的函数访问的是显示的标签,val相关的是值,对于编辑框控件这2组是一致的,但对于CheckBox这样的就有区别,CheckBox的val为0或者1,text则表示上面显示的内容 |
|||||
|
gui_set_x |
SI |
|
设置控件的横坐标 |
控件的名称,x |
|
|
gui_set_y |
SI |
|
设置控件的纵坐标 |
控件的名称,y |
|
|
gui_set_w |
SI |
|
设置控件的宽度 |
控件的名称,宽度 |
|
|
gui_set_h |
SI |
|
设置控件的高度 |
控件的名称,高度 |
|
|
gui_set_font_size |
SI |
|
设置控件的字体大小 |
控件的名称,大小 |
|
|
gui_set_font_name |
SS |
|
设置控件的字体名称 |
控件的名称, 字体名称 |
|
|
gui_get_x |
S |
I |
获取控件的横坐标 |
控件的名称 |
x |
|
gui_get_y |
S |
I |
获取控件的纵坐标 |
控件的名称 |
y |
|
gui_get_w |
S |
I |
获取控件的宽度 |
控件的名称 |
宽度 |
|
gui_get_h |
S |
I |
获取控件的高度 |
控件的名称 |
高度 |
|
|
|
|
|
|
|
|
gui_set_parent |
SS |
I |
改变控件的上级区域 |
控件的名称,目标控件的名称 Exam: gui_set_parent('Label15','Panel5'); |
|
|
|
|
|
|
|
|
|
attr_enter |
|
I |
进入属性管理域 |
这2个函数比较特别。主要用于支持访问一些特殊的区域,比如报表的条件、单据的自定义扩展属性等,需要访问这部分区域的控件前,应先调用attr_enter,把控制区指向属性区,访问完之后再调用attr_leave,把控制区设回主窗口 |
|
|
attr_leave |
|
I |
进入窗口管理域 |
||
|
|
|
|
|
|
|
例子:这个例子可以用于销售发货单里面,当联系人变化时,从数据库查出该联系人的地址作为目的地址。
int obj_change()
{
//change_obj
int card_id;
string sql;
if(change_obj=='ComboBox_Ext_Linkman')
{
card_id =
gui_get_val('ComboBox_Ext_Linkman');
if(card_id>0)
{
sql='select
address from eba_card where card_id=' + card_id;
db_run(sql);
if(db_row_count()>0)
gui_set_val('Edit_Aim_Address',db_res(0));
};
};
// gui_list_inp_all();
return 1;
};
表格在很多地方出现,如单据的明细、报表数据、管理界面中的列表等,下面这组函数用于操作表格。可以增加列、获取单元格的数据、设置单元格的数据、调整单元格的位置和宽度。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
下面这组函数用于操作表格 |
|||||
|
grid_hide_col |
SS |
|
隐藏列 |
表格的名称,列名 |
|
|
grid_set_col_width |
SSI |
|
设置列宽 |
表格的名称,列名,宽度 |
|
|
grid_set_col_pos |
SSI |
|
设置列位置 |
表格的名称,列名,位置 |
|
|
grid_add_col_str |
SSS |
|
增加字符型列 |
表格的名称,列名,标题 |
|
|
grid_add_col_num |
SSS |
|
增加数值型列 |
表格的名称,列名,标题,是否字符 |
|
|
grid_add_col |
SSSI |
|
增加列 |
表格的名称,列名,标题,是否字符 |
|
|
grid_row_num |
S |
I |
获取记录数 |
表格的名称 |
行记录数 |
|
grid_col_num |
S |
I |
获取列数 |
表格的名称 |
列记录数 |
|
grid_cur_row |
S |
I |
获取当前行号 |
表格的名称 |
行记录号 |
|
grid_cur_col |
S |
I |
获取当前列号 |
表格的名称 |
列记录号 |
|
grid_set_v |
SSIS |
I |
获取单元内容 |
表格的名称,列名,行,内容 |
|
|
grid_get_v |
SSI |
S |
设置单元内容 |
表格的名称,列名,行 |
内容 |
|
grid_mark_sum |
SS |
I |
标记一个列显示合计数 |
表格的名称,列名 |
|
|
grid_unmark_sum |
SS |
I |
设置一个列不显示合计数 |
表格的名称,列名 |
|
|
grid_mark_readonly |
SS |
I |
标记一个列只能读 |
表格的名称,列名 |
|
|
grid_unmark_readonly |
SS |
I |
设置一个列可以写 |
表格的名称,列名 |
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
v_mark_sum |
S |
|
标记一个列显示合计数(这个函数主要用于支持单据扩展的列显示合计) |
列标识 |
|
|
v_mark_col_readonly |
SI |
|
标记一个列是否只读 |
列标识,只读标志(只读为1,否则为0) |
|
|
vr_add_res |
SS |
|
增加物资 这个函数仅在物资单据中有效 |
产品编号,数量 |
|
|
|
|
|
|
|
|
|
attr_get_val |
S |
S |
获取单据扩展属性的值 |
属性标识 |
属性值 |
|
attr_set_val |
SS |
I |
设置单据扩展属性的值 |
属性标识,属性值 |
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
print_get_cp_sum |
S |
|
获取指定字段当前打印页的合计(本函数只能在打印脚本里使用) |
列标识 |
合计 |
|
print_get_sum |
S |
|
获取指定字段所有记录的合计(本函数只能在打印脚本里使用) |
产品编号,数量 |
合计 |
|
get_pub_pict |
S |
|
获取公共图片 |
图片标示 |
|
|
select_printer |
S |
|
设置默认的打印机 |
打印机名称 |
|
|
|
|
|
|
|
|
这组函数主要用于访问数据库操作。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
db_run |
S |
I |
执行一个sql语句 |
要执行的语句 |
无 |
|
db_go_head |
|
I |
指向第一条记录 |
无 |
无 |
|
db_next |
|
I |
指向下一条记录 |
无 |
无 |
|
db_row_count |
|
I |
获得记录数 |
无 |
记录数 |
|
db_field_count |
|
I |
获得字段数 |
无 |
字段数 |
|
db_res |
I |
S |
获得指定列的值 |
列号 |
字段值 |
|
|
|
|
|
|
|
|
db_add_row |
|
I |
添加一行记录 |
无 |
无 |
|
db_set_value |
IS |
I |
设置当前行指定列的值 |
列号,值 |
无 |
|
db_drop_field |
S |
I |
删除指定的列 |
列名 |
无 |
|
db_add_field |
S |
I |
增加一个列 |
列名 |
无 |
|
db_map |
SSS |
I |
数据字典转换 |
字典名,编码列名,名称列名 |
无 |
|
db_set_main_sort_id |
I |
I |
设置第一排序列 |
编号 |
无 |
|
db_add_sort_id |
I |
I |
添加排序列 |
编号 |
无 |
|
db_sort |
|
I |
排序 |
无 |
无 |
|
db_have_error |
|
I |
是否有sql错误 |
五 |
有错1,无错0 |
|
db_field_name |
I |
I |
取字段名 |
字段编号 |
字段名 |
|
db_set_table_name |
S |
I |
设置表的名称 |
表名称 |
无 |
|
db_set_field_count |
I |
I |
设置字段数 |
字段数 |
无 |
|
db_set_field_name |
IS |
I |
设置字段名称 |
编号,字段名 |
无 |
|
db_set_field_type |
II |
I |
设置字段类型 |
编号,字段类型 |
无 |
|
db_set_field_caption |
IS |
I |
设置字段标题 |
编号,字段标题 |
无 |
|
db_select_area |
I |
I |
选择一个工作区 |
工作区0-5 |
无 |
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
run_line |
S |
S |
执行一个语句 |
要执行的语句 |
执行的结果 |
|
|
|
|
int main() { string l,s; int i; l = '"abc"+"def"'; s=run_line(l); msg(s); l = '1+2*3'; i=run_line(l); msg(i); return 1; }; 上面的代码会输出 abcdef和7 |
||
|
|
|
|
|
|
|
|
dt_get_name |
SS |
S |
获取字典对应字典意义 |
字典标识,字典取值编码 |
字典意义 |
|
dt_get_code |
SS |
S |
获取字典意义对应的字典编码 |
字典标识,字典意义 |
字典编码 |
|
|
|
|
|
|
|
|
fen_to_yuan |
S |
S |
字符表达的分转换为元 |
字符表达的分 |
字符表达的元 |
|
one_cap |
SI |
S |
取得金额其中一位的大写 |
字符表达的元 |
大写表达 |
|
one_digit |
SI |
S |
取得金额其中一位的小写 |
字符表达的元 |
小写表达 |
|
money_cap |
S |
S |
取得金额的大写 |
字符表达的元 |
大写表达 |
|
|
|
|
|
|
|
|
num_dec_cut |
SI |
S |
数字四舍五入 |
串,小数位数 |
结果字符串 |
|
num_2_grp |
S |
S |
转换数值用分组方式表达 123456.78 => 123,456.78 |
要转换的数值 |
转换后数值 |
|
|
|
|
|
|
|
|
fmt_date |
SS |
S |
格式化日期 |
标准日期yyyymmddhhmiss,格式化串 |
格式化后的串 |
|
fmt_time |
SS |
S |
格式化时刻 |
标准时刻hhmiss,格式化串 |
格式化后的串 |
|
get_cur_date |
|
S |
取当天日期 |
无 |
日期yyyymmdd |
|
get_cur_fmt_date |
S |
S |
取格式化的当天日期 |
格式化串 |
格式化后的当天日期 |
|
get_cur_time |
|
S |
取当前时刻 |
无 |
时刻hhmiss |
|
get_cur_fmt_time |
S |
S |
取格式化的当前时刻 |
格式化串 |
格式化后的当前时刻 |
|
get_cur_month |
S |
S |
取当天月 |
无 |
月yyyymm |
|
get_cur_year |
S |
S |
取当天年 |
无 |
年yyyy |
|
get_month_days |
S |
I |
取指定月份的天数 |
月份yyyymm |
天数 |
|
get_year_days |
S |
I |
取指定年份的天数 |
年份yyyy |
天数 |
|
date_to_second |
S |
I |
日期转换为秒数 |
标准日期yyyymmddhhmiss |
秒数 |
|
time_to_second |
S |
I |
时刻转换为秒数 |
标准时刻hhmiss |
秒数 |
|
get_last_month |
S |
S |
取上一月 |
标准月yyyymm |
上一月 |
|
get_last_year |
S |
S |
取上一年 |
标准年yyyy |
上一年 |
|
get_next_date |
S |
S |
取下一天 |
标准日期yyyymmdd |
下一天 |
|
get_last_date |
S |
S |
取上一天 |
标准日期yyyymmdd |
上一天 |
|
get_month_between |
SS |
I |
取2个日期的月份差 |
开始日期,结束日期 |
月数 |
|
get_day_between |
SS |
I |
取2个日期的天数差 |
开始日期,结束日期 |
天数 |
|
get_week_id |
S |
I |
取日期对应的星期 |
标准日期yyyymmdd |
星期1-7 |
|
is_date_valid |
S |
I |
盘点一个日期是否合法 |
标准日期yyyymmdd |
合法1,非法0 |
|
std_inp_date |
S |
S |
从一个输入的串中取出日期 |
输入串 |
标准日期yyyymmdd |
|
std_inp_time |
S |
S |
从一个输入的串中取出时刻 |
输入串 |
标准时刻hhmiss |
|
|
|
|
|
|
|
|
strlen |
S |
I |
计算字符串的长度 |
字符串 |
长度 |
|
strcmp |
SS |
I |
比较2个字符串大小 |
串1,串2 |
0相等,1大于,-1小于 |
|
strncmp |
SSI |
I |
比较2个字符串前几个字符的大小 |
串1,串2,比较长度 |
0相等,1大于,-1小于 |
|
str_get_sub |
SII |
S |
返回部分子串 |
串1,开始位置(首位为0),长度 |
结果字符串 |
|
str_pos |
SS |
I |
返回串2在串1中的位置 |
串1,串2 |
位置,开始位置为0,未找到返回-1 |
|
str_add_as_num |
SS |
S |
2个字符串转为数字相加返回结果字符串 |
串1,串2 |
结果字符串 |
|
str_sub_as_num |
SS |
S |
2个字符串转为数字相减返回结果字符串 |
串1,串2 |
结果字符串 |
|
str_std_num |
SI |
S |
字符串数字补齐小数位数 |
串,小数位数 |
结果字符串 |
|
lower |
S |
S |
根据指定串获得一个小写串 |
指定串 |
结果字符串 |
|
upper |
S |
S |
根据指定串获得一个大写串 |
指定串 |
结果字符串 |
|
str_cut |
SI |
S |
字符串截断 |
串,最大长度 |
结果字符串 |
|
to_int |
S |
I |
字符串转整数 |
串 |
结果数 |
|
to_float |
S |
F |
字符串转浮点数 |
串 |
结果数 |
|
fmt_float |
FS |
S |
浮点数转格式字符串 |
数值,格式 |
结果串 |
|
fmt_int |
IS |
S |
整数转格式字符串 |
数值,格式 |
结果串 |
|
mod |
II |
I |
2个整数取余 |
数值1,数值2 |
结果 |
|
|
|
|
|
|
|
|
system |
S |
I |
执行外部程序 |
外部程序 |
|
|
shell |
S |
I |
执行外部程序 |
外部程序 |
|
|
|
|
|
|
|
|
|
get_ip |
|
S |
获取本机ip地址 |
|
Ip地址 |
|
write_port |
SS |
I |
写串口并口 |
第一参数如 com1 lpt1 第2参数为十进制码串
100,20,255,可用于钱箱控制 write_port(‘LPT1
‘,’27,112,0, |
|
|
check_thr_err |
|
I |
检查是否有函数执行错误信息 |
如果有会弹出信息 |
|
|
|
|
|
|
|
|
下面的参数可以在打印控制脚本中加以引用:
本页记录数 cp_row_num
本页记录数 cp_row_num
总页数 page_count
当前页码 page_id
当前记录号 record_id
记录总数 record_count
总页数 page_count
当前页码 page_id
打印份号 print_copy_id
当前记录号 record_id
记录总数 record_count
本页小计 cp_xxxx 后面的xxxx为字段名
打印预览的时候可看到打印时传入的其它参数清单(包括一些合计大写)。
该函数在打印预览的时候调用。
该函数在预览指定页的时候调用。
该函数在定位一行的时候调用。
这个函数在打印以下空白的时候用到,可以指定一个或多个字段内容为 以下空白,直接做一个赋值语句,如res_name='以下空白',以下空白只有在固定行数打印的情况下才有效。
该函数在打印某个对象前调用,可在函数里通过to_draw_obj知道接下来要打印哪个对象。
系统预设值 pp_x(横向偏移),pp_y(纵向偏移),pp_w(宽度),pp_h(高度),pp_font_size参数,可以修改以上5 个参数来控制打印的位置和大小。
12345.67元,打印出来的结果是:壹万贰仟叁佰肆拾伍元陆角柒分....可不可以把中间的万仟佰拾元角分去掉?
利用one_cap函数可以实现这个功能。
如v = 123.45
one_cap(v,1) 则返回五
one_cap(v,2) 则返回四
one_cap(v,3) 则返回三
默认打印的参数为v_print_time,格式为 ‘yyyy-mm-dd hh-mi-ss’,现在需要打印为 ‘yyyy年mm月dd日’这种格式:
在模板上增加一个对象 my_print_time,然后在main函数里面进行脚本赋值。
int main()
{
string sub;
sub = str_get_sub(v_print_time,0,4);
sub = sub + '年';
sub = sub + str_get_sub(v_print_time,5,2);
sub = sub + '月';
sub = sub + str_get_sub(v_print_time,8,2);
sub = sub + '日';
my_print_time = sub;
return 1;
};
int
before_draw_obj()
{
if(to_draw_obj!='d_res_name')
return 1;
if(strlen(d_res_name)>=30)
pp_font_size=8;
else if(strlen(d_res_name)>=16)
pp_font_size=10;
else
pp_font_size=12;
return 1;
};
int
func_cal_row_height()
{
if(strlen(d_res_name)>=16)
row_height_add=400;
return 1;
};
请阅读内置函数里面的打印模板脚本函数。
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
get_user_id |
|
S |
获取登陆的操作员编号 |
|
操作员编号 |
|
get_user_name |
|
S |
获取登陆的操作员姓名 |
|
操作员姓名 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
例子:取登陆用户编号并显示
string uid;
uid=get_user_id();
dbg(uid);
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
get_emp_pict |
S |
S |
获取员工对应的图片文件 |
员工标识 |
图片文件名 |
|
get_emp_info |
SS |
S |
获得员工指定信息 |
员工编号,列名 |
列信息 |
|
get_emp_desc |
SS |
S |
获得员工指定描述信息 |
员工编号,描述信息类型 |
描述信息 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|
get_res_pict |
S |
S |
获取产品对应的图片文件 |
产品标识 |
图片文件名 |
|
get_res_info |
SS |
S |
获得产品指定信息 |
产品编号,列名 |
列信息 |
|
get_res_desc |
SS |
S |
获得产品指定描述信息 |
产品编号,描述信息类型 |
描述信息 |
|
get_res_factor_num |
SS |
S |
获得产品折算数量 |
产品编号,标准数量 |
折算数量 |
|
|
|
|
|
|
|
|
get_eba_info |
SS |
S |
获得客户指定信息 |
客户编号,列名 |
列信息 |
|
|
|
|
|
|
|
|
get_sup_info |
SS |
S |
获得供应商指定信息 |
供应商编号,列名 |
列信息 |
|
|
|
|
|
|
|
|
get_eba_attr |
SS |
S |
获得客户自定义属性信息 |
客户编号,自定义属性名 |
自定义属性信息 |
|
|
|
|
|
|
|
|
get_sup_attr |
SS |
S |
获得供应商自定义属性信息 |
供应商编号,自定义属性名 |
自定义属性信息 |
|
|
|
|
|
|
|
|
get_eba_group_price |
SS |
S |
获取指定价格体系的价格 |
产品编号,价格体系编号 |
价格 |
|
have_eba_group_price |
SS |
I |
判断是否在某价格体系中定义了 |
产品编号,价格体系编号 |
1:定义了 0:未定义 |
|
|
|
|
|
|
|
|
get_res_eba_map_code |
SS |
S |
获取系统中指定产品在某企业内的编码 |
产品编号,企业编码 |
指定产品在某企业内的编码 |
|
|
|
|
|
|
|
例子:物资单据打印主物资扩展属性
打印模板中定义字段m_res_ext_1,然后在main函数里面加:
m_res_ext_1 =
get_res_info(m_res_id,'ext_1')
例子:物资单据打印明细物资扩展属性
打印模板中定义字段res_ext_1,然后在func_go_row函数里面加:
res_ext_1 = get_res_info(res_id,'ext_1')
调用函数前传入的参数: change_col_id 明细当前的列记录号
change_row_id 明细当前的行记录号
该函数在新建单据的时候调用。
该函数在显示单据的时候调用。
该函数在增加一行物资的时候调用。
该函数在单元格里面的内容被修改了的时候调用,利用change_col变量可知道被修改的是哪个项目。
该函数在某些单据表头输入控件的内容被修改了的时候调用,利用change_obj变量可知道被修改的是哪个输入控件。
该函数在打印前调用,可以用can_print参数来决定本次打印是否允许。
相关参数:print_process_times 标识这是第几次打印。
该函数在打印后调用。
该函数在审核后调用。
该函数可以被单据操作菜单下的《运行脚本adjust_row函数》功能触发,针对每条记录调用一次。主要用于需要的时候进行批量修改数据。
在func_before_print()里面加以判断控制。
int
func_before_print()
{
can_print=1;
if(print_process_times>1)
can_print=0;
//show_v_para();
return 1;
};
在create_voucher()里面加以判断控制。
int
create_voucher()
{
string
uid;
uid=get_user_id();
//msg(uid);
//gui_list_inp_all();
if(uid=='admin')
gui_set_val('ComboBox_Ext_Mio_Subject_Id','SS3');
else
if(uid=='user1')
gui_set_val('ComboBox_Ext_Mio_Subject_Id','SS2');
return 1;
};
下面例子中的最后num_dec_cut 函数对实际应发进行了四舍五入处理,保留一位小数。
应发合计 = 基本工资
+ 绩效奖金 + 岗位津贴
+ 其它补贴
个人所得税 = cal_tax(应发合计)
实际应发 = 应发合计
- 个人所得税
实际应发 = num_dec_cut(实际应发, 1);
打开 宿舍管理=》功能=》记录管理列表脚本定义,复制下面的脚本进去,点刷新就可以看到相关数据。
int
load_ext()
{
grid_add_col_str('MG_Detail','phone_no','联系电话');
grid_set_col_width('MG_Detail','phone_no',140);
grid_set_col_pos('MG_Detail','phone_no',2);
grid_add_col_str('MG_Detail','mobile','移动电话');
grid_set_col_width('MG_Detail','mobile',140);
grid_set_col_pos('MG_Detail','mobile',3);
return 1;
};
int
show_detail_row_ext()
{
string emp_id;
int id;
id=para_get('detail_row_id');
emp_id=grid_get_v('MG_Detail','emp_id',id);
if(emp_id=='') return 1;
db_run("select telephone,mobile
from emp where emp_id='"+emp_id+"'");
if(db_row_count()>0)
{
grid_set_v('MG_Detail','phone_no',id,db_res(0));
grid_set_v('MG_Detail','mobile',id,db_res(1));
}
return 1;
};
小陈陈:我是想要把 价格体系 的数据打印出来 在现款销售 有可能吗?
打印脚本里面加上以下代码就可以(设置打印模板上体系名称字段标识为d_price_group_name )。
int
main()
{
db_run("select b.name from eba
a,eba_price_group b where a.eba_id='" + v_eba_id + "' and
a.price_group_id=b.price_group_id");
if(db_row_count()>0)
d_price_group_name=db_res(0);
else
d_price_group_name="未指定";
return 1;
};
杨清云:在商贸软件中的单据中,打印格式里我设置了一个字段,想要显示为业务员的电话号码,使用什么脚本查找绑定好这个员工的联系电话呢?
打印脚本里面加上以下代码就可以(设置打印模板上体系名称字段标识为v_emp_ telephone )。
int
main()
{
db_select_area(1);
db_run("select telephone from
app_emp where emp_id='" + v_emp_id + "'");
if(db_row_count()>0)
v_emp_telephone=db_res(0);
else
v_emp_telephone="";
db_select_area(0);
return 1;
};
浮天风:企业年休标准比较特殊,有什么办法可以解决?
员工年休标准功能菜单下脚本定义里面定义,可以参考下面的脚本进行修改
int show_row_ext()
{
int i_curr_hire_age_month;
i_curr_hire_age_month=curr_hire_age_month;
if(i_curr_hire_age_month<12)
com_std_days=1;
else
if(i_curr_hire_age_month<24)
com_std_days=2;
else
com_std_days=3;
return 1;
};
环球水泵:我想在产品资料里面,输入进价后,系统自动形成参考售价,比如成本价*系数
商品资料管理界面 功能菜单 最下面的编辑界面脚本里面定义以下代码,修改了参考进价后按一下 f9 会自动修改参考售价
int func_f9_call()
{
num ival,sval;
ival =
gui_get_val('Edit_In_Ref_Price');
//msg(ival);
sval = ival
* 1.2;
//msg(sval);
gui_set_val('Edit_Out_Ref_Price',sval);
//gui_list_inp_all();
return 1;
};
悟道(neil):怎么设置成单据审核后才能打印啊?
出库单据的操作菜单下=》参数及配置=》脚本定义=》初始化,修改func_before_print函数保存后就可以了。
int func_before_print()
{
//can_print=1;
if(v_state=='A')
can_print=0;
return 1;
};
保险类型定义中可以设定自己定义的计算方法,用于在标准输入界面中自动计算。
int func_auto_cal()
{
num a,b,c,d;
a =
gui_get_val('Edit_Wage_Base_Amount');
if(a<1300)
b = 1300;
else
if(a>4500)
b = 4500;
else
b = a;
//msg(b);
gui_set_val('Edit_Base_Amount',b);
c = b * 0.2;
d = c*0.1;
gui_set_val('Edit_Company_Amount',c);
gui_set_val('Edit_Emp_Amount',d);
//msg(a);
return 1;
};
int load_ext()
{
attr_enter();
//gui_list_all();
gui_set_text('chk_top_edt_id','sads');
attr_leave();
return 1;
};