1     脚本语言... 5

1.1      介绍说明... 5

1.2      应用场景... 5

1.3      第一个脚本,主窗口脚本定义... 5

2     语法介绍... 6

2.1      类型... 6

2.2      运算... 6

2.3      控制... 7

2.4      内置函数... 8

2.5      自定义函数... 8

2.6      注释... 8

3     内置函数... 9

3.1      显示提示函数... 9

3.2      常用基本函数... 9

3.3      界面控件操作函数... 17

3.3.1       例一:销售发货单里面,当联系人变化时,从数据库查出该联系人的地址作为目的地址。    19

3.3.2       例:客户管理界面,如何改变左下角检索条件的文字... 20

3.4      表格控件操作函数... 20

3.4.1       常用模块中表格的名称... 23

3.4.2       例一:设置报表中第2行以及res_id列的颜色和背景色... 24

3.5      输入控制函数... 24

3.6      参数访问函数... 25

3.7      Excel(wps)文件操作函数... 26

3.7.1       例:打开文件,读到数据库对象中... 27

3.7.2       例:创建文件,写入数据库内容... 28

3.7.3       例:打开文件,读取和修改单元格内容... 28

3.8      单据操作函数... 29

3.8.1       例一:激活用户自定义菜单1. 30

3.9      菜单操作函数... 31

3.9.1       例一:非admin操作员主窗口中隐藏掉业务处理的菜单项目... 33

3.9.2       例二:如何将"产品加工单"里面的"查看产品图片信息"加一个F10的快捷键?. 34

3.10        打印模板脚本函数... 34

3.10.1     打印凭证的时候能不能固定打印一个型号的打印机,我经常转账套,好多次忘了设置,打印到了默认的激光机了?    38

3.11     数据库操作函数... 38

3.11.1     例一:遍历显示 app_para里面的内容... 41

3.11.2     例二:多个sql嵌套执行... 42

3.11.3     例三:报表打印的时候进行记录定位... 43

4     打印脚本的事件... 44

4.1      相关参数... 44

4.2      函数清单... 44

4.2.1       main. 44

4.2.2       func_gopage. 45

4.2.3       func_gorow. 45

4.2.4       func_gorow_blank. 45

4.2.5       before_draw_obj() 45

4.2.6       func_cal_row_height() 45

4.3      例子... 45

4.3.1       如何进行大写金额的套打... 45

4.3.2       打印日期格式的转变... 45

4.3.3       打印单据日期格式的转变... 46

4.3.4       自动根据打印内容长度设置字体大小... 46

4.3.5       利用Auto_Adjust_Detail_Height变量自动调整明细的行高度... 47

4.3.6       根据打印内容长度设置明细的行高度... 47

4.3.7       某列设置背景为红色... 47

4.3.8       利用print_cal_obj_height调整明细的行高度... 47

4.3.9       物资单据打印如何打印产品图片... 48

4.3.10     物资单据中如何打印客户所在城市... 48

4.3.11     如何在物资单据中打印保质期限?... 48

4.3.12     如何在物资单据中打印产品描述信息?... 49

4.3.13     工资单据打印的时候如何打印公司名称... 49

4.4      其它参考... 50

5     导航界面的定义... 51

5.1      相关函数... 51

5.2      例子程序... 52

6     应用函数... 53

6.1      公共函数... 53

6.2      人力资源系统... 54

6.3      进销存系统... 55

6.3.1       例子:物资单据打印主物资扩展属性... 57

6.3.2       例子:物资单据打印明细物资扩展属性... 57

6.4      固定资产系统... 58

6.5      统计报表... 58

6.5.1       报表中脚本... 59

6.5.2       例子1. 59

6.5.3       例子2. 60

7     物资单据的事件... 61

7.1      函数清单... 61

7.1.1       create_voucher 61

7.1.2       func_show. 61

7.1.3       init_row. 61

7.1.4       cell_change. 61

7.1.5       obj_change. 61

7.1.6       func_before_print 61

7.1.7       func_after_print 61

7.1.8       int func_before_save() 61

7.1.9       func_after_check. 62

7.1.10     adjust_row. 62

