1     脚本语言... 4

1.1      介绍说明... 4

1.2      应用场景... 4

2     语法介绍... 5

2.1      类型... 5

2.2      运算... 5

2.3      控制... 6

2.4      内置函数... 7

2.5      自定义函数... 7

2.6      注释... 7

3     内置函数... 8

3.1      显示提示函数... 8

3.2      输入控制函数... 8

3.3      参数访问函数... 9

3.4      界面控件操作函数... 10

3.5      表格控件操作函数... 12

3.5.1       常用模块中表格的名称... 14

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

3.6      单据操作函数... 15

3.6.1       例一:激活用户自定义菜单1. 15

3.7      菜单操作函数... 16

3.7.1       例一:主窗口中隐藏掉业务处理的菜单项目... 17

3.8      打印模板脚本函数... 17

3.9      数据库操作函数... 18

3.9.1       例一:遍历显示 app_para里面的内容... 19

3.9.2       例二:多个sql嵌套执行... 19

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

3.10        更多函数... 21

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

4.1      相关参数... 26

4.2      函数清单... 26

4.2.1       main. 26

4.2.2       func_gopage. 26

4.2.3       func_gorow. 26

4.2.4       func_gorow_blank. 26

4.2.5       before_draw_obj() 27

4.2.6       func_cal_row_height() 27

4.3      例子... 27

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

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

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

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

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

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

4.3.7       利用print_cal_obj_height调整明细的行高度... 29

4.3.8       物资单据打印如何打印产品图片... 29

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

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

4.4      其它参考... 30

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

5.1      相关函数... 31

5.2      例子程序... 32

6     应用函数... 33

6.1      公共函数... 33

6.2      人力资源系统... 33

6.3      进销存系统... 34

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

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

6.4      统计报表... 35

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

7.1      函数清单... 37

7.1.1       create_voucher 37

7.1.2       func_show. 37

7.1.3       init_row. 37

7.1.4       cell_change. 37

7.1.5       obj_change. 37

7.1.6       func_before_print 37

7.1.7       func_after_print 37

7.1.8       int func_before_save() 37

7.1.9       func_after_check. 38

7.1.10     adjust_row. 38

7.2      例:如何设定物资默认数量... 38

7.3      例:如何限定打印只打印一次... 38

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

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

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

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

8     报表中脚本... 41

8.1      例子... 41

9     数据脚本... 42

9.1      func_def_lmt 函数... 42

9.2      func_def_imp 暂时不用... 42

9.3      func_query.. 42

10    一些使用脚本的例子... 43

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

10.2        自定义员工工号... 43

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

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

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

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

10.7        如何自己定义年休标准规则... 46

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

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

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

10.11     用脚本修改报表中检索条件的文本... 48

10.12     工分录入编辑中取工号和部门... 48

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

 

1       脚本语言

1.1   介绍说明

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

 

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

 

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

 

1.2   应用场景

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

打印模板的控制

单据的控制(进销存)

界面的调整

权限的特殊控制

 

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

 

 

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 数值型

 

 

3.1   显示提示函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

dbg

S

 

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

要显示的变量

 

msg

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

获取字典对应扩展信息

字典标识,字典取值编码,要返回的扩展列

扩展信息

 

 

 

 

 

 

 

 

 

 

 

 

fen_to_yuan

S

S

字符表达的分转换为元

字符表达的分

字符表达的元

one_cap

SI

S

取得金额其中一位的大写

大写数值

大写表达

one_digit

SI

S

取得金额其中一位的小写

字符表达的元,位数

小写表达

 

例子:

       one_digit("123.45",1,s)  返回 5

       one_digit("123.45",3,s)  返回 3

       one_digit("123.45",5,s)  返回 1

       one_digit("123.45",6,s)  返回

 

one_digit_ext

SIS

S

取得金额其中一位的小写,如是最左边前面1位返回货币标识

字符表达的元,位数,货币标识

小写表达

 

例子:

       one_digit_ext("123.45",1,s,"$")  返回 5

       one_digit_ext("123.45",3,s,"$")  返回 3

       one_digit_ext("123.45",5,s,"$")  返回 1

       one_digit_ext("123.45",6,s,"$")  返回 $

 

