3.5.2 例一:设置报表中第2行以及res_id列的颜色和背景色
4.3.5 利用Auto_Adjust_Detail_Height变量自动调整明细的行高度
4.3.7 利用print_cal_obj_height调整明细的行高度
7.4 例:现款采购里,现金记帐科目可不可以根据不同的操作员绑定相应的科目?
10.13 如何在销售按单据报表中体现 净利润 = 毛利润-(费用一 + 费用二)
系统包含了一个脚本引擎,用于增强系统的适应能力,使得使用者在一定程度上能对系统加以定制。
对于学过简单计算机语言的使用者掌握脚本语言并不困难。
了解脚本的应用场合能最大程度地发挥系统的能力,并带来效率的提升。
工资的计算公式定义(人力资源)
打印模板的控制
单据的控制(进销存)
界面的调整
权限的特殊控制
随着系统的扩展,将有更多的环节支持脚本。
解释执行器基本采用C的语法。下面是它的功能定义:
num,int,float,string,采用 string类型做字符串处理
num类型是高精度的数值类型。
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 |
|
|
显示所有的变量 |
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
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 |
获取字典意义对应的字典编码 |
字典标识,字典意义 |
字典编码 |
dt_get_ext |
SSS |
S |
获取字典对应扩展信息 |
字典标识,字典取值编码,要返回的扩展列 |
扩展信息 |
|
|
|
|
|
|
|
|
|
|
|
|
fen_to_yuan |
S |
S |
字符表达的分转换为元 |
字符表达的分 |
字符表达的元 |
one_cap |
SI |
S |
取得金额其中一位的大写 |
大写数值 |
大写表达 |
one_digit |
SI |
S |
取得金额其中一位的小写 |
字符表达的元,位数 |
小写表达 |
|
例子: one_digit("123.45",1,s) 返回 5 one_digit("123.45",3,s) 返回 3 one_digit("123.45",5,s) 返回 1 one_digit("123.45",6,s) 返回 |
||||
one_digit_ext |
SIS |
S |
取得金额其中一位的小写,如是最左边前面1位返回货币标识 |
字符表达的元,位数,货币标识 |
小写表达 |
|
例子: one_digit_ext("123.45",1,s,"$") 返回 5 one_digit_ext("123.45",3,s,"$") 返回 3 one_digit_ext("123.45",5,s,"$") 返回 1 one_digit_ext("123.45",6,s,"$") 返回 $ |
||||
money_cap |
S |
S |
取得金额的大写 |
金额 |
大写表达 |
|
|
|
|
|
|
num_dec_cut |
SI |
S |
数字四舍五入 |
串,小数位数 |
结果字符串 |
num_2_grp |
S |
S |
转换数值用分组方式表达 123456.78 => 123,456.78 |
要转换的数值 |
转换后数值 |
num_to_cap |
S |
S |
转换数值为大写 123=> 壹百贰拾叁 |
要转换的数值 |
大写表达 |
|
|
|
|
|
|
fmt_date |
SS |
S |
格式化日期 |
标准日期yyyymmddhhmiss,格式化串 |
格式化后的串 |
fmt_time |
SS |
S |
格式化时刻 |
标准时刻hhmiss,格式化串 |
格式化后的串 |
get_cur_date |
|
S |
取当天日期 |
无 |
日期yyyy-mm-dd |
get_cur_date_std |
|
S |
取当天日期标准格式 |
|
yyyymmdd |
get_cur_fmt_date |
S |
S |
取格式化的当天日期 |
格式化串 |
格式化后的当天日期 |
get_cur_time |
|
S |
取当前时刻 |
无 |
时刻hh:mi:ss |
get_cur_time_std |
|
S |
取当前时刻标准格式 |
|
时刻hhmiss |
get_cur_fmt_time |
S |
S |
取格式化的当前时刻 |
格式化串 |
格式化后的当前时刻 |
get_cur_month |
|
S |
取当天月 |
无 |
月yyyymm |
get_cur_year |
|
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 |
get_week_id_num |
SSI |
I |
获取日期范围内某周几的出现次数 |
开始日期,结束日期,要检测的周几1-7 |
出现次数 |
例子: num6 = get_week_id_num('20120701','20120728',6); //返回4 |
|||||
is_date_valid |
S |
I |
盘点一个日期是否合法 |
标准日期yyyymmdd |
合法1,非法0 |
std_inp_date |
S |
S |
从一个输入的串中取出日期 |
输入串 |
标准日期yyyymmdd |
std_inp_time |
S |
S |
从一个输入的串中取出时刻 |
输入串 |
标准时刻hhmiss |
date_add |
SI |
S |
根据开始日期和相差天数计算结果日期 |
开始日期,相差天数 |
结果日期 |
month_add |
SI |
S |
根据开始月份和相差月数计算结果月份 |
开始月份,相差月数 |
结果月份 |
date_nl |
S |
S |
根据公历日期获得农历日期 |
公历日期yyyymmdd |
农历日期yyyymmdd |
date_gl |
S |
S |
根据农历日期获得公历日期 |
农历日期yyyymmdd |
公历日期yyyymmdd |
|
|
|
|
|
|
nl |
|
S |
获得回车字符串 例子: string res; res = "AAA"; res = res + nl(); res = res + "abc"; |
|
回车字符串 |
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 |
结果 |
str_to_num_str |
S |
S |
去掉字符串中不是数值的字符,比如逗号 |
串 |
结果字符串 |
|
|
|
|
|
|
system |
S |
I |
执行外部程序 |
外部程序 |
|
shell |
S |
I |
执行外部程序 |
外部程序 |
|
call_dll_func |
SS |
I |
调用dll里面的函数 |
Dll名,函数标识 |
|
call_func |
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 |
检查是否有函数执行错误信息 |
如果有会弹出信息 |
|
|
|
|
|
|
|
str_trim_right |
S |
S |
去掉字符串右边空格 |
串 |
结果字符串 |
str_trim_left |
S |
S |
去掉字符串左边空格 |
串 |
结果字符串 |
str_trim |
S |
S |
去掉字符串2边空格 |
串 |
结果字符串 |
|
|
|
|
|
|
这组函数主要用于在脚本里设定获取或者修改当前窗口输入控件的内容。这组函数对于修改窗口里面的项目内容非常有用。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
gui_list_inp_all |
|
|
显示当前窗口所有输入控件 |
|
|
gui_list_inp |
S |
|
显示指定名称控件包含的输入控件内容 |
控件的名称 |
|
gui_list_all |
|
|
显示当前窗口所有控件 |
|
|
gui_list |
S |
|
显示指定名称控件包含的控件内容 |
控件的名称 |
|
gui_hide |
S |
|
隐藏一个控件 |
控件的名称 |
|
gui_show |
S |
|
显示一个控件 |
控件的名称 |
|
gui_focus |
S |
|
光标定位到指定的控件 |
控件的名称 |
|
gui_disable |
S |
|
使得一个控件不可操作 |
控件的名称 |
|
gui_enable |
S |
|
使得一个控件允许操作 |
控件的名称 |
|
gui_disable_edit |
S |
|
使得一个控件不可编辑 |
控件的名称(限于文本输入框、多行输入框) |
|
gui_enable_edit |
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 |
|
设置控件的字体大小 |
控件的名称,字体大小(一般标准为9) |
|
gui_set_font_name |
SS |
|
设置控件的字体名称 |
控件的名称, 字体名称 |
|
gui_set_font_color |
SI |
|
设置控件的字体颜色 |
控件的名称,字体颜色 |
|
|
例子:单据里设置新建按钮字体颜色 gui_set_font_color('SpeedButton_Create',0x0000ff); |
||||
gui_set_bg_color |
SI |
|
设置控件的背景颜色 |
控件的名称,背景颜色 |
|
|
例子:单据里设置功能条背景颜色 gui_set_bg_color('Panel_Func',0xff0000); |
||||
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'); |
|
gui_trigger_change |
S |
I |
触发一个控件内容改变了的处理事件 |
控件的名称 Exam: gui_trigger_change (‘Edit_Name’) |
|
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_get_col_width |
SS |
|
获取列宽 |
表格的名称,列名 |
|
grid_set_row_height |
SII |
|
设置行高 |
表格的名称,行号,高度 |
|
grid_get_row_height |
SI |
|
获取行高 |
表格的名称,行号 |
|
|
|
|
|
|
|
grid_set_col_pos |
SSI |
|
设置列位置 |
表格的名称,列名,位置 |
|
grid_get_col_pos |
SS |
|
获取列位置 |
表格的名称,列名 |
列位置(-1表示无法获得) |
grid_add_row_num |
SI |
I |
增加行 |
表格的名称,要增加的行数 |
|
grid_del_row |
SI |
I |
删除行 |
表格的名称,要删除的行 |
|
grid_clear_row |
SI |
I |
清空行 |
表格的名称,要清除内容的行 |
|
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 |
SI |
I |
设置当前列号 |
表格的名称,列号 |
当前列 |
grid_set_cur_row |
SI |
I |
设置当前行号 |
表格的名称,行号 |
当前行 |
grid_ set_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_get_col_sum |
SS |
S |
获得一列的合计值 |
表格的名称,列名 |
合计 |
grid_mark_readonly |
SS |
I |
标记一个列只能读 |
表格的名称,列名 |
|
grid_unmark_readonly |
SS |
I |
设置一个列可以写 |
表格的名称,列名 |
|
grid_set_col_align_left |
SS |
I |
设置一个列左对齐 |
表格的名称,列名 |
|
|
例:grid_set_col_align_left('MG_Item','res_id'); |
||||
grid_set_col_align_right |
SS |
I |
设置一个列右对齐 |
表格的名称,列名 |
|
|
例:grid_set_col_align_right('MG_Item','res_id'); |
||||
grid_set_col_align_middle |
SS |
I |
设置一个列中对齐 |
表格的名称,列名 |
|
|
例:grid_set_col_align_middle('MG_Item','res_id'); |
||||
grid_set_col_picklist |
SSS |
I |
设置一个列输入为下拉选择模式 |
表格的名称,列名,下拉项目(用逗号分开) |
|
|
例:grid_set_col_picklist('MG_Item','note_info','2a,33b,c,d,e,,'); |
||||
grid_set_col_picklist_dict |
SSS |
I |
设置一个列输入为下拉选择模式 |
表格的名称,列名,下拉项目使用的数据字典标识 |
|
|
例:grid_set_col_picklist_dict('MG_Item','note_info','bool'); |
||||
grid_set_row_color |
SII |
I |
设置行颜色 |
表格的名称、行号、颜色 |
|
grid_set_col_color |
SSI |
I |
设置列颜色 |
表格的名称、列名、颜色 |
|
grid_set_cell_color |
SSII |
I |
设置单元格颜色 |
表格的名称、列名、行号、颜色 |
|
grid_set_row_bgcolor |
SII |
I |
设置行背景颜色 |
表格的名称、行号、背景颜色 |
|
grid_set_col_bgcolor |
SSI |
I |
设置列背景颜色 |
表格的名称、列名、背景颜色 |
|
grid_set_cell_bgcolor |
SSII |
I |
设置单元格背景颜色 |
表格的名称、列名、行号、背景颜色 |
|
|
|
||||
|
|
||||
|
|
单据中明细表格: MG_Item
报表中数据表格: MG
管理界面(左边是索引树,右边是列表):MG
int load_over()
{
grid_set_row_color('MG',2,0xff0000);
grid_set_row_bgcolor('MG',2,0x00ff00);
grid_set_col_color('MG','res_id',0xff0000);
grid_set_col_bgcolor('MG','res_id',0x0000ff);
return 1;
};
这组函数主要用于在脚本里设定弹出一个输入窗口,让操作员输入一些参数,便于进行后续处理。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
inp_clear |
|
|
清除内容 |
|
|
inp_get_val |
S |
S |
获得指定变量的值 |
变量 |
变量值 |
inp_set_val |
SS |
I |
设置一个变量的值 |
变量标识,变量值 |
|
inp_def_dict |
SSS |
I |
定义一个选择型的变量 |
变量标识,变量意义,字典编号 |
|
inp_def_string |
SS |
I |
定义一个字符型的变量 |
变量标识,变量意义 |
|
inp_def_date |
SS |
I |
定义一个日期型的变量 |
变量标识,变量意义 |
|
inp_def_month |
SS |
I |
定义一个月份型的变量 |
变量标识,变量意义 |
|
inp_def_int |
SS |
I |
定义一个整数型的变量 |
变量标识,变量意义 |
|
inp_select 暂时不用 |
|
|
选择变量组 |
变量组标识 |
|
inp_para |
|
|
弹出窗口,输入相关参数 |
|
|
inp_para_set_title |
S |
|
设置参数输入窗口的标题 |
标题 |
|
|
|
|
|
|
|
例子:
inp_clear();
inp_def_dict('msex','性别', 'sex');
inp_def_string('mnum','数量');
inp_def_date('mdate','日期');
inp_para();
num inp_num;
inp_num=inp_get_val('mnum')
这部分函数可以用来访问参数。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
下面这组函数是局部的,只能访问本次脚本调用涉及的参数,调用para_set设置的参数在下次执行的时候是无效的。 |
|||||
para_set |
SS |
I |
设置参数值 |
变量名称,值 |
|
para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 定义了 0 没有 |
|
|
|
|
|
|
下面这组函数是全局的,用于支持设置访问自定义的参数。调用user_para_set设置的参数在下次执行的时候用user_para_get访问。 |
|||||
user_para_set |
SS |
I |
设置参数值 |
变量名称,值 |
|
user_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
user_para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 定义了 0 没有 |
|
|
|
|
|
|
下面这组函数是全局的,用于支持设置访问公共的参数。比如企业名称等 |
|||||
pub_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
pub_para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 定义了 0 没有 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
v_mark_sum |
S |
|
标记一个列显示合计数(这个函数主要用于支持单据扩展的列显示合计) |
列标识 |
|
v_mark_col_readonly |
SI |
|
标记一个列是否只读 |
列标识,只读标志(只读为1,否则为0) |
|
v_set_print_format_id |
S |
|
指定打印采用的打印模版编号 |
打印模版编号 |
|
vr_add_res 仅用于进销存商贸物资单据 |
SS |
|
增加物资 这个函数仅在物资单据中有效 |
产品编号,数量 |
|
vr_set_price_group 仅用于进销存商贸物资单据 |
S |
|
设置当前的价格体系 |
价格体系编号 |
|
vr_init_main_res_ui_pos 仅用于进销存商贸物资单据 |
|
|
重新计算排列主物资控件的位置,这个函数主要用于脚本控制隐藏主物资的控件后重新调整位置 |
|
|
例子: int create_voucher() { gui_hide('ScrollBox_Main_Res_Ref_Voucher_No'); gui_hide('ScrollBox_Main_Res_Unit_Type'); vr_init_main_res_ui_pos(); return
1; }; |
|||||
attr_get_val |
S |
S |
获取单据扩展属性的值 |
属性标识 |
属性值 |
attr_set_val |
SS |
I |
设置单据扩展属性的值 |
属性标识,属性值 |
|
|
|
|
|
|
|
系统提供了4个菜单,供脚本扩展功能。默认是不显示的,可以通过v_show_user_menu进行激活,此时可以通过点击单据名称或者按 ctrl+1组合键进行弹出,点击后调用相应的脚本功能函数 func_user_menu_1 …. func_user_menu_4 这4个菜单只有在单据编辑状态下才可以使用 |
|||||
v_show_user_menu |
IS |
|
显示指定的菜单项 |
编号1-4,标题 |
|
v_hide_user_menu |
I |
|
隐藏指定的菜单项 |
编号1-4 |
|
|
|
|
|
|
|
int func_user_menu_1()
{
msg('menu 1 clicked');
return
1;
};
int func_user_menu_2()
{
msg('menu 2 clicked');
return
1;
};
int create_voucher()
{
v_show_user_menu(1,'this is menu 1');
v_show_user_menu(2,'this is menu 2');
return 1;
};
菜单操作函数主要在主界面根据需要调整菜单。
在调用函数进行菜单项目操作前,先要调用menu_use设定需要操作的菜单名字,如果不调用该函数,则默认为当前窗口的主菜单。窗口中能操作的菜单名可以用menu_list显示出来。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
|||||
下面这组函数用于操作菜单 |
||||||||||
menu_list_item |
|
|
列出所有菜单项目 |
|
|
|||||
menu_hide_item |
S |
|
隐藏一个项目 |
菜单项目名 |
|
|||||
menu_show_item |
S |
|
显示一个项目 |
菜单项目名 |
|
|||||
menu_enable_item |
S |
|
使一个项目不可以点击 |
菜单项目名 |
|
|||||
menu_disable_item |
S |
|
使一个项目允许点击 |
菜单项目名 |
|
|||||
menu_set_text |
SS |
|
设置一个菜单的文本 |
菜单项目名,要显示的文本 |
|
|||||
menu_move_item |
SSI |
|
转移一个菜单项目 |
要移动的项目名,目标项目名,目标位置 |
|
|||||
menu_add_exe |
SISSS |
|
增加一个菜单,点击后执行一个程序 |
父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,执行程序 |
|
|||||
menu_add_dll |
SISSSS |
|
增加一个菜单,点击后执行一个动态库里的函数 |
父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,动态库,函数 |
|
|||||
menu_add_func |
SISSS |
|
增加一个菜单,点击后执行一个系统函数 |
父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,系统函数 |
|
|||||
menu_add_csp |
SISSS |
|
增加一个菜单,点击后执行一个脚本的main函数 |
父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,脚本标识 |
|
|||||
例子:在主窗口脚本里定义以下脚本,用于在系统功能菜单下增加一个菜单项,点击后执行a_csp的脚本里的main函数 int main() { //menu_list_item(); menu_add_csp('N_Top_System',0,'item_run_a_csp','执行一个脚本a_csp','a_csp'); return 1; }; 另外编写脚本a_csp如下(配置管理=>脚本工具,输入以下内容后另存为a_csp): int main() { msg('hello,world,a_csp'); return
1; }; |
||||||||||
menu_add_file |
SISSS |
|
增加一个菜单,点击后打开一个文件 |
父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,关联文件 |
|
|||||
menu_set_hot_key |
SSII |
|
设置菜单热键 |
菜单名称,字母,是否需要ctrl,是否需要alt |
|
|||||
例子: menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','T',1,0); //ctrl+T menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','T',0,1); //alt+T menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','F5',0,1); //alt+F5 menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','F9',0,0); //F9 |
||||||||||
menu_trigger_click |
S |
I |
触发执行一个菜单的功能 |
菜单名称 |
|
|||||
例子: menu_trigger_click
('tbx_Tbx_Gui_Plan_Adm'); |
||||||||||
menu_use |
S |
|
指定要操作的菜单 |
菜单名字 |
|
|||||
menu_list |
|
|
显示所有的菜单名字 |
|
|
|||||
系统功能的主窗口脚本里面设置下面的代码,点执行即可(下次登录系统会自动执行):
int main()
{
//menu_list();
//menu_list_item();
menu_hide_item('inv_buss');
return 1;
};
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
print_get_cp_sum |
S |
|
获取指定字段当前打印页的合计(本函数只能在打印脚本里使用) |
列标识 |
合计 |
print_get_sum |
S |
|
获取指定字段所有记录的合计(本函数只能在打印脚本里使用) |
产品编号,数量 |
合计 |
get_pub_pict |
S |
|
获取公共图片 |
图片标示 |
|
select_printer |
S |
|
设置默认的打印机 |
打印机名称 |
|
print_cal_obj_height |
S |
I |
计算完整打印某单元格需要的高度(宽度按照模版设计) |
对象标识 |
高度 |
|
|
|
|
|
|
这组函数主要用于访问数据库操作。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
db_run |
S |
I |
执行一个sql语句 |
要执行的语句 |
无 |
db_go_head |
|
I |
指向第一条记录 |
无 |
无 |
db_next |
|
I |
指向下一条记录 |
无 |
无 |
db_go_row |
I |
I |
指向某一条记录 |
记录偏移(第一条为0) |
有错0,无错1 |
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_seek |
SS… |
I |
根据指定字段和字段的值查找记录 |
是否找到 |
找到了返回1 未找到返回0 |
db_show |
S |
I |
在界面上显示数据 |
窗口标题 |
|
db_select_area |
I |
I |
选择一个工作区 |
工作区0-5 |
无 |
db_select_dbio |
S |
I |
根据名称选择数据内容 |
数据集合的名称 |
|
int main()
{
//msg('hello,world');
int n,id;
string v1,v2;
db_run('select para_id,para_value from
app_para');
n = db_row_count();
//msg(n);
for(id=0;id<n;id++)
{
v1=db_res(0);
v2=db_res(1);
dbg('row '+ id + ' :' + v1+ '
, '+v2);
db_next();
};
return 1;
};
int
test()
{
return 1;
};
int
main()
{
//msg('hello,world');
int n,id,n2;
string v1,v2;
db_select_area(0);
db_run('select para_id,para_value from
app_para');
n = db_row_count();
//msg(n);
for(id=0;id<n;id++)
{
db_select_area(0);
v1=db_res(0);
v2=db_res(1);
dbg('row '+ id + ' :' + v1+ '
, '+v2);
db_select_area(1);
db_run("select
note_info from app_para where para_id='" + v1 + "'");
n2 = db_row_count();
if(n2>0)
{
dbg('note_info
is ' + db_res(0));
};
db_select_area(0);
db_next();
};
return 1;
};
判断是否包含了cpu_s产品
int
main()
{
db_select_dbio("data");
if(db_seek("res_id","cpu_s"))
{
msg("cpu_s
finded");
};
db_select_dbio("-");
return 1;
};
下面的参数可以在打印控制脚本中加以引用:
本页记录数 cp_row_num
总页数 page_count
当前页码 page_id
当前记录号 record_id
记录总数 record_count
打印份号 print_copy_id
head区域高度 head_height
detail区域高度detail_height
summary区域高度summary_height
footer区域高度footer_height
title区域高度title_height
bottom区域高度bottom_height
本页小计 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;
};
单据日期格式的改变:
默认打印的参数为v_voucher_date,格式为 ‘yyyy-mm-dd’,现在需要打印为 ‘yyyy年mm月dd日’这种格式:
利用v_voucher_date_std进行格式转化,对应的对象类型设置为计算型,表达式设置如下即可:
fmt_date(v_voucher_date_std,"yyyy年mm月dd日")
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;
};
//在打印脚本的main函数里给Auto_Adjust_Detail_Height赋值为1即可。
//这种方式也可以直接在报表的基本属性里面进行设置
int main()
{
Auto_Adjust_Detail_Height = 1;
return 1;
};
int
func_cal_row_height()
{
if(strlen(d_res_name)>=16)
row_height_add=400;
return 1;
};
//下面例子中detail_height
为模版明细区域的高度,d_vr_res_info 为要判断高度的对象标识
//该例子可以直接作用于往来报表=》客户对账明细报表的动态调整
int func_cal_row_height()
{
int h;
h = print_cal_obj_height('d_vr_res_info');
if(h > detail_height)
row_height_add=h -
detail_height;
return 1;
};
系统提供了根据产品编号提取产品图片的脚本函数。物资单据打印时明细包含了 res_id 参数(产品编号),我们可以用get_res_pict来获得照片。
具体做法:在物资单据的打印模板里添加一个图片对象,在照片文件指定为 get_res_pict(res_id) 即可。
系统在打印物资单据时没有输出客户所在城市信息给打印模块,因此无法直接引用。但可以利用客户编号去获得客户所在城市信息(函数 get_eba_info),然后利用dt_get_name转换为中文。
脚本代码如下:
int main()
{
string city_id,city_name;
city_id=get_eba_info(v_eba_id,'city_id');
city_name = dt_get_name('addr_city',city_id);
v_eba_city=city_name;
return 1;
};
默认的工资单打印的时候明细里没有公司编号和名称,可以利用部门编号取出公司编号,再进一步获得公司名称。
先定义一个 gz_row_corp的字段,然后在func_gorow函数中进行赋值。
int func_gorow()
{
string r_corp_id;
r_corp_id=dt_get_ext('dept',m_dept_id,'company_id');
gz_row_corp = dt_get_name('emp_company',r_corp_id);
return 1;
};
请阅读内置函数里面的打印模板脚本函数。
说明:
颜色可以用0xaabbcc这种方式表示,6位16进制,和RGB的对照关系0xBBGGRR。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
nag_clear_base |
|
I |
通知系统开始导航自定义处理 |
|
|
nag_set_bg_color |
I |
I |
设置导航背景色 |
颜色值 |
|
nag_set_bg_img |
S |
I |
设置背景图 |
背景图文件名 |
|
nag_group_add |
IIS |
I |
添加一个分组 |
X坐标,Y坐标,组名字 |
|
nag_group_del |
S |
I |
删除一个分组 |
组名字 |
|
nag_group_set_img_file |
SS |
I |
设置分组的图标文件 |
组名字,图形文件名 |
|
nag_ico_add |
SIISS |
I |
添加一个图标功能 |
组名字,X坐标,Y坐标,功能名称,函数标识 |
|
nag_ico_del |
SS |
I |
删除一个图标功能 |
组名字,功能名称 |
|
nag_ico_set_img_file |
SSS |
I |
设置图标功能相关的图形文件 |
组名字,功能名称,图形文件名 |
|
nag_label_add |
SIISS |
I |
添加一个标签功能 |
组名字,X坐标,Y坐标,功能名称,函数标识 |
|
nag_label_del |
SS |
I |
删除一个标签功能 |
组名字,功能名称 |
|
nag_line |
SIIIIIIII |
I |
画线 |
组名称, x1,y1,x2,x2, 颜色,宽度,画线方式,是否画箭头(0不画,1画箭头指向目标,2双向画) |
画线方式:1:直线 2:弧线 3:直角连接 4:直接连接弯头光滑处理 |
|
|
|
|
|
|
|
|
|
|
|
|
系统支持的函数清单可以用下面的sql语句进行查询获得:
select * from mup_sys_func
int main()
{
gui_set_w("this",700);
gui_set_h("this",450);
nag_clear_base();
nag_set_bg_color(0xd1f2f3);
nag_group_add(100,60,'日常事务');
nag_ico_add('日常事务',400,100,'工作日志','Tbx_Gui_Notebook_Adm');
nag_ico_set_img_file('日常事务','工作日志','3.jpg');
nag_line('日常事务',200,200,300,300,0xa0f200,3,4,2);
nag_group_add(20,100,'更多功能');
nag_group_set_img_file('更多功能','2.ico');
nag_line('更多功能',110,200,300,100,0xa0f200,3,4,2);
return 1;
};
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_user_id |
|
S |
获取登陆的操作员编号 |
|
操作员编号 |
get_user_name |
|
S |
获取登陆的操作员姓名 |
|
操作员姓名 |
get_user_emp_id |
|
S |
获取登陆的操作员对应的员工工号 |
|
操作员工编号 |
is_user_in_group |
S |
I |
判断登录的操作员是否在指定组里 |
组名字 |
0不在 1在 |
get_voucher_file |
IS |
S |
获取单据的文件 本函数可供在打印模版里调用意打印单据中的图片。单据模版中单据流水标识为 v_voucher_id |
单据流水,文件类型 |
文件名 |
check_a_user_pwd |
SS |
I |
验证用户名和密码是否正确 |
用户名,密码 |
1 正确 0 失败 |
|
|
|
|
|
|
例子:取登陆用户编号并显示
string uid;
uid=get_user_id();
dbg(uid);
int v;
v = is_user_in_group(‘A分组’)
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_emp_pict |
S |
S |
获取员工对应的图片文件 |
员工编号 |
图片文件名 |
get_emp_info |
SS |
S |
获得员工指定信息 |
员工编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from emp where 1=2 |
列信息 |
get_emp_desc |
SS |
S |
获得员工指定描述信息 |
员工编号,描述信息类型 |
描述信息 |
get_emp_dept_id |
S |
S |
获得员工所在部门编号 |
员工编号 |
部门编号 |
get_emp_company_id |
S |
S |
获得员工所在公司编号 |
员工编号 |
公司编号 |
|
|
|
|
|
|
gen_emp_id |
SI |
S |
生成一个新的员工编号 |
前缀,后续编号长度 |
新的员工编号 |
例子:
string eid; eid = gen_emp_id(‘201112’,3); |
|||||
wage_get_degree_va |
SS |
N |
这个函数获取指定级别的某工资科目的值(该值在级别工资里预先定义好) |
级别,工资科目 |
以元为单位的值 |
|
|
|
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_res_pict |
S |
S |
获取产品对应的图片文件 |
产品编号 |
图片文件名 |
get_res_info |
SS |
S |
获得产品指定信息 |
产品编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from res where 1=2 |
列信息 |
get_res_desc |
SS |
S |
获得产品指定描述信息 |
产品编号,描述信息类型 |
描述信息 |
get_res_factor_num |
SS |
S |
获得产品折算数量 |
产品编号,标准数量 |
折算数量 |
get_res_num |
SS |
S |
获得产品当前存量 |
产品编号,仓库编号(设为*获取所有存量) |
数量 |
|
|
|
|
|
|
get_eba_info |
SS |
S |
获得客户指定信息 |
客户编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from eba where 1=2 |
列信息 |
get_eba_mem_card_info |
SS |
S |
获得会员卡指定信息 |
会员卡编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from eba_mem_card where 1=2 |
列信息 |
|
|
|
|
|
|
get_sup_info |
SS |
S |
获得供应商指定信息 |
供应商编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from sup where 1=2 |
列信息 |
|
|
|
|
|
|
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')
下面这部分函数只应用于统计报表的 rep_change函数里面,用于干预设定选择报表变化了的时候提取报表的数据条件。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
rep_para_set |
SS |
I |
设置参数值 |
变量名称,值 |
|
rep_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
rep_para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 确定 0 取消 |
rep_para_list |
|
I |
显示报表参数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
调用函数前传入的参数: change_col_id 明细当前的列记录号
change_row_id 明细当前的行记录号
该函数在新建单据的时候调用。
该函数在显示单据的时候调用。
该函数在增加一行物资的时候调用。
该函数在单元格里面的内容被修改了的时候调用,利用change_col变量可知道被修改的是哪个项目。
该函数在某些单据表头输入控件的内容被修改了的时候调用,利用change_obj变量可知道被修改的是哪个输入控件。
该函数在打印前调用,可以用can_print参数来决定本次打印是否允许。
相关参数:print_process_times 标识这是第几次打印。
该函数在打印后调用。
该函数在保存前调用。
该函数在审核后调用。
该函数可以被单据操作菜单下的《运行脚本adjust_row函数》功能触发,针对每条记录调用一次。主要用于需要的时候进行批量修改数据。
采购单据中的数量,能不能设置默认值为1?
单据脚本的init_row函数里面加一句 inp_num=1; 如下:
int
init_row()
{
inp_num=1;
return 1;
};
在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;
};
int
func_before_save()
{
int
id,r_num;
string
r_res_id,r_batch_no;
//can_save=1;
r_num = grid_row_num('MG_Item');
//msg(r_num);
for(id=1;id<r_num;id++)
{
r_res_id=grid_get_v('MG_Item','res_id',id);
r_batch_no=grid_get_v('MG_Item','batch_no',id);
//msg(r_res_id);
if(r_res_id=='') break;
if(r_batch_no=='' ||
r_batch_no=='-')
{
can_save=0;
warn('行'+ id + '批号不能为空');
warn(r_res_id);
return 0;
};
};
return 1;
};
在func_before_save ()里面加以处理。
int func_before_save()
{
string item_date,s_date;
item_date = grid_get_v('MG_Item','produce_date',1); //取出第一条明细的日期
s_date = std_inp_date(item_date); //格式化处理
gui_set_val('MDate_Main_Res_Produce_Date',s_date); //设置到主物资批次日期控件
return 1;
};
int create_voucher()
{
grid_mark_readonly('MG_Item','inp_price');
return 1;
};
int cell_change()
{
num v;
if(change_col=='discount')
{
v
= discount;
if(v<85)
{
discount=85;
};
};
return
1;
};
int obj_change()
{
string eba_id;
if(change_obj=='ComboBox_Ext_Eba_Id')
{
eba_id=gui_get_val(change_obj);
gui_set_val('Edit_Note',get_eba_info(eba_id,'note_info'));
};
return 1;
};
报表中的功能菜单下有一个记录管理列表脚本定义的功能。
问:我在采购订单扩展了合同编号,在报表里也定义了合同编号一栏,如何把数据显示出来。
假设合同编号属性编码统一定义为 hth。
在销售报表中定位到销售订单明细报表,然后在功能菜单下点记录管理列表脚本定义。点击初始化,修改show_row_ext函数如下,然后保存,再次点击提取报表即可。
int show_row_ext()
{
string s;
s='select attr_val from ebs_v_attr where voucher_id='+voucher_id+"
and attr_id='hth'";
db_run(s);
if(db_row_count()>0)
hth=db_res(0);
return 1;
};
数据脚本用来使用脚本查询数据并展示。
用于定义检索条件
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
def_lmt_dict |
SSS |
I |
定义字典型提取条件 |
参数标识、名称、字典标识 |
|
def_lmt_str |
SS |
I |
定义字符型提取条件 |
参数标识、名称 |
|
def_lmt_date |
SS |
I |
定义日期型提取条件 |
参数标识、名称 |
|
def_lmt_month |
SS |
I |
定义月份型提取条件 |
参数标识、名称 |
|
|
|
|
|
|
|
该函数在点击查询按钮的时候调用,用于执行脚本并显示结果。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
lmt_checked |
S |
I |
判断一个参数是否选择了 |
参数标识 |
1 选择了 0 没选择 |
lmt_val |
S |
S |
获得参数值 |
参数标识 |
参数值 |
|
|
|
|
|
|
|
|
|
|
|
|
下面例子中的最后num_dec_cut 函数对实际应发进行了四舍五入处理,保留一位小数。
应发合计 = 基本工资
+ 绩效奖金 + 岗位津贴
+ 其它补贴
个人所得税 = cal_tax(应发合计)
实际应发 = 应发合计
- 个人所得税
实际应发 = num_dec_cut(实际应发, 1);
问:工号的生成,可以自定义不?比如,现在是4位nnnn,我想定义成YYYY-nnn。
员工资料管理=》功能=》员工卡片编辑辅助脚本定义=》初始化
然后修改func_create_rec函数
int
func_create_rec()
{
string eid,yid;
yid = get_cur_year();
yid = yid + '-';
eid = gen_emp_id(yid,3);
gui_set_val('Edit_Emp_Id',eid);
return 1;
};
系统功能=》主窗口脚本定义=》初始化
然后修改main函数如下:
注意gui_set_w系列函数中 ‘this’ 参数标识当前窗口
int
main()
{
gui_set_w('this',1000);
gui_set_h('this',800);
gui_set_x('this',300);
gui_set_y('this',200);
return 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;
};
例二:
有什么办法能改“明细扩展X”这标签名吗?
int load_ext()
{
attr_enter();
//gui_list_all();
gui_set_text('chk_vr_item_ext_1','扩展1改了');
gui_set_text('chk_vr_item_ext_2','扩展2改了');
attr_leave();
return 1;
};
int show_row_ext()
{
return 1;
};
int main()
{
return 1;
};
麦兜儿:工分录入中想通过脚本做些判断,每个员工对应的部门可以获取到么 ?
int
func_f9_call()
{
//gui_list_all();
string emp_id,dept_id;
emp_id =
gui_get_val('ComboBox_Ext_Emp_Id');
msg(emp_id);
dept_id=dt_get_ext('emp',emp_id,'dept_id');
msg(dept_id)
return 1;
};
1、利用报表功能菜单下列表扩展字段定义扩展一列
净利润(标识设置为 net_profit)
2、打开报表功能菜单下记录管理列表脚步定义,点初始化,在show_row_ext函数中加入一句:net_profit = profit - item_fee_1
- item_fee_2; 保存就可以了。
int show_row_ext()
{
net_profit = profit - item_fee_1 -
item_fee_2;
return 1;
};