7.2      在采购订单,交付地点如何默认设定为本公司仓库... 62

7.3      例:用脚本实现物资单据中默认供应商、默认收支账户、默认业务部门、默认业务员的设置。    62

7.4      例:如何设定物资默认数量... 62

7.5      例:如何设定单据默认日期为当日... 63

7.6      例:如何限定打印只打印一次... 63

7.7      例:现款采购里,现金记帐科目可不可以根据不同的操作员绑定相应的科目?... 63

7.8      例:入库单中,要求必须输入批次编号,否则不允许保存... 64

7.9      例:组装单中,如何在保存前自动设置主物资批次日期为第一条明细记录的批次日期?    65

7.10        例:用脚本控制单价列不允许修改... 65

7.11     例:如何控制明细折扣 不允许小于 85%.. 65

7.12        例:销售发货单里显示客户资料里的备注... 66

7.13        例:如何设置制单人和审核人不能为同一人... 66

8     数据脚本... 67

8.1      func_def_lmt 函数... 67

8.2      func_def_imp 暂时不用... 68

8.3      func_query.. 68

9     综合使用脚本的例子... 69

9.1     用脚本修改报表中检索条件的文本... 69

10    人力资源使用脚本的例子... 70

10.1        工资单的四舍五入... 70

10.2        新增员工时默认设置民族为汉族... 70

10.3        在员工管理界面列表中显示一级部门、二级部门、三级部门... 70

10.4        工资单里怎么样让不同职位的人,按照不同的公式计算工资。... 72

10.5        工资单里怎么样获得员工对应的公司。... 72

10.6        自定义员工工号... 73

10.7        主窗口启动的时候能不能窗口化,不要最大化的... 73

10.8        工分录入编辑中取工号和部门... 73

10.9        如何自己定义年休标准规则... 74

10.10     自定义保险标准的计算方法... 74

10.11      宿舍管理显示人员的电话和手机号码... 75

10.12      如何根据岗位级别自动获取级别工资... 76

11    商贸(进销存)使用脚本的例子... 77

11.1     如何把客户的价格体系名称打印在现款销售单上... 77

11.2     如何把业务员的电话号码打印在销售单上... 77

11.3     输入进价后,系统自动形成参考售价... 78

11.4     出库单怎么设置成单据审核后才能打印... 78

11.5       如何在销售按单据报表中体现 净利润 = 毛利润-(费用一 + 费用二)... 79

 

1       脚本语言

1.1   介绍说明

系统包含了一个脚本引擎,用于增强系统的适应能力,使得使用者在一定程度上能对系统加以定制。

 

对于学过简单计算机语言的使用者掌握脚本语言并不困难。

 

了解脚本的应用场合能最大程度地发挥系统的能力,并带来效率的提升。

 

1.2   应用场景

工资的计算公式定义(人力资源)

打印模板的控制

单据的控制(进销存)

界面的调整

权限的特殊控制

 

随着系统的扩展,将有更多的环节支持脚本。

 

1.3   第一个脚本,主窗口脚本定义

点击菜单 系统功能=》主窗口脚本定义=》初始化,然后把下面的脚本复制进去,点击保存,然后点击执行,我们会看到一个弹出的提示窗口,然后主窗口的标题也变为“我的系统”了:

 

int main()

{

  gui_set_text('this','我的系统');

  msg('欢迎使用' + get_user_name());

  return 1;

};

 

这个例子中,gui_set_text函数用于设置控件内容,第一个参数this代表调用的窗口。msg是弹出信息,get_user_name是函数,用于获取登录用户的名称。系统提供了很多函数,用于支持脚本开发。

系统在登陆后会自动调用 main_win_open 脚本里的main函数,也就是主窗口脚本,可以通过定义该脚本来实现一些想要的效果,比如隐藏菜单。删除以上内容,保存后重启系统,则不会再弹出信息窗口和修改标题。

 

 

 

 

 

 

2       语法介绍

       解释执行器基本采用C的语法。下面是它的功能定义:

 

2.1   类型

num,int,float,string,采用 string类型做字符串处理

 

num类型是高精度的数值类型。

 