money_cap

S

S

取得金额的大写

金额

大写表达

 

 

 

 

 

 

num_dec_cut

SI

S

数字四舍五入

,小数位数

结果字符串

num_2_grp

S

S

转换数值用分组方式表达

  123456.78 => 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

根据开始日期和相差天数计算结果日期

开始日期,相差天数

结果日期

month_add

SI

S

根据开始月份和相差月数计算结果月份

开始月份,相差月数

结果月份

date_nl

S

S

根据公历日期获得农历日期

公历日期yyyymmdd

农历日期yyyymmdd

date_gl

S

S

根据农历日期获得公历日期

农历日期yyyymmdd

公历日期yyyymmdd

 

 

 

 

 

 

nl

 

S

获得回车字符串

例子:

string res;

 

  res = "AAA";

  res = res + nl();

  res = res + "abc";

 

回车字符串

strlen

S

I

计算字符串的长度

字符串

长度

strcmp

SS

I

比较2个字符串大小

1,2

0相等,1大于,-1小于

strncmp

SSI

I

比较2个字符串前几个字符的大小

1,2,比较长度

0相等,1大于,-1小于

str_get_sub

SII

S

返回部分子串

1,开始位置(首位为0),长度

结果字符串

str_pos

SS

I

返回串2在串1中的位置

1,串2

位置,开始位置为0,未找到返回-1

str_add_as_num

SS

S

2个字符串转为数字相加返回结果字符串

1,2

结果字符串

str_sub_as_num

SS

S

2个字符串转为数字相减返回结果字符串

1,2

结果字符串

str_std_num

SI

S

字符串数字补齐小数位数

,小数位数

结果字符串

lower

S

S

根据指定串获得一个小写串

指定串

结果字符串

upper

S

S

根据指定串获得一个大写串

指定串

结果字符串

str_cut

SI

S

字符串截断

,最大长度

结果字符串

to_int

S

I

字符串转整数

结果数

to_float

S

F

字符串转浮点数

结果数

fmt_float

FS

S

浮点数转格式字符串

数值,格式

结果串

fmt_int

IS

S

整数转格式字符串

数值,格式

结果串

mod

II

I

2个整数取余

数值1,数值2

结果

str_to_num_str

S

S

去掉字符串中不是数值的字符,比如逗号

结果字符串

 

 

 

 

 

 

system

S

I

执行外部程序

外部程序

 

shell

S

I

执行外部程序

外部程序

 

call_dll_func

SS

I

调用dll里面的函数

Dll名,函数标识

 

call_func

S

I

调用系统定义的函数

系统函数名

 

 

 

 

 

 

 

 

 

 

 

 

 

get_ip

 

S

获取本机ip地址

 

Ip地址

write_port

SS

I

写串口并口

第一参数如 com1 lpt1

2参数为十进制码串 100,20,255,可用于钱箱控制

 

write_port(LPT1 ,27,112,0,60,255’);

 

check_thr_err

 

I

检查是否有函数执行错误信息

如果有会弹出信息

 

 

 

 

 

 

 

str_trim_right

S

S

去掉字符串右边空格

结果字符串

str_trim_left

S

S

去掉字符串左边空格

结果字符串

str_trim

S

S

去掉字符串2边空格

结果字符串

 

 

 

 

 

 

 

 

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_set_text

SS

 

设置指定控件的标签

控件的名称,要设置的标签

 

gui_get_text

S

 

获取指定控件的标签

控件的名称

指定控件的标签

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

 

gui_set_x

SI

 

设置控件的横坐标

控件的名称,x

 

gui_set_y

SI

 

设置控件的纵坐标

控件的名称,y

 

gui_set_w

SI

 

设置控件的宽度

控件的名称,宽度

 

gui_set_h

SI

 

设置控件的高度

控件的名称,高度

 

gui_set_font_size

SI

 

设置控件的字体大小

控件的名称,字体大小(一般标准为9)

 

gui_set_font_name

SS

 

设置控件的字体名称

控件的名称, 字体名称

 

gui_set_font_color

SI

 

设置控件的字体颜色

控件的名称,字体颜色

 

 

例子:单据里设置新建按钮字体颜色

  gui_set_font_color('SpeedButton_Create',0x0000ff);

