3.3.1 例一:销售发货单里面,当联系人变化时,从数据库查出该联系人的地址作为目的地址。
3.4.2 例一:设置报表中第2行以及res_id列的颜色和背景色
3.9.1 例一:非admin操作员主窗口中隐藏掉业务处理的菜单项目
3.9.2 例二:如何将"产品加工单"里面的"查看产品图片信息"加一个F10的快捷键?.
3.10.1 打印凭证的时候能不能固定打印一个型号的打印机,我经常转账套,好多次忘了设置,打印到了默认的激光机了?
4.3.5 利用Auto_Adjust_Detail_Height变量自动调整明细的行高度
4.3.8 利用print_cal_obj_height调整明细的行高度
7.3 例:用脚本实现物资单据中默认供应商、默认收支账户、默认业务部门、默认业务员的设置。
7.7 例:现款采购里,现金记帐科目可不可以根据不同的操作员绑定相应的科目?
7.9 例:组装单中,如何在保存前自动设置主物资批次日期为第一条明细记录的批次日期?
10.3 在员工管理界面列表中显示一级部门、二级部门、三级部门
10.4 工资单里怎么样让不同职位的人,按照不同的公式计算工资。
11.5 如何在销售按单据报表中体现 净利润 = 毛利润-(费用一 + 费用二)
系统包含了一个脚本引擎,用于增强系统的适应能力,使得使用者在一定程度上能对系统加以定制。
对于学过简单计算机语言的使用者掌握脚本语言并不困难。
了解脚本的应用场合能最大程度地发挥系统的能力,并带来效率的提升。
工资的计算公式定义(人力资源)
打印模板的控制
单据的控制(进销存)
界面的调整
权限的特殊控制
随着系统的扩展,将有更多的环节支持脚本。
点击菜单 系统功能=》主窗口脚本定义=》初始化,然后把下面的脚本复制进去,点击保存,然后点击执行,我们会看到一个弹出的提示窗口,然后主窗口的标题也变为“我的系统”了:
int main()
{
gui_set_text('this','我的系统');
msg('欢迎使用,' +
get_user_name());
return 1;
};
这个例子中,gui_set_text函数用于设置控件内容,第一个参数’this’代表调用的窗口。msg是弹出信息,get_user_name是函数,用于获取登录用户的名称。系统提供了很多函数,用于支持脚本开发。
系统在登陆后会自动调用 main_win_open 脚本里的main函数,也就是主窗口脚本,可以通过定义该脚本来实现一些想要的效果,比如隐藏菜单。删除以上内容,保存后重启系统,则不会再弹出信息窗口和修改标题。
解释执行器基本采用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 数值型 M 高精度数值
这部分函数可以用来显示调试信息,或者要求确认、弹出告警。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
dbg |
S |
|
显示变量。输出在信息窗口 |
要显示的变量 |
|
dbg_clear |
|
|
清空信息窗口的内容 |
|
|
msg |
S |
|
|
||
tip |
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 |
获取字典对应扩展信息 |
字典标识,字典取值编码,要返回的扩展列 |
扩展信息 |
dt_define |
SS |
I |
定义一个字典 |
字典标识,sql语句 |
|
例子: dt_define (“my_emp”,”select
emp_id,name from emp where emp_id like ‘1`’”); |
|||||
dt_refresh |
S |
I |
用于脚本直接修改了数据库后通知客户端刷新该数据字典 |
字典标识 |
|
例子:人力资源系统根据工号emp_id变量获取部门名称 dt_get_name("dept",dt_get_ext("emp",emp_id,"dept_id")) |
|||||
fen_to_yuan |
S |
S |
字符表达的分转换为元 |
字符表达的分 |
字符表达的元 |
one_cap |
SI |
S |
取得金额其中一位的大写 |
大写数值 |
大写表达 |
one_digit |
SI |
S |
取得金额其中一位的小写 |
字符表达的元,位数 |
小写表达 |
|
例子: one_digit("123.45",1) 返回 5 one_digit("123.45",3) 返回 3 one_digit("123.45",5) 返回 1 one_digit("123.45",6) 返回 |
||||
one_digit_ext |
SIS |
S |
取得金额其中一位的小写,如是最左边前面1位返回货币标识 |
字符表达的元,位数,货币标识 |
小写表达 |
|
例子: one_digit_ext("123.45",1,"$") 返回 5 one_digit_ext("123.45",3,"$") 返回 3 one_digit_ext("123.45",5,"$") 返回 1 one_digit_ext("123.45",6,"$") 返回 $ |
||||
money_cap |
S |
S |
取得金额的大写 |
金额 |
大写表达 |
num_skip_0 |
S |
S |
数值为0则返回空 否则返回原来的数。 这个函数主要用在模版打印。 |
数值 |
判断后的值 |
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 |
根据开始日期和相差天数计算结果日期 |
开始日期yyyymmdd,相差天数 |
结果日期 |
month_add |
SI |
S |
根据开始月份和相差月数计算结果月份 |
开始月份yyyymm,相差月数 |
结果月份 |
date_nl |
S |
S |
根据公历日期获得农历日期 |
公历日期yyyymmdd |
农历日期yyyymmdd |
date_gl |
S |
S |
根据农历日期获得公历日期 |
农历日期yyyymmdd |
公历日期yyyymmdd |
date_pick_year |
S |
I |
从标准日期中提取出年份 |
公历日期yyyymmdd |
年份 |
date_pick_month |
S |
I |
从标准日期中提取出月份 |
公历日期yyyymmdd |
月份 |
date_pick_day |
S |
I |
从标准日期中提取出日期 |
公历日期yyyymmdd |
日期 |
year_to_acc_cap |
I |
S |
年份转换为财务格式大写年 |
年 |
大写年,如:贰零壹贰 |
month_to_acc_cap |
I |
S |
月份转换为财务格式大写月 |
月 |
大写月,一至十月写为:零壹、零贰、零叁、零肆、零伍、 零陆、零柒、零捌、零玖、零壹拾月、 十一至十二月写为:壹拾壹月、壹拾贰月 |
day_to_acc_cap |
I |
S |
日期转换为财务格式大写日期 |
日1-31 |
大写日,一至十日要写为:零壹、零贰、零叁、零肆、零伍、零陆、零柒、零捌、零玖、零壹拾日 二十日写为零贰拾日、三十日写为零叁十日 |
date_to_acc_cap |
S |
S |
标准日期转换为财务格式大写日期 |
日期,格式为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小于 |
str_replace |
SSS |
S |
字符串中替换一个串 |
原始字符串,被替换的串,用来替换的串 |
替换后的串 |
例子: msg(str_replace('hello,world','or','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 |
整数转格式字符串 |
数值,格式 例子: fmt_int(12,"%03d")
就应该是 012 |
结果串 |
mod |
II |
I |
2个整数取余 |
数值1,数值2 |
结果 |
str_to_num_str |
S |
S |
去掉字符串中不是数值的字符,比如逗号 |
串 |
结果字符串 |
str_lst_to_sql_lst |
S |
S |
逗号分割的字符串转换为sql里面的字符串 |
字符串 如 “12,34,56” |
结果串 “(’12’,’34’,’56’)” |
|
|
|
|
|
|
call_str |
S |
I |
调用命令 |
命令,可以是文件或者执行程序 |
|
system |
S |
I |
执行外部程序 |
外部程序 |
|
shell |
S |
I |
执行外部程序 |
外部程序 |
|
|
|
|
|
|
|
call_user_dll |
SSS |
I |
调用用户自己开发的dll里面的函数 |
Dll文件,函数标识,参数 |
1 调用成功 0 调用失败 |
用户自定义dll函数有固定的格式 int 函数名(char
* para,char * ret); para为调用传入的参数,需要多个参数时表示为 “1,2,abcd,4”由函数内部进行分解 ret为预先分配的字符串存放空间,用于存放返回的结果,最多500字节,脚本里用get_user_dll_result
获取 脚本调用例子: int main() {
call_user_dll("pdu_app.dll","test_call_user_dll","aBc,123,dE"); msg(get_user_dll_result()); return 1; }; Dll中test_call_user_dll的实现 extern
"C" __declspec(dllexport) int test_call_user_dll(char *
para_id,char * ret_value) { Gui_App_Warn(para_id); strcpy(ret_value,"this is
from test_call_user_dll"); return 3; }; |
|||||
get_user_dll_result |
|
S |
获得调用用户自己开发的dll里面的函数返回的结果,这个函数在call_user_dll调用成功后才有效 |
|
结果 |
|
|
|
|
|
|
call_dll_func |
SS |
I |
调用dll里面的函数(这里的dll是系统自带的) |
Dll名,函数标识 |
|
call_func |
S |
I |
调用系统定义的函数 |
系统函数名 |
|
call_html_win |
S |
I |
打开一个html窗口 |
要打开的网页 |
|
exit |
|
I |
退出系统 |
|
|
|
|
|
|
|
|
get_home_path |
|
S |
获得软件执行目录 |
|
软件执行目录 |
get_ip |
|
S |
获取本机ip地址 |
|
Ip地址 |
get_host_name |
|
S |
获取本机主机名 |
|
本机主机名 |
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边空格 |
串 |
结果字符串 |
|
|
|
|
|
|
file_unlink |
S |
I |
删除文件 |
文件名 |
成功1,失败0 |
file_write |
SS |
I |
写入文件 |
文件名,内容 |
成功1,失败0 |
string c; file_unlink('d:\1.txt'); file_write('d:\1.txt','abcde'+nl()); c='123'+nl()+'456'; file_write('d:\1.txt',c); |
|||||
|
|
|
|
|
|
这组函数主要用于在脚本里设定获取或者修改当前窗口输入控件的内容。这组函数对于修改窗口里面的项目内容非常有用。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
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_comb_to_db |
S |
|
复制下拉列表的内容到当前数据库访问组件,成功后可以用db_row_count、db_res等函数访问 |
控件的名称 |
1 成功 0 失败 |
gui_db_to_comb |
S |
|
把当前数据库访问组件的内容设置到下拉列表 |
控件的名称 |
1 成功 0 失败 |
例子: db_run('select emp_id,name from
app_emp');
gui_db_to_comb("ComboBox_Culture_Degree") |
|||||
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_hint |
SS |
|
设置指定控件的提示信息 |
控件的名称,要设置的提示信息 |
|
gui_replace_str |
SSS |
|
替换指定控件标签中的部分文字 |
控件的名称,要替换的文字,新的文字 |
|
|
|
|
|
|
|
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’) |
|
gui_trigger_click |
S |
I |
触发一个控件鼠标点击的处理事件 |
控件的名称,控件可以是按钮、标签 Exam: gui_trigger_click (‘Button_Create’) |
|
gui_trigger_exit |
S |
I |
触发一个控件失去焦点的处理事件 |
控件的名称,控件可以是按钮、标签 Exam: gui_trigger_click (‘Button_Create’) |
|
|
|
|
|
|
|
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;
};
功能菜单=》记录管理列表脚本:
int init_win()
{
//gui_list_all();
gui_set_text('CheckBox_Service_Id','营销区改');
return 1;
};
退出重进即可看到文本内容发生了变化。
表格在很多地方出现,如单据的明细、报表数据、管理界面中的列表等,下面这组函数用于操作表格。可以增加列、获取单元格的数据、设置单元格的数据、调整单元格的位置和宽度。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
下面这组函数用于操作表格 |
|||||
grid_list_col |
S |
|
显示出表格所有列名 |
表格的名称 |
|
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_insert_before |
SI |
I |
在指定行前插入一行记录 |
表格的名称,行号 |
成功1 失败0 |
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_get_col_name |
SI |
S |
获得指定列编号的列名 |
表格的名称,列编号 |
字段名 |
grid_mark_sum |
SS |
I |
标记一个列显示合计数 |
表格的名称,列名 |
|
grid_unmark_sum |
SS |
I |
设置一个列不显示合计数 |
表格的名称,列名 |
|
grid_get_col_sum |
SS |
S |
获得一列的合计值 |
表格的名称,列名 |
合计 |
grid_enable_sort |
S |
I |
允许点击标题排序 |
表格的名称 |
|
grid_disable_sort |
S |
I |
禁止点击标题排序 |
表格的名称 |
|
grid_get_sort_flag |
S |
I |
查询是否允许点击标题排序 |
表格的名称,列名 |
1 允许 0 不允许 |
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 |
设置单元格背景颜色 |
表格的名称、列名、行号、背景颜色 |
|
grid_color_clear |
S |
I |
清除表格颜色信息(本函数主要用于报表中,此时表格名称为MG) |
表格的名称 |
|
grid_seek |
SSS |
I |
表格中从头开始查找某列值匹配的行 |
表格的名称、列名、要查找的值 |
1:找到并定位到该行。 0:未找到 |
grid_seek_from |
SISS |
I |
表格中从指定行开始查找某列值匹配的行 |
表格的名称、行号、列名、要查找的值 |
1:找到并定位到该行。 0:未找到 |
grid_trigger_change |
SSI |
I |
调用表格内容修改后的事件处理 |
表格的名称、列名、行号(-1表示当前行) |
|
|
|
||||
|
|
||||
|
|
单据中明细表格: MG_Item
物资单据单据中主物资表格: MG_Main_Res
报表中数据表格: 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_def_dict_multi |
SSS |
I |
定义字典型提取条件,允许多选 |
参数标识、名称、字典标识 |
|
inp_def_dict_multi_set |
SSS |
I |
定义字典型提取条件,允许多选 |
参数标识、名称、字典标识 |
|
inp_def_dict_multi_set和inp_def_dict_multi表现一样,但数据处理方式不一样: inp_def_dict_multi_se用inp_get_val获取的是一个编号,实际的列表可以用 (select key_id from app_tmp_key_set where
set_id = 编号) 获得,这种方式适用于较多选项的选择,因为选项很多的时候直接在sql里面组合的方式会导致sql语句过长而出错,而用编号方式则不会,比如 select name from emp where emp_id in (select key_id from app_tmp_key_set
where set_id = 12) |
|||||
inp_select 暂时不用 |
|
|
选择变量组 |
变量组标识 |
|
inp_para |
|
|
弹出窗口,输入相关参数 |
|
1 点击了确定 0 点击了取消 |
inp_para_set_title |
S |
|
设置参数输入窗口的标题 |
标题 |
|
|
|
|
|
|
|
例子:
inp_clear();
inp_def_dict('msex','性别', 'sex');
inp_def_dict_multi ('msex_multi','性别', 'sex');
inp_def_string('mnum','数量');
inp_def_date('mdate','日期');
inp_para();
num inp_num;
inp_num=inp_get_val('mnum')
string
msex_multi;
msex_multi=inp_get_val('msex_multi')
msg(msex_multi);
这部分函数可以用来访问参数。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
下面这组函数是局部的,只能访问本次脚本调用涉及的参数,调用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 没有 |
|
|
|
|
|
|
下面这组函数是全局的,用于支持存储或提取操作员自定义的参数。 |
|||||
user_db_para_save |
SS |
I |
设置参数值,存储到数据库,系统重新登录后参数还在 |
变量名称,值 |
|
user_db_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
|
|
|
|
|
|
下面这组函数是全局的,用于支持设置访问公共的参数。比如企业名称等 |
|||||
pub_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
pub_para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 定义了 0 没有 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
这组函数主要用于在脚本里访问excel和wps文件。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
xls_open_book |
S |
|
打开文件 |
文件名 |
成功1 失败0 |
xls_create_book |
S |
S |
创建文件 |
类型或者文件名 xls_create_book(‘xls’)
创建excel。 xls_create_book(‘et’) 创建wps。 |
成功1 失败0 |
xls_save_to |
S |
I |
另存为 |
文件名 |
成功1 失败0 |
xls_save |
S |
I |
保存 |
|
成功1 失败0 |
xls_close_book |
|
I |
关闭文件 |
|
|
xls_get_sheet_num |
|
I |
获取工作表数量 |
|
数量 |
xls_create_sheet |
|
I |
增加工作表 |
|
|
xls_select_sheet_by_title |
S |
I |
根据工作表标题定位 |
标题 |
|
xls_select_sheet_by_id |
I |
I |
根据编号定位工作表 |
编号,从1开始,1对应第一页 |
|
xls_select_sheet_by_id_ext |
I |
I |
根据编号定位工作表 |
编号,从1开始,1对应第一页,如果编号超出最大范围则自动增加一页 |
|
|
|
|
|
|
|
xls_get_sheet_title |
|
S |
获取工作表名称 |
|
名称 |
xls_set_sheet_title |
S |
I |
设置工作表名称 |
标题 |
|
xls_sheet_to_dbio |
|
I |
当前工作表内容保存到数据库访问对象 |
|
|
xls_dbio_to_sheet |
|
I |
数据库访问对象的内容写入工作表 |
|
|
xls_write_cell |
IIS |
I |
写单元格内容 |
行、列、内容 |
|
xls_read_cell |
II |
S |
读取单元格内容 |
行、列 |
内容 |
xls_set_col_width |
II |
I |
设置列宽度 |
列编号,宽度 |
|
xls_get_col_width |
I |
I |
获取列宽度 |
列编号 |
列宽度 |
|
|
|
|
|
|
|
|
|
|
|
|
int main()
{
xls_open_book("e:\11.xls");
msg(xls_get_sheet_num());
xls_select_sheet_by_id(2);
xls_sheet_to_dbio();
db_show();
xls_close_book();
return 1;
};
int main()
{
xls_create_book("xls");
xls_select_sheet_by_id_ext(1);
db_run('select * from app_emp');
db_show();
xls_dbio_to_sheet();
xls_set_sheet_title("员工数据");
xls_save_to("d:\app_emp.xls");
xls_close_book();
return 1;
};
int main()
{
xls_open_book("e:\11.xls");
xls_select_sheet_by_id(2);
msg(xls_get_sheet_title());
msg(xls_read_cell(2,3));
xls_write_cell(5,6,'aaa1');
xls_write_cell(6,5,'bbb2');
xls_save();
xls_close_book();
return 1;
};
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
v_mark_sum |
S |
|
标记一个列显示合计数(这个函数主要用于支持单据扩展的列显示合计) |
列标识 |
|
v_mark_col_readonly |
SI |
|
标记一个列是否只读 |
列标识,只读标志(只读为1,否则为0) |
|
v_set_print_format_id |
S |
|
指定打印采用的打印模版编号 |
打印模版编号 |
|
v_print_with_fmt |
S |
I |
用指定的模版打印 |
模版编号 |
成功:1 失败:0 |
v_print_to |
SS |
I |
向指定的打印机用指定的模版打印 |
打印机名称,模版编号 |
成功:1 失败:0 |
vr_add_res 仅用于进销存商贸物资单据 |
SS |
|
增加物资 这个函数仅在物资单据中有效 |
产品编号,数量 |
|
vr_add_res_ext 仅用于进销存商贸物资单据 |
SSS |
|
增加物资 |
产品编号,数量,设置相关列值的串(可以设置多个,格式为 列1:值1; 列2:值2;…) |
|
例子:vr_add_res_ext('XXJ','12','batch_no:abc;tax_rate:11.2;vr_item_ext_1:ccde'); |
|||||
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; }; 注意上面是直接隐藏ScrollBox_开头的控件,而不是Edit或者其他开头的控件。 |
|||||
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_disable_item |
S |
|
使一个项目不可以点击 |
菜单项目名 |
|
|||||
menu_enable_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_set_text进行设置 menu_set_text('tbx','秘书功能&S'); |
||||||||||
menu_set_hint |
SS |
|
设置一个菜单的提示信息 |
菜单名字,提示信息 |
|
|||||
例子: menu_set_hint
('tbx_Tbx_Gui_Plan_Adm', '点下去执行计划管理'); |
||||||||||
menu_trigger_click |
S |
I |
触发执行一个菜单的功能 |
菜单名称 |
|
|||||
例子: menu_trigger_click
('tbx_Tbx_Gui_Plan_Adm'); |
||||||||||
menu_use |
S |
|
指定要操作的菜单 |
菜单名字 |
|
|||||
menu_list |
|
|
显示所有的菜单名字 |
|
|
|||||
系统功能的主窗口脚本里面设置下面的代码,点执行即可(下次登录系统会自动执行):
int main()
{
string uid;
uid=get_user_id();
//menu_list();
//menu_list_item();
if(uid!='admin')
menu_hide_item('inv_buss');
return 1;
};
操作=》参数配置=》脚本定义,然后把下面的脚本复制进去保存,新增单据就可以了。
int create_voucher()
{
menu_set_hot_key('N_View_Res_Info','F10',0,0);
return 1;
};
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
print_get_cp_sum |
S |
|
获取指定字段当前打印页的合计(本函数只能在打印脚本里使用) |
列标识 |
合计 |
print_get_sum |
S |
|
获取指定字段所有记录的合计(本函数只能在打印脚本里使用) |
列标识 |
合计 |
get_pub_pict |
S |
|
获取公共图片 |
图片标示 |
|
select_printer |
S |
|
设置默认的打印机 |
打印机名称 |
|
get_printer_name |
|
S |
获取默认的打印机名称 |
|
打印机名称 |
printer_set_paper_size |
II |
I |
设置打印纸张宽度和高度长度 |
宽度(0.1mm为单位),长度 |
|
printer_set_paper_id_ext |
II |
I |
设置纸张类型,和方向 |
纸张类型编码(见下面的说明),是否横向打印 比如设置为A4横向 printer_set_paper_id_ext(9,1); |
|
printer_set_paper_id |
I |
I |
设置纸张类型 |
纸张类型编码(见下面的说明) 比如设置为A4 printer_set_paper_id(9); |
|
1 /* Letter 8 1/2 x 11 in
*/ 2
/* Letter Small 8 1/2 x 11 in
*/ 3
/* Tabloid 11 x 17 in
*/ 4
/* Ledger 17 x 11 in
*/ 5
/* Legal 8 1/2 x 14 in
*/ 6
/* Statement 5 1/2 x 8 1/2 in
*/ 7
/* Executive 7 1/4 x 10 1/2 in */ 8
/* A3 297 x 420 mm
*/ 9
/* A4 210 x 297 mm
*/ 10 /* A4 Small 210 x 297 mm
*/ 11 /* A5 148 x 210 mm
*/ 12 /* B4 (JIS) 250 x 354
*/ 13 /* B5 (JIS) 182 x 257 mm
*/ 14 /* Folio 8 1/2 x 13 in
*/ 15 /* Quarto 215 x 275 mm
*/ 16 /* 10x14 in
*/ 17 /* 11x17 in
*/ 18 /* Note 8 1/2 x 11 in
*/ 19 /* Envelope #9 3 7/8 x 8 7/8
*/ 20 /* Envelope #10 4 1/8 x 9 1/2
*/ 21 /* Envelope #11 4 1/2 x 10 3/8 */ 22 /* Envelope #12 4 \276 x 11
*/ 23 /* Envelope #14 5 x 11 1/2
*/ 24 /* C size sheet
*/ 25 /* D size sheet
*/ 26 /* E size sheet
*/ 27 /* Envelope DL 110 x 220mm
*/ 28 /* Envelope C5 162 x 229 mm
*/ 29 /* Envelope C3 324 x 458 mm
*/ 30 /* Envelope C4 229 x 324 mm
*/ 31 /* Envelope C6 114 x 162 mm
*/ 32 /* Envelope C65 114 x 229 mm
*/ 33 /* Envelope B4 250 x 353 mm
*/ 34 /* Envelope B5 176 x 250 mm
*/ 35 /* Envelope B6 176 x 125 mm
*/ 36 /* Envelope 110 x 230 mm
*/ 37 /* Envelope Monarch 3.875 x 7.5
in */ 38 /* 6 3/4 Envelope 3 5/8 x 6 1/2
in */ 39 /* US Std Fanfold 14 7/8 x 11 in */ 40 /* German Std Fanfold 8 1/2 x 12
in */ 41 /* German Legal Fanfold 8 1/2 x 13 in
*/ 42 /* B4 (ISO) 250 x 353 mm
*/ 43 /* Japanese Postcard 100 x 148 mm */ 44 /* 9 x 11 in
*/ 45 /* 10 x 11 in
*/ 46 /* 15 x 11 in
*/ 47 /* Envelope Invite 220 x 220 mm */ 48 /* RESERVED--DO NOT USE
*/ 49 /* RESERVED--DO NOT USE
*/ 50 /* Letter Extra 9 \275 x 12 in */ 51 /* Legal Extra 9 \275 x 15 in
*/ 52 /* Tabloid Extra 11.69 x 18 in */ 53 /* A4 Extra 9.27 x 12.69 in
*/ 54 /* Letter Transverse 8 \275 x 11
in */ 55 /* A4 Transverse 210 x 297 mm
*/ 56 /* Letter Extra Transverse
9\275 x 12 in */ 57 /* SuperA/SuperA/A4 227 x 356 mm */ 58 /* SuperB/SuperB/A3 305 x 487 mm */ 59 /* Letter Plus 8.5 x 12.69 in
*/ 60 /* A4 Plus 210 x 330 mm
*/ 61 /* A5 Transverse 148 x 210 mm
*/ 62 /* B5 (JIS) Transverse 182 x 257
mm */ 63 /* A3 Extra 322 x 445 mm
*/ 64 /* A5 Extra 174 x 235 mm
*/ 65 /* B5 (ISO) Extra 201 x 276 mm */ 66 /* A2 420 x 594 mm
*/ 67 /* A3 Transverse 297 x 420 mm */ 68 /* A3 Extra Transverse 322 x 445
mm */ 69 /* Japanese Double
Postcard 200 x 148 mm */ 70 /* A6 105 x 148 mm
*/ 71 /* Japanese Envelope Kaku #2 */ 72 /* Japanese Envelope Kaku #3 */ 73 /* Japanese Envelope Chou #3 */ 74 /* Japanese Envelope Chou #4 */ 75 /* Letter Rotated 11 x 8 1/2 11 in */ 76 /* A3 Rotated 420 x 297 mm
*/ 77 /* A4 Rotated 297 x 210 mm
*/ 78 /* A5 Rotated 210 x 148 mm
*/ 79 /* B4 (JIS) Rotated 364 x 257 mm */ 80 /* B5 (JIS) Rotated 257 x 182 mm */ 81 /* Japanese
Postcard Rotated 148 x 100 mm */ 82 /* Double Japanese
Postcard Rotated 148 x 200 mm */ 83 /* A6 Rotated 148 x 105 mm
*/ 84 /* Japanese Envelope Kaku #2 Rotated
*/ 85 /* Japanese Envelope Kaku #3 Rotated
*/ 86 /* Japanese Envelope Chou #3 Rotated
*/ 87 /* Japanese Envelope Chou #4 Rotated
*/ 88 /* B6 (JIS) 128 x 182 mm
*/ 89 /* B6 (JIS) Rotated 182 x 128 mm */ 90 /* 12 x 11 in
*/ 91 /* Japanese Envelope You #4 */ 92 /* Japanese Envelope You #4 Rotated*/ 93 /* PRC 16K 146 x 215 mm
*/ 94 /* PRC 32K 97 x 151 mm
*/ 95 /* PRC 32K(Big) 97 x 151 mm */ 96 /* PRC Envelope #1 102 x 165 mm */ 97 /* PRC Envelope #2 102 x 176 mm */ 98 /* PRC Envelope #3 125 x 176 mm */ 99 /* PRC Envelope #4 110 x 208 mm */ 100 /* PRC Envelope #5
110 x 220 mm */ 101 /* PRC Envelope #6
120 x 230 mm */ 102 /* PRC Envelope #7
160 x 230 mm */ 103 /* PRC Envelope #8
120 x 309 mm */ 104 /* PRC Envelope #9
229 x 324 mm */ 105 /* PRC Envelope
#10 324 x 458 mm */ 106 /* PRC 16K
Rotated
*/ 107 /* PRC 32K
Rotated
*/ 108 /* PRC 32K(Big)
Rotated
*/ 109 /* PRC Envelope #1
Rotated 165 x 102 mm */ 110 /* PRC Envelope #2
Rotated 176 x 102 mm */ 111 /* PRC Envelope #3
Rotated 176 x 125 mm */ 112 /* PRC Envelope #4
Rotated 208 x 110 mm */ 113 /* PRC Envelope #5
Rotated 220 x 110 mm */ 114 /* PRC Envelope #6
Rotated 230 x 120 mm */ 115 /* PRC Envelope #7
Rotated 230 x 160 mm */ 116 /* PRC Envelope #8
Rotated 309 x 120 mm */ 117 /* PRC Envelope #9
Rotated 324 x 229 mm */ 118 /* PRC Envelope
#10 Rotated 458 x 324 mm */ |
|||||
print_cal_obj_height |
S |
I |
计算完整打印某单元格需要的高度(宽度按照模版设计) |
对象标识 |
高度 |
|
|
|
|
|
|
可以,在凭证的单据脚本里按照下面的例子设置默认打印机即可:
int func_before_print()
{
select_printer('Samsung SCX-4300 Series');
//can_print=1;
return 1;
};
这组函数主要用于访问数据库操作。
只有db_run才真正访问数据库,其他的函数都是对结果集合的操作,只影响内存数据,不实际修改数据库里的数据。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
db_run |
S |
I |
执行一个sql语句 |
要执行的语句 |
无 |
db_run_query |
S |
I |
执行一个包含结果集的存储过程。 |
要执行的存储过程 |
|
db_run只有执行select语句才会返回结果集合,执行update、存储过程等语句的时候不返回结果集合。db_run_query则强制返回结果结合,db_run_query不应用来执行update等不包含结果集合的sql。 例子: db_run_query(‘sp_helpdb’);
//适用于sql server |
|||||
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_res_ext |
S |
S |
获得指定列名的值 |
列名 |
字段值 |
db_row_id |
|
I |
获取当前的行编号 |
|
当前的行编号 |
db_swap_row |
II |
I |
交换2行的内容 |
第1行编号,第2行编号 |
成功1 失败0 |
|
|
|
|
|
|
db_add_row |
|
I |
添加一行记录 |
无 |
无 |
db_insert_before |
I |
I |
在指定行前插入一行记录 |
行号 |
成功1 失败0 |
db_del_row |
|
I |
删除当前指向的记录 |
无 |
无 |
db_set_value |
IS |
I |
设置当前行指定列的值 |
列号,值 |
无 |
db_set_value_ext |
SS |
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_sort之前先调用db_set_main_sort_id, 如果有多个排序条件则接着调用db_add_sort_id,最后调用db_sort |
|||||
db_sort_ext |
S |
I |
对字段进行排序 |
字段名列表,可以多个,用逗号分隔,如果某个字段要用倒序,则在其后面加desc |
|
调用db_sort_ext后不需要再调用db_sort,调用例子
db_sort_ext(‘res_id,num’); 调用例子 db_sort_ext(‘res_id,num desc’); 完整的例子: db_run('select res_id,num from edt_res'); db_sort_ext('res_id,num desc'); db_show(); |
|||||
db_have_error |
|
I |
是否有sql错误 |
无 |
有错1,无错0 |
db_field_name |
I |
S |
取字段名 |
字段编号 |
字段名 |
db_set_table_name |
S |
I |
设置表的名称 |
表名称 |
无 |
db_set_field_count |
I |
I |
设置字段数 |
字段数 |
无 |
db_set_field_name |
IS |
I |
设置字段名称 |
编号,字段名 |
无 |
db_set_field_type |
IS |
I |
设置字段类型 |
编号,字段类型(‘I’,’S’) |
无 |
db_set_field_caption |
IS |
I |
设置字段标题 |
编号,字段标题 |
无 |
db_set_field_width |
SI |
I |
设置字段宽度 |
编号,显示宽度 |
无 |
db_set_field_info |
ISSI |
I |
设置字段名称、标题、宽度 |
编号,字段名,字段标题,显示宽度 |
无 |
db_set_field_sum_flag |
S |
I |
设置字段显示合计标志 |
字段名 |
|
db_seek |
SS… |
I |
根据指定字段和字段的值查找记录 |
是否找到 |
找到了返回1 未找到返回0 |
db_show |
S |
I |
在界面上显示数据 |
窗口标题 |
|
db_show_and_select |
S |
I |
在界面上显示数据并选择当前行。数据只显示2列,一般第一列为编码,第2列为名称 |
窗口标题 |
1选择 此时可以用db_res获得当前行的相关信息 0取消 |
例子: db_run('select * from app_para'); if(db_show_and_select('test select')) msg(db_res(0)); |
|||||
db_show_and_select_m |
S |
I |
在界面上显示数据并选择多行。数据只显示2列,一般第一列为编码,第2列为名称 选择成功后可以调用db_select_m_copy_res复制选择的结果到当前数据库工作区 |
窗口标题 |
1选择 0取消 |
db_select_m_copy_res |
|
I |
复制db_show_and_select_m选择的数据到当前工作区。然后可以db_res等函数进行访问 |
|
|
例子: db_select_area(0); db_run('select * from app_para'); if(db_show_and_select_m('test
select')) { db_select_area(1); db_select_m_copy_res(); db_show(); }; db_select_area(0); db_show(); |
|||||
db_select_area |
I |
I |
选择一个工作区 |
工作区0-5 |
无 |
db_select_dbio |
S |
I |
根据名称选择数据内容 |
数据集合的名称 默认临时集合的名称为- 打印时明细数据的集合名称为data |
|
db_serv_type |
|
S |
获取数据库类型 |
|
数据库类型 |
db_temp |
|
I |
切换到默认的数据访问区 |
db_select_dbio使用完后调用 |
|
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产品
注意用 db_select_dbio("data");
切换操作数据集合到报表数据,调用db_select_dbio("-"); 再切换回普通操作数据
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为字段名
打印预览的时候可看到打印时传入的其它参数清单(包括一些合计大写)。
具体打印的时候(在脚本事件 before_draw_obj 里):
pp_x(横向偏移)
pp_y(纵向偏移)
pp_w(宽度)
pp_h(高度)
pp_font_size(字体大小)
pp_font_color(字体颜色)
pp_fill_color(背景色)参数
可以修改以上几个参数来控制打印的位置、颜色和大小。
该函数在打印预览的时候调用。
该函数在预览指定页的时候调用。
该函数在定位一行的时候调用。
这个函数在打印以下空白的时候用到,可以指定一个或多个字段内容为 以下空白,直接做一个赋值语句,如res_name='以下空白',以下空白只有在固定行数打印的情况下才有效。
该函数在打印某个对象前调用,可在函数里通过to_draw_obj知道接下来要打印哪个对象。
系统预设值 pp_x(横向偏移),pp_y(纵向偏移),pp_w(宽度),pp_h(高度),pp_font_size(字体大小),pp_font_color(字体颜色),pp_fill_color(背景色)参数,可以修改以上几个参数来控制打印的位置、颜色和大小。
该函数在计算明细行高的时候调用,可以用来自动调整行高。
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;
};
int
before_draw_obj()
{
if(to_draw_obj=='res_id')
pp_fill_color=0x0000ff;
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;
};
表达式中的内容如下:
fmt_date(date_add(std_inp_date(produce_date),quality_days),"yyyy-mm-dd")
表达式中的内容为:get_res_desc(res_id,"A")
函数中的A为产品描述信息数据字典类型编码。
默认的工资单打印的时候明细里没有公司编号和名称,可以利用部门编号取出公司编号,再进一步获得公司名称。
先定义一个 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 |
获取登陆的操作员对应的员工工号 (这个工号是在操作员定义里面设置的) |
|
操作员工编号 |
get_user_dept_id |
|
S |
获取登陆的操作员对应的部门编号 (系统根据操作员定义里面设置的工号,再从业务员定义里找出所在的部门编号) |
|
操作员工编号 |
sms_send |
SSSS |
I |
保存短信到发送列表 |
发送工号,目标号码,短信内容,类别码(在秘书管理的数据字典里可以定义,最多8位编码) |
成功1 失败0 |
sms_send('admin','13805782222','adskjdskjdsjdskj11111111122222222222233','test'); |
|||||
is_user_in_group |
S |
I |
判断登录的操作员是否在指定组里 |
组名字 |
0不在 1在 |
get_voucher_file |
IS |
S |
获取单据的文件 本函数可供在打印模版里调用于打印单据中的图片。单据模版中单据流水标识为 v_voucher_id |
单据流水,文件类型编码 |
文件名 |
get_voucher_attr |
IS |
S |
获取单据的扩展属性 |
单据流水,扩展属性编码 |
属性值 |
check_a_user_pwd |
SS |
I |
验证用户名和密码是否正确 |
用户名,密码 |
1 正确 0 失败 |
|
|
|
|
|
|
have_role |
S |
I |
判断登录的操作员是否拥有指定角色 |
角色编号 |
1 有 0 无 |
have_any_priv |
S |
I |
判断登录的操作员是否拥有某对象的权限(可以是读、执行等任一) |
对象编号 |
1 有 0 无 |
if(have_any_priv(‘u0002’))
msg(‘have some priv to of u0002’); |
|||||
have_exec_priv |
S |
I |
判断登录的操作员是否拥有某对象的执行权限 |
对象编号 |
1 有 0 无 |
if(have_exec_priv(‘u0002’))
msg(‘have priv to exec u0002’); |
|||||
send_msg |
SS |
I |
发送消息给操作员 |
目标操作员,消息内容 |
|
send_msg_and_obj |
SSSS |
I |
发送一个带对象的消息给操作员,对方收到后可以点击打开相关的对象 |
目标操作员,消息内容,对象类型,对象编号 对象类型如下: voucher 表示是一个单据,在单据脚本中对象编号的标识为v_voucher_id |
|
比如在单据的脚本中,可以在保存单据后时候(func_after_save)发送一个消息给相关的人员: send_msg_and_obj(‘审核员’, ‘单据’+ v_voucher_no+’来了’, ‘voucher’, v_voucher_id); |
|||||
view_app_obj |
SS |
I |
查看业务对象 |
对象类型,对象辨识 |
|
view_voucher |
S |
I |
查看单据 |
单据流水 |
|
view_voucher_by_no |
S |
I |
根据编号查看单据 |
单据编号 |
|
|
|
|
|
|
|
例子:取登陆用户编号并显示
string uid;
uid=get_user_id();
dbg(uid);
int v;
v = is_user_in_group(‘A分组’)
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_emp_pict |
S |
S |
获取员工对应的图片文件 |
员工编号 |
图片文件名 |
get_emp_file |
SS |
S |
获取员工指定类型的文件 |
员工编号,指定类型编号 |
文件名 |
get_emp_file 和get_emp_pict类似,get_emp_pict(emp_id)和get_emp_file(emp_id,”pict”)效果一样 |
|||||
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_val |
SS |
N |
这个函数获取指定级别的某工资科目的值(该值在级别工资里预先定义好) |
级别,工资科目 |
以元为单位的值 |
定义级别工资主要是为了供工资计算公式里引用。在工资计算里可以利用该函数结合员工资料自动来获取级别工资数据。 |
|||||
wage_get_emp_subject_data |
SSS |
N |
获取指定员工某月某工资科目的数值 |
员工编号、月份、工资科目 |
数值 |
emp_contract_push_para |
SS |
N |
人事合同中生成合同文档的时候添加自定义参数(在脚本func_exp_doc函数中调用) |
参数标识、参数值 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_res_pict |
S |
S |
获取产品对应的图片文件 |
产品编号 |
图片文件名 |
get_res_file |
SS |
S |
获取产品指定类型的文件 |
产品编号,类型编号 |
文件名 |
get_res_file 和get_res_pict类似,get_res_pict(res_id)和get_res_file(res_id,”pict”)效果一样 |
|||||
get_res_info |
SS |
S |
获得产品指定信息 |
产品编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from res where 1=2 |
列信息 |
get_res_desc |
SS |
S |
获得产品指定描述信息 |
产品编号,描述信息类型 |
描述信息 |
get_res_attr_title |
SS |
S |
获得产品实体属性标题 |
产品编号,属性编号 |
属性标题 |
get_res_attr_default_val |
SS |
S |
获得产品实体属性默认值 |
产品编号,属性编号 |
属性默认值 |
get_res_factor_num |
SS |
S |
获得产品折算数量 |
产品编号,标准数量 |
折算数量 |
get_res_num |
SS |
S |
获得产品当前存量 |
产品编号,仓库编号(设为*获取所有存量) |
数量 |
get_res_ass_num |
SS |
S |
获得产品当前辅助存量 |
产品编号,仓库编号(设为*获取所有存量) |
辅助数量 |
get_res_num_vir |
SS |
S |
获得产品当前虚拟存量 |
产品编号,虚拟仓库编号(设为*获取所有存量) |
数量 |
get_res_ass_num_vir |
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 |
获取系统中指定产品在某企业内的编码 |
产品编号,企业编码 |
指定产品在某企业内的编码 |
get_res_eba_map_name |
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')
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
get_asset_pict |
S |
S |
获取资产对应的图片文件 |
资产编号 |
图片文件名 |
get_asset_file |
SS |
S |
获取资产指定类型的文件 |
资产编号,指定类型编号 |
文件名 |
get_asset_file 和get_asset_pict类似,get_asset_pict(asset_id)和get_asset_file(asset
_id,’pict’)效果一样 |
|||||
get_asset_desc |
SS |
S |
获得资产指定描述信息 |
资产编号,描述信息类型 |
描述信息 |
get_asset_info |
SS |
S |
获得资产指定信息 |
资产编号,列名 哪些列名可以通过在sql工具里面执行下面的语句看到: select * from asset where 1=2 列信息 |
指定信息s |
|
|
|
|
|
|
下面这rep_para_xxx这部分函数只应用于统计报表的 rep_change函数里面,用于干预设定选择报表变化了的时候提取报表的数据条件。
rep_add_xxx,rep_del_xxx这部分函数用于报表分组脚本里,用来重新组织报表的目录结构。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
rep_para_set |
SS |
I |
设置参数值 |
变量名称,值 |
|
rep_para_get |
S |
S |
获取参数值 |
变量名称 |
值 |
rep_para_defined |
S |
I |
判断参数是否定义了 |
要显示的内容 |
1 确定 0 取消 |
rep_para_list |
|
I |
显示报表参数 |
|
|
|
|
|
|
|
|
rep_add_group |
S |
I |
界面上增加一个报表分组 例:rep_add_group("hello"); |
分组名称 |
|
rep_add_rep |
SSS |
I |
分组下面增加一个报表 例: rep_add_rep("hello","Eba_007","客户报表1"); |
分组名称,报表编号,报表名称 |
|
rep_add_csp_rep |
SSS |
I |
分组下面增加一个自定义脚本报表 例: rep_add_csp_rep("hello","ds_001","脚本报表1"); |
分组名称,脚本报表编号,报表名称 |
|
rep_del_group |
S |
I |
界面上删除一个报表分组 例:rep_del_group("hello"); |
分组名称 |
|
rep_del_rep |
SS |
I |
分组下面删除一个报表 例: rep_del_rep("hello","Eba_007"); |
分组名称,报表编号 |
|
rep_del_csp_rep |
SS |
I |
分组下面删除一个自定义脚本报表 例: rep_del_csp_rep("hello","ds_001"); |
分组名称,脚本报表编号 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
报表中的功能菜单下有一个记录管理列表脚本定义的功能。
问:我在采购订单扩展了合同编号,在报表里也定义了合同编号一栏,如何把数据显示出来。
假设合同编号属性编码统一定义为 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;
};
问:物资单据明细报表中需要增加一列,结果为 加工单数-入库单数-领料单数-工序数
先定义my_result扩展列,用于存放需要的结果,然后利用下面的脚本进行计算。
int show_row_ext()
{
num r_std_num,r_refed_num_HD,r_refed_num_HC,r_refed_num_HG;
num v;
r_std_num = grid_get_v('MG','std_num',change_row_id);
r_refed_num_HD = grid_get_v('MG','refed_num_HD',change_row_id);
r_refed_num_HC = grid_get_v('MG','refed_num_HC',change_row_id);
r_refed_num_HG = grid_get_v('MG','refed_num_HG',change_row_id);
v = r_std_num-r_refed_num_HD-r_refed_num_HC-r_refed_num_HG;
grid_set_v('MG','my_result',change_row_id,v);
return 1;
};
调用函数前传入的参数: change_col_id 明细当前的列记录号
change_row_id 明细当前的行记录号
该函数在新建单据的时候调用。
该函数在显示单据的时候调用。
该函数在增加一行物资的时候调用。
该函数在单元格里面的内容被修改了的时候调用,利用change_col变量可知道被修改的是哪个项目。
该函数在某些单据表头输入控件的内容被修改了的时候调用,利用change_obj变量可知道被修改的是哪个输入控件。
该函数在打印前调用,可以用can_print参数来决定本次打印是否允许。
相关参数:print_process_times 标识这是第几次打印。
该函数在打印后调用。
该函数在保存前调用。
该函数在审核后调用。
该函数可以被单据操作菜单下的《运行脚本adjust_row函数》功能触发,针对每条记录调用一次。主要用于需要的时候进行批量修改数据。
采购订单=》功能=》单据参数及配置=》脚本定义=》点初始化,然后在obj_change函数里增加代码,保存。 然后选择供应商后就自动设置目标地址为本公司仓库了。
int obj_change()
{
if(change_obj=="ComboBox_Ext_Sup_Id")
gui_set_text("ComboBox_Ext_Aim_Address",'本公司仓库')
return 1;
};
int
create_voucher()
{
gui_set_val('ComboBox_Ext_Sup_Id','B0000'); //默认供应商:B0000为供应商编号
gui_set_val('ComboBox_Ext_Account_Id','01'); //默认收支账户:01为收支账户编号
gui_set_val('ComboBox_Ext_Dept_Id','10'); //默认业务部门:10为业务部门编号
gui_set_val('ComboBox_Ext_Emp_Id','102'); //默认业务员:102为业务员编号
return 1;
};
采购单据中的数量,能不能设置默认值为1?
单据脚本的init_row函数里面加一句 inp_num=1; 如下:
int
init_row()
{
inp_num=1;
return 1;
};
int create_voucher()
{
string d;
d = get_cur_date_std();
gui_set_val("DateTimePicker_Voucher_Date",d);
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;
};
int func_before_check()
{
//can_check=1;
//log_all_para();
if(v_create_user_id==get_user_id())
{
can_check=0;
msg("审核人和创建人不能是同一个");
};
return 1;
};
数据脚本用来使用脚本查询数据并展示。
用于定义检索条件
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
def_lmt_dict |
SSS |
I |
定义字典型提取条件 |
参数标识、名称、字典标识 |
|
结合自定义数据字典的例子: dt_define('my_emp','select emp_id,name
from emp'); def_lmt_dict_multi('emp_id','员工','my_emp'); |
|||||
def_lmt_dict_multi |
SSS |
I |
定义字典型提取条件,允许多选 |
参数标识、名称、字典标识 |
|
def_lmt_dict_multi_set |
SSS |
I |
定义字典型提取条件,允许多选 |
参数标识、名称、字典标识 |
|
def_lmt_dict_multi_set和def_lmt_dict_multi表现一样,但数据处理方式不一样: def_lmt_dict_multi_set用lmt_val获取的是一个编号,实际的列表可以用 (select key_id from app_tmp_key_set where
set_id = 编号) 获得,这种方式适用于较多选项的选择,因为选项很多的时候直接在sql里面组合的方式会导致sql语句过长而出错,而用编号方式则不会,比如 select name from emp where emp_id in (select key_id from app_tmp_key_set
where set_id = 12) |
|||||
def_lmt_str |
SS |
I |
定义字符型提取条件 |
参数标识、名称 |
|
def_lmt_date |
SS |
I |
定义日期型提取条件 |
参数标识、名称 |
|
def_lmt_month |
SS |
I |
定义月份型提取条件 |
参数标识、名称 |
|
def_lmt_set_val |
SS |
I |
定义参数的默认值 |
参数标识、参数值 |
|
|
|
|
|
|
|
lmt_set_checked |
S |
I |
设置参数默认选择 |
参数标识 |
|
lmt_set_must_checked |
S |
I |
设置参数默认必须选择 |
参数标识 |
|
lmt_set_hide |
S |
I |
设置参数隐藏不显示 |
参数标识 |
|
lmt_set_hide 一般和def_lmt_set_val、lmt_set_checked联用 例子: def_lmt_dict_multi('edt','仓库','edt'); def_lmt_set_val('edt','10'); lmt_set_checked('edt'); lmt_set_hide('edt'); |
该函数在点击查询按钮的时候调用,用于执行脚本并显示结果。
函数名 |
参数格式 |
返回类型 |
函数功能 |
参数意义 |
返回值 |
lmt_checked |
S |
I |
判断一个参数是否选择了 |
参数标识 |
1 选择了 0 没选择 |
lmt_val |
S |
S |
获得参数值 |
参数标识 |
参数值 |
|
|
|
|
|
|
ds_get_from_rep |
S |
I |
从报表获取数据 |
报表编号 |
|
lmt_add_tab_cond |
SS |
I |
设置附加的sql条件 |
表对象(在报表的附加条件定义界面里能看到),附加的sql条件 |
|
这个函数只对ds_get_from_rep函数生效,用于传递附加的sql条件给后台报表(需要报表支持) 例子:
lmt_add_tab_cond("res","res_cat_id in ('taishiji','peijian')"); |
|||||
lmt_clear_tab_cond |
|
I |
清除附加的sql条件 |
|
|
例一:
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;
};
下面例子中的最后num_dec_cut 函数对实际应发进行了四舍五入处理,保留一位小数。
应发合计 = 基本工资
+ 绩效奖金 + 岗位津贴
+ 其它补贴
个人所得税 = cal_tax(应发合计)
实际应发 = 应发合计
- 个人所得税
实际应发 = num_dec_cut(实际应发, 1);
员工卡片编辑辅助脚本定义里(员工资料管理=>功能菜单下),定义func_create_rec如下(假设汉族的字典编码为A),保存后新增员工的时候民族就自动设置为汉族了。
int
func_create_rec()
{
gui_set_val('ComboBox_Nation','A');
return 1;
};
完成后效果如下:
1、先在功能=》列表扩展字段里面定义dept_1、dept_2、dept_3如下,保存后重新登录软件就能看到列表中有3个字段,可显示定制修改宽度:
2、功能=》记录列表脚本定义里面定义show_row_ext如下即可:
int show_row_ext()
{
string fn,s;
int pos,len;
fn = full_dept_name;
pos = str_pos(fn,'/');
if(pos<0)
{
dept_1=fn;
return 1;
};
s = str_get_sub(fn,0,pos);
dept_1=s;
len=strlen(fn);
fn = str_get_sub(fn,pos+1,len-pos-1);
pos = str_pos(fn,'/');
if(pos<0)
{
dept_2=fn;
return 1;
};
s = str_get_sub(fn,0,pos);
dept_2=s;
len=strlen(fn);
fn =
str_get_sub(fn,pos+1,len-pos-1);
pos = str_pos(fn,'/');
if(pos<0)
{
dept_3=fn;
return 1;
};
s = str_get_sub(fn,0,pos);
dept_3=s;
len=strlen(fn);
fn =
str_get_sub(fn,pos+1,len-pos-1);
return 1;
};
下面的例子中A、 B分别为中级职称、高级职称的代码,设置中级职称的补贴为200、高级职称的补贴为300,其他为0。Technical是职称的值。
职称补贴=0;
if(technical=='A')
职称补贴=200;
if(technical=='B')
职称补贴=300;
string company_id;
company_id = dt_get_ext('dept',dept_id,'company_id')
问:工号的生成,可以自定义不?比如,现在是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
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;
};
浮天风:企业年休标准比较特殊,有什么办法可以解决?
员工年休标准功能菜单下脚本定义里面定义,可以参考下面的脚本进行修改
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;
};
保险类型定义中可以设定自己定义的计算方法,用于在标准输入界面中自动计算。
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()
{
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;
};
1、在员工卡片里设置好员工对应的岗位级别。
2、在级别工资模块里定义好岗位级别对应的级别工资。
3、在工资计算公式里根据岗位级别获取相应的工资科目的值。
下面的例子中假设100为基本工资的科目编号。
switch(post_degree)
{ case 'A':
基本工资 = wage_get_degree_val('A', '100')
break;
case 'B':
基本工资 = wage_get_degree_val('B', '100')
break;
case 'C':
基本工资 = wage_get_degree_val('C', '100')
break;
};
小陈陈:我是想要把 价格体系 的数据打印出来 在现款销售 有可能吗?
打印脚本里面加上以下代码就可以(设置打印模板上体系名称字段标识为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;
};
环球水泵:我想在产品资料里面,输入进价后,系统自动形成参考售价,比如成本价*系数
商品资料管理界面 功能菜单 最下面的编辑界面脚本里面定义以下代码,修改了参考进价后按一下 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;
};
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;
};