2.2   运算

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))

 

 

 

2.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

 

 

2.4   内置函数

系统定义了一些内置函数,可以直接调用。

 

2.5   自定义函数

int add(int x,int y)

{

  return x+y;

};

 

2.6   注释

采用//作为注释

 

3       内置函数

 

类型标识: S 字符型  I 整数型  F 数值型 M 高精度数值

 

 

3.1   显示提示函数

 

这部分函数可以用来显示调试信息,或者要求确认、弹出告警。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

dbg

S

 

显示变量。输出在信息窗口

要显示的变量

 

dbg_clear

 

 

清空信息窗口的内容

 

 

msg

S

 

显示提示。弹出式显示

要显示的内容

 

tip

S

 

显示提示。弹出式显示,几秒后自动关闭

要显示的内容

 

warn

S

 

显示警告。弹出式显示

要显示的内容

 

confirm

S

 

请确认。弹出式显示

要显示的内容

1 确定

0 取消

log_all_para

 

 

显示所有的变量

 

 

 

 

 

 

 

 

 

 

3.2   常用基本函数

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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;

};

 

上面的代码会输出 abcdef7

 

 

 

 

 

 

 

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 => 123456.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;

};

 

Dlltest_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,60,255’);

 

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);

 

 

 

 

 

 

 

 

3.3   界面控件操作函数

 

这组函数主要用于在脚本里设定获取或者修改当前窗口输入控件的内容。这组函数对于修改窗口里面的项目内容非常有用。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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_countdb_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_textgui_get_textgui_set_valgui_get_val的区别在于text相关的函数访问的是显示的标签,val相关的是值,对于编辑框控件这2组是一致的,但对于CheckBox这样的就有区别,CheckBoxval0或者1text则表示上面显示的内容

 

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

进入窗口管理域

 

 

 

 

 

 

 

 

3.3.1   例一:销售发货单里面,当联系人变化时,从数据库查出该联系人的地址作为目的地址。

 

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;

};

 

3.3.2   例:客户管理界面,如何改变左下角检索条件的文字

功能菜单=》记录管理列表脚本:

 

int init_win()

{

  //gui_list_all();

   gui_set_text('CheckBox_Service_Id','营销区改');

  return 1;

};

 

退出重进即可看到文本内容发生了变化。

 

 

 

3.4   表格控件操作函数

 

表格在很多地方出现,如单据的明细、报表数据、管理界面中的列表等,下面这组函数用于操作表格。可以增加列、获取单元格的数据、设置单元格的数据、调整单元格的位置和宽度。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

下面这组函数用于操作表格

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表示当前行)

 

 

 

 

 

 

 

 

3.4.1   常用模块中表格的名称

 

单据中明细表格: MG_Item

 

物资单据单据中主物资表格: MG_Main_Res

 

报表中数据表格: MG

 

管理界面(左边是索引树,右边是列表):MG

 

 

3.4.2   例一:设置报表中第2行以及res_id列的颜色和背景色

 

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;

};

 

 

3.5   输入控制函数

 

这组函数主要用于在脚本里设定弹出一个输入窗口,让操作员输入一些参数,便于进行后续处理。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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_setinp_def_dict_multi表现一样,但数据处理方式不一样:

inp_def_dict_multi_seinp_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);

 

 

 

 

3.6   参数访问函数

 

这部分函数可以用来访问参数。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

下面这组函数是局部的,只能访问本次脚本调用涉及的参数,调用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 没有

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.7   Excel(wps)文件操作函数

 

这组函数主要用于在脚本里访问excelwps文件。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

获取列宽度

列编号

列宽度

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.7.1   例:打开文件,读到数据库对象中

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;

};

 

3.7.2   例:创建文件,写入数据库内容

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;

};

 

3.7.3   例:打开文件,读取和修改单元格内容

 

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;

};

 

 

 

 

3.8   单据操作函数

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

 

 

 

 

 

 

 

 

3.8.1   例一:激活用户自定义菜单1

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;

};

 

 

 

 

3.9   菜单操作函数

 

菜单操作函数主要在主界面根据需要调整菜单。