gui_set_bg_color

SI

 

设置控件的背景颜色

控件的名称,背景颜色

 

 

例子:单据里设置功能条背景颜色

  gui_set_bg_color('Panel_Func',0xff0000);

gui_get_x

S

I

获取控件的横坐标

控件的名称

x

gui_get_y

S

I

获取控件的纵坐标

控件的名称

y

gui_get_w

S

I

获取控件的宽度

控件的名称

宽度

gui_get_h

S

I

获取控件的高度

控件的名称

高度

 

 

 

 

 

 

gui_set_parent

SS

I

改变控件的上级区域

控件的名称,目标控件的名称

Exam:

gui_set_parent('Label15','Panel5');

 

gui_trigger_change

 

S

I

触发一个控件内容改变了的处理事件

控件的名称

Exam:

gui_trigger_change

(‘Edit_Name’)

 

attr_enter

 

I

进入属性管理域

2个函数比较特别。主要用于支持访问一些特殊的区域,比如报表的条件、单据的自定义扩展属性等,需要访问这部分区域的控件前,应先调用attr_enter,把控制区指向属性区,访问完之后再调用attr_leave,把控制区设回主窗口

attr_leave

 

I

进入窗口管理域

 

 

 

 

 

 

 

 

例子:这个例子可以用于销售发货单里面,当联系人变化时,从数据库查出该联系人的地址作为目的地址。

 

int obj_change()

{

  //change_obj

  int card_id;

  string sql;

 

  if(change_obj=='ComboBox_Ext_Linkman')

  {

       card_id = gui_get_val('ComboBox_Ext_Linkman');

       if(card_id>0)

       {

         sql='select address from eba_card where card_id=' + card_id;

         db_run(sql);

         if(db_row_count()>0)

           gui_set_val('Edit_Aim_Address',db_res(0));

       };

  };

  // gui_list_inp_all();

  return 1;

};

 

 

3.4   表格控件操作函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

grid_hide_col

SS

 

隐藏列

表格的名称,列名

 

grid_set_col_width

SSI

 

设置列宽

表格的名称,列名,宽度

 

grid_get_col_width

SS

 

获取列宽

表格的名称,列名

 

grid_set_row_height

SII

 

设置行高

表格的名称,行号,高度

 

grid_get_row_height

SI

 

获取行高

表格的名称,行号

 

 

 

 

 

 

 

grid_set_col_pos

SSI

 

设置列位置

表格的名称,列名,位置

 

grid_get_col_pos

SS

 

获取列位置

表格的名称,列名

列位置(-1表示无法获得)

grid_add_row_num

SI

I

增加行

表格的名称,要增加的行数

 

grid_del_row

SI

I

删除行

表格的名称,要删除的行

 

grid_clear_row

SI

I

清空行

表格的名称,要清除内容的行

 

grid_add_col_str

SSS

 

增加字符型列

表格的名称,列名,标题

 

grid_add_col_num

SSS

 

增加数值型列

表格的名称,列名,标题,是否字符

 

grid_add_col

SSSI

 

增加列

表格的名称,列名,标题,是否字符

 

grid_row_num

S

I

获取记录数

表格的名称

行记录数

grid_col_num

S

I

获取列数

表格的名称

列记录数

grid_cur_row

S

I

获取当前行号

表格的名称

行记录号

grid_cur_col

SI

I

设置当前列号

表格的名称,列号

当前列

grid_set_cur_row

SI

I

设置当前行号

表格的名称,行号

当前行

grid_ set_cur_col

S

I

获取当前列号

表格的名称

列记录号

grid_set_v

SSIS

I

设置单元内容

表格的名称,列名,行,内容

 

grid_get_v

SSI

S

获取单元内容

表格的名称,列名,行

内容

grid_mark_sum

SS

I

标记一个列显示合计数

表格的名称,列名

 

grid_unmark_sum

SS

I

设置一个列不显示合计数

表格的名称,列名

 

grid_get_col_sum

SS

S

获得一列的合计值

表格的名称,列名

合计

grid_mark_readonly

SS

I

标记一个列只能读

表格的名称,列名

 

grid_unmark_readonly

SS

I

设置一个列可以写

表格的名称,列名

 

grid_set_col_align_left

SS

I

设置一个列左对齐

表格的名称,列名

 

 

 

例:grid_set_col_align_left('MG_Item','res_id');

grid_set_col_align_right

SS

I

设置一个列右对齐

表格的名称,列名

 

 

例:grid_set_col_align_right('MG_Item','res_id');

grid_set_col_align_middle

SS

I

设置一个列中对齐

表格的名称,列名

 

 

例:grid_set_col_align_middle('MG_Item','res_id');

grid_set_col_picklist

SSS

I

设置一个列输入为下拉选择模式

表格的名称,列名,下拉项目(用逗号分开)

 

 

例:grid_set_col_picklist('MG_Item','note_info','2a,33b,c,d,e,,');

 

grid_set_col_picklist_dict

SSS

I

设置一个列输入为下拉选择模式

表格的名称,列名,下拉项目使用的数据字典标识

 

 

例:grid_set_col_picklist_dict('MG_Item','note_info','bool');

 

grid_set_row_color

SII

I

设置行颜色

表格的名称、行号、颜色

 

grid_set_col_color

SSI

I

设置列颜色

表格的名称、列名、颜色

 

grid_set_cell_color

SSII

I

设置单元格颜色

表格的名称、列名、行号、颜色

 

grid_set_row_bgcolor

SII

I

设置行背景颜色

表格的名称、行号、背景颜色

 

grid_set_col_bgcolor

SSI

I

设置列背景颜色

表格的名称、列名、背景颜色

 

grid_set_cell_bgcolor

SSII

I

设置单元格背景颜色

表格的名称、列名、行号、背景颜色

 

 

 

 

 

 

 

 

3.4.1   常用模块中表格的名称

 

单据中明细表格: MG_Item

 

报表中数据表格: 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_select

暂时不用

 

 

选择变量组

变量组标识

 

inp_para

 

 

弹出窗口,输入相关参数

 

 

inp_para_set_title

S

 

设置参数输入窗口的标题

标题

 

 

 

 

 

 

 

 

例子:

   inp_clear();

 

  inp_def_dict('msex','性别', 'sex');

 

  inp_def_string('mnum','数量');

  inp_def_date('mdate','日期');

  inp_para();

  num inp_num;

  inp_num=inp_get_val('mnum')

 

 

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 没有

 

 

 

 

 

 

下面这组函数是全局的,用于支持设置访问公共的参数。比如企业名称等

pub_para_get

S

S

获取参数值

变量名称

pub_para_defined

S

I

判断参数是否定义了

要显示的内容

1 定义了

0 没有

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.7   单据操作函数

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

v_mark_sum

S

 

标记一个列显示合计数(这个函数主要用于支持单据扩展的列显示合计)

列标识

 

v_mark_col_readonly

SI

 

标记一个列是否只读