在调用函数进行菜单项目操作前,先要调用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

 

 

显示所有的菜单名字

 

 

 

 

3.9.1   例一:非admin操作员主窗口中隐藏掉业务处理的菜单项目

系统功能的主窗口脚本里面设置下面的代码,点执行即可(下次登录系统会自动执行):

 

int main()

{

  string uid;

 

  uid=get_user_id();

 

  //menu_list();

  //menu_list_item();

   if(uid!='admin')

     menu_hide_item('inv_buss');

  return 1;

};

 

3.9.2   例二:如何将"产品加工单"里面的"查看产品图片信息"加一个F10的快捷键?

 

操作=》参数配置=》脚本定义,然后把下面的脚本复制进去保存,新增单据就可以了。

 

int create_voucher()

{

  menu_set_hot_key('N_View_Res_Info','F10',0,0);

  return 1;

};

 

 

 

3.10     打印模板脚本函数

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

计算完整打印某单元格需要的高度(宽度按照模版设计)

对象标识

高度

 

 

 

 

 

 

 

 

3.10.1 打印凭证的时候能不能固定打印一个型号的打印机,我经常转账套,好多次忘了设置,打印到了默认的激光机了?

可以,在凭证的单据脚本里按照下面的例子设置默认打印机即可:

 

int func_before_print()

{

  select_printer('Samsung SCX-4300 Series');

  //can_print=1;

  return 1;

};

 

 

 

3.11     数据库操作函数

 

这组函数主要用于访问数据库操作。

 

只有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使用完后调用

 

 

 

3.11.1 例一:遍历显示 app_para里面的内容

 

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;

};

 

3.11.2 例二:多个sql嵌套执行

 

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;

 

};

 

3.11.3 例三:报表打印的时候进行记录定位

 

判断是否包含了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;

};

 

4       打印脚本的事件

 

4.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(背景色)参数

可以修改以上几个参数来控制打印的位置、颜色和大小。

 

 

 

4.2   函数清单

4.2.1   main

该函数在打印预览的时候调用。

 

4.2.2   func_gopage

该函数在预览指定页的时候调用。

 

4.2.3   func_gorow

该函数在定位一行的时候调用。

 

4.2.4   func_gorow_blank

这个函数在打印以下空白的时候用到,可以指定一个或多个字段内容为 以下空白,直接做一个赋值语句,如res_name='以下空白',以下空白只有在固定行数打印的情况下才有效。

 

4.2.5   before_draw_obj()

该函数在打印某个对象前调用,可在函数里通过to_draw_obj知道接下来要打印哪个对象。

系统预设值 pp_x(横向偏移),pp_y(纵向偏移),pp_w(宽度),pp_h(高度),pp_font_size(字体大小),pp_font_color(字体颜色)pp_fill_color(背景色)参数,可以修改以上几个参数来控制打印的位置、颜色和大小。

 

4.2.6   func_cal_row_height()

该函数在计算明细行高的时候调用,可以用来自动调整行高。

 

 

4.3   例子

4.3.1   如何进行大写金额的套打

 

12345.67,打印出来的结果是:壹万贰仟叁佰肆拾伍元陆角柒分....可不可以把中间的万仟佰拾元角分去掉?

 

利用one_cap函数可以实现这个功能。

 

v = 123.45

one_cap(v,1)  则返回五

one_cap(v,2)  则返回四

one_cap(v,3)  则返回三

 

4.3.2   打印日期格式的转变

 

默认打印的参数为v_print_time,格式为 ‘yyyy-mm-dd hh-mi-ss’,现在需要打印为 ‘yyyymmdd这种格式:

 

在模板上增加一个对象 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;

};

 

 

4.3.3   打印单据日期格式的转变

 

单据日期格式的改变:

默认打印的参数为v_voucher_date,格式为 ‘yyyy-mm-dd’,现在需要打印为 ‘yyyymmdd这种格式:

 

利用v_voucher_date_std进行格式转化,对应的对象类型设置为计算型,表达式设置如下即可:

fmt_date(v_voucher_date_std,"yyyymmdd")

 

 

4.3.4   自动根据打印内容长度设置字体大小

 

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;

};

 