列标识,只读标志(只读为1,否则为0

 

v_set_print_format_id

S

 

指定打印采用的打印模版编号

打印模版编号

 

vr_add_res

仅用于进销存商贸物资单据

SS

 

增加物资

这个函数仅在物资单据中有效

产品编号,数量

 

vr_set_price_group

仅用于进销存商贸物资单据

S

 

设置当前的价格体系

价格体系编号

 

vr_init_main_res_ui_pos

仅用于进销存商贸物资单据

 

 

重新计算排列主物资控件的位置,这个函数主要用于脚本控制隐藏主物资的控件后重新调整位置

 

 

例子:

int create_voucher()

{

  gui_hide('ScrollBox_Main_Res_Ref_Voucher_No');

  gui_hide('ScrollBox_Main_Res_Unit_Type');

    vr_init_main_res_ui_pos();

  return 1;

};

 

attr_get_val

S

S

获取单据扩展属性的值

属性标识

属性值

attr_set_val

SS

I

设置单据扩展属性的值

属性标识,属性值

 

 

 

 

 

 

 

系统提供了4个菜单,供脚本扩展功能。默认是不显示的,可以通过v_show_user_menu进行激活,此时可以通过点击单据名称或者按 ctrl+1组合键进行弹出,点击后调用相应的脚本功能函数 func_user_menu_1  …. func_user_menu_4

4个菜单只有在单据编辑状态下才可以使用

v_show_user_menu

IS

 

显示指定的菜单项

编号1-4,标题

 

v_hide_user_menu

I

 

隐藏指定的菜单项

编号1-4

 

 

 

 

 

 

 

 

3.7.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.8   菜单操作函数

 

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

在调用函数进行菜单项目操作前,先要调用menu_use设定需要操作的菜单名字,如果不调用该函数,则默认为当前窗口的主菜单。窗口中能操作的菜单名可以用menu_list显示出来。

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

下面这组函数用于操作菜单

menu_list_item

 

 

列出所有菜单项目

 

 

menu_hide_item

S

 

隐藏一个项目

菜单项目名

 

menu_show_item

S

 

显示一个项目

菜单项目名

 

menu_enable_item

S

 

使一个项目不可以点击

菜单项目名

 

menu_disable_item

S

 

使一个项目允许点击

菜单项目名

 

menu_set_text

SS

 

设置一个菜单的文本

菜单项目名,要显示的文本

 

menu_move_item

SSI

 

转移一个菜单项目

要移动的项目名,目标项目名,目标位置

 

menu_add_exe

SISSS

 

增加一个菜单,点击后执行一个程序

父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,执行程序

 

menu_add_dll

SISSSS

 

增加一个菜单,点击后执行一个动态库里的函数

父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,动态库,函数

 

menu_add_func

SISSS

 

增加一个菜单,点击后执行一个系统函数

父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,系统函数

 

menu_add_csp

SISSS

 

增加一个菜单,点击后执行一个脚本的main函数

父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,脚本标识

 

例子:在主窗口脚本里定义以下脚本,用于在系统功能菜单下增加一个菜单项,点击后执行a_csp的脚本里的main函数

 

int main()

{

  //menu_list_item();

   menu_add_csp('N_Top_System',0,'item_run_a_csp','执行一个脚本a_csp','a_csp');

  return 1;

};

 

另外编写脚本a_csp如下(配置管理=>脚本工具,输入以下内容后另存为a_csp):

 

int main()

{

  msg('hello,world,a_csp');

  return 1;

};

 

 

 

menu_add_file

SISSS

 

增加一个菜单,点击后打开一个文件

父菜单名字(root表示主菜单),在父菜单位置,菜单名字,菜单中文,关联文件

 

menu_set_hot_key

SSII

 

设置菜单热键

菜单名称,字母,是否需要ctrl,是否需要alt

 

例子: 

menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','T',1,0);  //ctrl+T

menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','T',0,1);  //alt+T

menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','F5',0,1);  //alt+F5

menu_set_hot_key('tbx_Tbx_Gui_Plan_Adm','F9',0,0);  //F9

 

menu_trigger_click

S

I

触发执行一个菜单的功能

菜单名称

 

例子: 

menu_trigger_click ('tbx_Tbx_Gui_Plan_Adm');

 

menu_use

S

 

指定要操作的菜单

菜单名字

 

menu_list

 

 

显示所有的菜单名字

 

 

 

 

3.8.1   例一:主窗口中隐藏掉业务处理的菜单项目

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

 

int main()

{

  //menu_list();

  //menu_list_item();

   menu_hide_item('inv_buss');

  return 1;

};

 

 

 

3.9   打印模板脚本函数

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

print_get_cp_sum

S

 

获取指定字段当前打印页的合计(本函数只能在打印脚本里使用)

列标识

合计

print_get_sum

S

 

获取指定字段所有记录的合计(本函数只能在打印脚本里使用)

产品编号,数量

合计

get_pub_pict

S

 

获取公共图片

图片标示

 

select_printer

S

 

设置默认的打印机

打印机名称

 

print_cal_obj_height

S

I

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

对象标识

高度

 

 

 

 

 

 

 

 

 

3.10     数据库操作函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

db_run

S

I

执行一个sql语句

要执行的语句

db_go_head

 

I

指向第一条记录

db_next

 

I

指向下一条记录

db_go_row

I

I

指向某一条记录

记录偏移(第一条为0

有错0,无错1

db_row_count

 

I

获得记录数

记录数

db_field_count

 

I

获得字段数

字段数

db_res

I

S

获得指定列的值

列号

字段值

 

 

 

 

 

 

db_add_row

 

I

添加一行记录

db_set_value

IS

I

设置当前行指定列的值

列号,

db_drop_field

S

I

删除指定的列

列名

db_add_field

S

I

增加一个列

列名

db_map

SSS

I

数据字典转换

字典名,编码列名,名称列名

db_set_main_sort_id

I

I

设置第一排序列

编号

db_add_sort_id

I

I

添加排序列

编号

db_sort

 

I

排序

db_have_error

 

I

是否有sql错误

有错1,无错0

db_field_name

I

I

取字段名

字段编号

字段名

db_set_table_name

S

I

设置表的名称

表名称

db_set_field_count

I

I

设置字段数

字段数

db_set_field_name

IS

I

设置字段名称

编号,字段名

db_set_field_type

II

I

设置字段类型

编号,字段类型

db_set_field_caption

IS

I

设置字段标题

编号,字段标题

db_seek

SS…

I

根据指定字段和字段的值查找记录

是否找到

找到了返回1

未找到返回0

db_show

S

I

在界面上显示数据

窗口标题

 

db_select_area

I

I

选择一个工作区

工作区0-5

db_select_dbio

S

I

根据名称选择数据内容

数据集合的名称

 

 

 

3.10.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.10.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.10.3 例三:报表打印的时候进行记录定位

 

判断是否包含了cpu_s产品

 

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为字段名

    打印预览的时候可看到打印时传入的其它参数清单(包括一些合计大写)。

 

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参数,可以修改以上5 个参数来控制打印的位置和大小。

 

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   利用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.8   物资单据打印如何打印产品图片

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

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

 

 

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

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

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

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

获取登陆的操作员对应的员工工号

 

操作员工编号

is_user_in_group

S

I

判断登录的操作员是否在指定组里

组名字

0不在

1

get_voucher_file

IS

S

获取单据的文件

 

本函数可供在打印模版里调用意打印单据中的图片。单据模版中单据流水标识为 v_voucher_id

单据流水,文件类型

文件名

check_a_user_pwd

SS

I

验证用户名和密码是否正确

用户名,密码

1 正确

0 失败

 

 

 

 

 

 

 

 

例子:取登陆用户编号并显示

  string uid;

 

  uid=get_user_id();

  dbg(uid);

 

  int v;

  v = is_user_in_group(A分组)

 

 

 

6.2   人力资源系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

get_emp_pict

 

S

S

获取员工对应的图片文件

员工编号

图片文件名

get_emp_info

SS

S

获得员工指定信息

员工编号,列名

哪些列名可以通过在sql工具里面执行下面的语句看到:

select * from emp where 1=2

列信息

get_emp_desc

SS

S

获得员工指定描述信息

员工编号,描述信息类型

描述信息

get_emp_dept_id

S

S

获得员工所在部门编号

员工编号

部门编号

get_emp_company_id

S

S

获得员工所在公司编号

员工编号

公司编号

 

 

 

 

 

 

gen_emp_id

SI

S

生成一个新的员工编号

前缀,后续编号长度

新的员工编号

例子:

  string eid;

    eid = gen_emp_id(201112,3);

wage_get_degree_va

SS

N

这个函数获取指定级别的某工资科目的值(该值在级别工资里预先定义好)

级别,工资科目

以元为单位的值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

6.3   进销存系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

get_res_pict

 

S

S

获取产品对应的图片文件

产品编号

图片文件名

get_res_info

SS

S

获得产品指定信息

产品编号,列名

哪些列名可以通过在sql工具里面执行下面的语句看到:

select * from res where 1=2

列信息

get_res_desc

SS

S

获得产品指定描述信息

产品编号,描述信息类型

描述信息

get_res_factor_num

SS

S

获得产品折算数量

产品编号,标准数量

折算数量

get_res_num

SS

S

获得产品当前存量

产品编号,仓库编号(设为*获取所有存量)

数量

 

 

 

 

 

 

get_eba_info

SS

S

获得客户指定信息

客户编号,列名

哪些列名可以通过在sql工具里面执行下面的语句看到:

select * from eba where 1=2

 

列信息

get_eba_mem_card_info

SS

S

获得会员卡指定信息

会员卡编号,列名

哪些列名可以通过在sql工具里面执行下面的语句看到:

select * from eba_mem_card  where 1=2

 

列信息

 

 

 

 

 

 

get_sup_info

SS

S

获得供应商指定信息

供应商编号,列名

哪些列名可以通过在sql工具里面执行下面的语句看到:

select * from sup where 1=2

列信息

 

 

 

 

 

 

get_eba_attr

SS

S

获得客户自定义属性信息

客户编号,自定义属性名

自定义属性信息

 

 

 

 

 

 

get_sup_attr

SS

S

获得供应商自定义属性信息

供应商编号,自定义属性名

自定义属性信息

 

 

 

 

 

 

get_eba_group_price

SS

S

获取指定价格体系的价格

产品编号,价格体系编号

价格

have_eba_group_price

SS

I

判断是否在某价格体系中定义了

产品编号,价格体系编号

1:定义了

0:未定义

 

 

 

 

 

 

get_res_eba_map_code

SS

S

获取系统中指定产品在某企业内的编码

产品编号,企业编码

指定产品在某企业内的编码

 

 

 

 

 

 

 

 

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   统计报表

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

rep_para_set

SS

I

设置参数值

变量名称,值

 

rep_para_get

S

S

获取参数值

变量名称

rep_para_defined

S

I

判断参数是否定义了

要显示的内容

1 确定

0 取消

rep_para_list

 

I

显示报表参数

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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   例:如何设定物资默认数量

 

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

 

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

 

int init_row()

{

  inp_num=1;

  return 1;

};

 

 

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

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

 

int func_before_print()

{

  can_print=1;

  if(print_process_times>1)

    can_print=0;

  //show_v_para();

  return 1;

};

 

 

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

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.5   例:入库单中,要求必须输入批次编号,否则不允许保存

 

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.6   例:组装单中,如何在保存前自动设置主物资批次日期为第一条明细记录的批次日期?

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.7   例:用脚本控制单价列不允许修改

 

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

 

 

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

int cell_change()

{

num v;

 

         if(change_col=='discount')

         {

                  v = discount;

                   if(v<85)

                   {

                            discount=85;

                   };

         };

         return 1;

};

 

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

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;

};

 

8       报表中脚本

 

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

 

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

};

 

 