4.3.5   利用Auto_Adjust_Detail_Height变量自动调整明细的行高度

//在打印脚本的main函数里给Auto_Adjust_Detail_Height赋值为1即可。

//这种方式也可以直接在报表的基本属性里面进行设置

 

int main()

{

  Auto_Adjust_Detail_Height = 1;

 

  return 1;

};

 

 

4.3.6   根据打印内容长度设置明细的行高度

 

int func_cal_row_height()

{

  if(strlen(d_res_name)>=16)

    row_height_add=400;

  return 1;

};

 

4.3.7   某列设置背景为红色

 

int before_draw_obj()

{

  if(to_draw_obj=='res_id')

    pp_fill_color=0x0000ff;

  return 1;

};

 

 

4.3.8   利用print_cal_obj_height调整明细的行高度

//下面例子中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;

};

 

 

4.3.9   物资单据打印如何打印产品图片

系统提供了根据产品编号提取产品图片的脚本函数。物资单据打印时明细包含了 res_id 参数(产品编号),我们可以用get_res_pict来获得照片。

具体做法:在物资单据的打印模板里添加一个图片对象,在照片文件指定为  get_res_pict(res_id)  即可。

 

 

4.3.10 物资单据中如何打印客户所在城市

系统在打印物资单据时没有输出客户所在城市信息给打印模块,因此无法直接引用。但可以利用客户编号去获得客户所在城市信息(函数 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;

};

4.3.11 如何在物资单据中打印保质期限?

 


表达式中的内容如下:

fmt_date(date_add(std_inp_date(produce_date),quality_days),"yyyy-mm-dd")

 

4.3.12 如何在物资单据中打印产品描述信息?

 

 

表达式中的内容为:get_res_desc(res_id,"A")

函数中的A为产品描述信息数据字典类型编码。

 

 

4.3.13 工资单据打印的时候如何打印公司名称

默认的工资单打印的时候明细里没有公司编号和名称,可以利用部门编号取出公司编号,再进一步获得公司名称。

       先定义一个 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;

};

 

 

 

4.4   其它参考

请阅读内置函数里面的打印模板脚本函数。

 

5       导航界面的定义

 

5.1   相关函数

 

说明:

颜色可以用0xaabbcc这种方式表示,616进制,和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

 

 

5.2   例子程序

 

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;

};

 

 

 

 

6       应用函数

6.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分组)

 

 

 

6.2   人力资源系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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函数中调用)

参数标识、参数值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.3   进销存系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

获取系统中指定产品在某企业内的名称

产品编号,企业编码

指定产品在某企业内的名称

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.3.1   例子:物资单据打印主物资扩展属性

 

打印模板中定义字段m_res_ext_1,然后在main函数里面加:

 

m_res_ext_1 = get_res_info(m_res_id,'ext_1')

 

 

6.3.2   例子:物资单据打印明细物资扩展属性

 

打印模板中定义字段res_ext_1,然后在func_go_row函数里面加:

 

res_ext_1 = get_res_info(res_id,'ext_1')

 

6.4   固定资产系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

 

 

 

 

 

 

 

 

 

 

6.5   统计报表

下面这rep_para_xxx这部分函数只应用于统计报表的 rep_change函数里面,用于干预设定选择报表变化了的时候提取报表的数据条件。

rep_add_xxxrep_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");

 

分组名称,脚本报表编号

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.5.1   报表中脚本

 

报表中的功能菜单下有一个记录管理列表脚本定义的功能。

 

6.5.2   例子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;

};

 

6.5.3   例子2

问:物资单据明细报表中需要增加一列,结果为 加工单数-入库单数-领料单数-工序数

 

先定义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;
};

 

 

 

7       物资单据的事件

 

调用函数前传入的参数: change_col_id 明细当前的列记录号

change_row_id 明细当前的行记录号

 

7.1   函数清单

7.1.1   create_voucher

该函数在新建单据的时候调用。

 

7.1.2   func_show

该函数在显示单据的时候调用。

 

7.1.3   init_row

该函数在增加一行物资的时候调用。

 

7.1.4   cell_change