9       数据脚本

 

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

 

9.1   func_def_lmt 函数

用于定义检索条件

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

def_lmt_dict

SSS

I

定义字典型提取条件

参数标识、名称、字典标识

 

def_lmt_str

SS

I

定义字符型提取条件

参数标识、名称

 

def_lmt_date

SS

I

定义日期型提取条件

参数标识、名称

 

def_lmt_month

SS

I

定义月份型提取条件

参数标识、名称

 

 

 

 

 

 

 

 

 

9.2   func_def_imp 暂时不用

 

9.3   func_query  

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

lmt_checked

S

I

判断一个参数是否选择了

参数标识

1 选择了

0 没选择

lmt_val

S

S

获得参数值

参数标识

参数值

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

10             一些使用脚本的例子

 

10.1     工资单的四舍五入

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

 

 

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

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

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

 

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

 

 

10.2     自定义员工工号

 

问:工号的生成,可以自定义不?比如,现在是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.3     主窗口启动的时候能不能窗口化,不要最大化的

 

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

然后修改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.4     宿舍管理显示人员的电话和手机号码

 

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.5     如何把客户的价格体系名称打印在现款销售单上

 

小陈陈:我是想要把 价格体系 的数据打印出来 在现款销售 有可能吗?

 

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

};

 

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

 

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

 

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

};

 

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

 

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

 

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

 

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.8     输入进价后,系统自动形成参考售价

 

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

 

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

};

 

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

 

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

 

 

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

 

int func_before_print()

{

  //can_print=1;

  if(v_state=='A')

    can_print=0;

  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      用脚本修改报表中检索条件的文本

 

例一:

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.12      工分录入编辑中取工号和部门

 

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

 

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.13      如何在销售按单据报表中体现 净利润 = 毛利润-(费用一 + 费用二)

 

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;

};