该函数在单元格里面的内容被修改了的时候调用,利用change_col变量可知道被修改的是哪个项目。

 

7.1.5   obj_change

该函数在某些单据表头输入控件的内容被修改了的时候调用,利用change_obj变量可知道被修改的是哪个输入控件。

 

7.1.6   func_before_print

该函数在打印前调用,可以用can_print参数来决定本次打印是否允许。

相关参数:print_process_times 标识这是第几次打印。

 

7.1.7   func_after_print

该函数在打印后调用

 

7.1.8   int func_before_save()

该函数在保存前调用。

 

7.1.9   func_after_check

该函数在审核后调用

 

7.1.10 adjust_row

该函数可以被单据操作菜单下的《运行脚本adjust_row函数》功能触发,针对每条记录调用一次。主要用于需要的时候进行批量修改数据。

 

7.2   在采购订单,交付地点如何默认设定为本公司仓库

采购订单=》功能=》单据参数及配置=》脚本定义=》点初始化,然后在obj_change函数里增加代码,保存。 然后选择供应商后就自动设置目标地址为本公司仓库了。

 

int obj_change()

{

  if(change_obj=="ComboBox_Ext_Sup_Id")

     gui_set_text("ComboBox_Ext_Aim_Address",'本公司仓库')

 

  return 1;

};

 

 

 

7.3   例:用脚本实现物资单据中默认供应商、默认收支账户、默认业务部门、默认业务员的设置。

 

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;

};

 

 

7.4   例:如何设定物资默认数量

 

采购单据中的数量,能不能设置默认值为1

 

单据脚本的init_row函数里面加一句 inp_num=1;  如下:

 

int init_row()

{

  inp_num=1;

  return 1;

};

 

 

7.5   例:如何设定单据默认日期为当日

 

int create_voucher()

{

string d;

  d = get_cur_date_std();

gui_set_val("DateTimePicker_Voucher_Date",d);

  return 1;

};

 

 

7.6   例:如何限定打印只打印一次

func_before_print()里面加以判断控制。

 

int func_before_print()

{

  can_print=1;

  if(print_process_times>1)

    can_print=0;

  //show_v_para();

  return 1;

};

 

 

7.7   例:现款采购里,现金记帐科目可不可以根据不同的操作员绑定相应的科目?

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;

};

 

7.8   例:入库单中,要求必须输入批次编号,否则不允许保存

 

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;

};

 

7.9   例:组装单中,如何在保存前自动设置主物资批次日期为第一条明细记录的批次日期?

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;

};

 

 

7.10     例:用脚本控制单价列不允许修改

 

int create_voucher()
{
  grid_mark_readonly('MG_Item','inp_price');
  return 1;
};

 

 

7.11     例:如何控制明细折扣 不允许小于 85%  

int cell_change()

{

num v;

 

         if(change_col=='discount')

         {

                   v = discount;

                   if(v<85)

                   {

                            discount=85;

                   };

         };

         return 1;

};

 

7.12     例:销售发货单里显示客户资料里的备注

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;

};

 

7.13     例:如何设置制单人和审核人不能为同一人

 

int func_before_check()

{

  //can_check=1;

  //log_all_para();

  if(v_create_user_id==get_user_id())

  {

    can_check=0;

    msg("审核人和创建人不能是同一个");

  };

 

  return 1;

};

 

 

8       数据脚本

 

数据脚本用来使用脚本查询数据并展示。

 

8.1   func_def_lmt 函数

用于定义检索条件

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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_setdef_lmt_dict_multi表现一样,但数据处理方式不一样:

def_lmt_dict_multi_setlmt_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_vallmt_set_checked联用

例子:

  def_lmt_dict_multi('edt','仓库','edt');

  def_lmt_set_val('edt','10');

  lmt_set_checked('edt');

  lmt_set_hide('edt');

 

 

 

8.2   func_def_imp 暂时不用

 

8.3   func_query  

该函数在点击查询按钮的时候调用,用于执行脚本并显示结果。

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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条件

 

 

 

 

9       综合使用脚本的例子

 

 

9.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;

};

 

 

10             人力资源使用脚本的例子

 

10.1     工资单的四舍五入

下面例子中的最后num_dec_cut 函数对实际应发进行了四舍五入处理,保留一位小数。

 

 

应发合计 = 基本工资 + 绩效奖金 + 岗位津贴 + 其它补贴

个人所得税 = cal_tax(应发合计)

实际应发 = 应发合计 - 个人所得税

 

实际应发 = num_dec_cut(实际应发, 1);

 

 

10.2     新增员工时默认设置民族为汉族

员工卡片编辑辅助脚本定义里(员工资料管理=>功能菜单下),定义func_create_rec如下(假设汉族的字典编码为A),保存后新增员工的时候民族就自动设置为汉族了。

 

int func_create_rec()

{

  gui_set_val('ComboBox_Nation','A');

  return 1;

};

 

10.3     在员工管理界面列表中显示一级部门、二级部门、三级部门

 

完成后效果如下:

 

1、先在功能=》列表扩展字段里面定义dept_1dept_2dept_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;

};

 

 

 

10.4     工资单里怎么样让不同职位的人,按照不同的公式计算工资。

下面的例子中A B分别为中级职称、高级职称的代码,设置中级职称的补贴为200、高级职称的补贴为300,其他为0Technical是职称的值。

 

职称补贴=0;

if(technical=='A')

  职称补贴=200;

if(technical=='B')

  职称补贴=300;

 

10.5     工资单里怎么样获得员工对应的公司。

 

string company_id;

 

company_id = dt_get_ext('dept',dept_id,'company_id')

 

10.6     自定义员工工号

 

问:工号的生成,可以自定义不?比如,现在是4nnnn,我想定义成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;

};

 

10.7     主窗口启动的时候能不能窗口化,不要最大化的

 

系统功能=》主窗口脚本定义=》初始化

然后修改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;

};

 

10.8     工分录入编辑中取工号和部门

 

麦兜儿:工分录入中想通过脚本做些判断,每个员工对应的部门可以获取到么 ?

 

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;

};

 

 

10.9     如何自己定义年休标准规则

 

浮天风:企业年休标准比较特殊,有什么办法可以解决?

 

员工年休标准功能菜单下脚本定义里面定义,可以参考下面的脚本进行修改

 

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;

};

 

10.10      自定义保险标准的计算方法

 

保险类型定义中可以设定自己定义的计算方法,用于在标准输入界面中自动计算。

 

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;

};

 

 

10.11             宿舍管理显示人员的电话和手机号码

 

St.-,De-,Hr:请教个问题,我想在宿舍管理里面显示人员的电话和手机号码,要如何弄?

 

打开 宿舍管理=》功能=》记录管理列表脚本定义,复制下面的脚本进去,点刷新就可以看到相关数据。

 

 

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;

};

 

10.12             如何根据岗位级别自动获取级别工资

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;

};

 

 

11             商贸(进销存)使用脚本的例子

 

11.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;

};

 

11.2     如何把业务员的电话号码打印在销售单上

 

杨清云:在商贸软件中的单据中,打印格式里我设置了一个字段,想要显示为业务员的电话号码,使用什么脚本查找绑定好这个员工的联系电话呢?

 

打印脚本里面加上以下代码就可以(设置打印模板上体系名称字段标识为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;

};

 

11.3     输入进价后,系统自动形成参考售价

 

环球水泵:我想在产品资料里面,输入进价后,系统自动形成参考售价,比如成本价*系数

 

商品资料管理界面 功能菜单 最下面的编辑界面脚本里面定义以下代码,修改了参考进价后按一下 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;

};

 

11.4     出库单怎么设置成单据审核后才能打印

 

悟道(neil):怎么设置成单据审核后才能打印啊?

 

 

出库单据的操作菜单下=》参数及配置=》脚本定义=》初始化,修改func_before_print函数保存后就可以了。

 

int func_before_print()

{

  //can_print=1;

  if(v_state=='A')

    can_print=0;

  return 1;

};

 

 

 

 

 

11.5 如何在销售按单据报表中体现 净利润 = 毛利润-(费用一 + 费用二)

 

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;

};