1     脚本语言... 3

1.1      介绍说明... 3

1.2      应用场景... 3

2     语法介绍... 4

2.1      类型... 4

2.2      运算... 4

2.3      控制... 5

2.4      内置函数... 6

2.5      自定义函数... 6

2.6      注释... 6

3     内置函数... 7

3.1      显示提示函数... 7

3.2      输入控制函数... 7

3.3      参数访问函数... 8

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

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

3.6      单据操作函数... 12

3.7      打印模板脚本函数... 12

3.8      数据库操作函数... 13

3.9      更多函数... 13

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

4.1      相关参数... 17

4.2      函数清单... 17

4.2.1       main. 17

4.2.2       func_gopage. 17

4.2.3       func_gorow. 17

4.2.4       func_gorow_blank. 17

4.2.5       before_draw_obj() 17

4.3      例子... 18

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

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

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

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

4.4      其它参考... 19

5     应用函数... 20

5.1      公共函数... 20

5.2      人力资源系统... 20

5.3      进销存系统... 20

6     物资单据的事件... 22

6.1      函数清单... 22

6.1.1       create_voucher 22

6.1.2       func_show. 22

6.1.3       init_row. 22

6.1.4       cell_change. 22

6.1.5       obj_change. 22

6.1.6       func_before_print 22

6.1.7       func_after_print 22

6.1.8       func_after_check. 22

6.1.9       adjust_row. 23

6.2      例:如何限定打印只打印一次... 23

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

7     一些使用脚本的例子... 24

7.1      工资单的四舍五入... 24

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

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

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

7.5      如何自己定义年休标准规则... 26

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

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

7.8     自定义保险标准的计算方法... 27

 

1       脚本语言

1.1   介绍说明

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

 

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

 

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

 

1.2   应用场景

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

打印模板的控制

单据的控制(进销存)

界面的调整

权限的特殊控制

 

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

 

 

2       语法介绍

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

 

2.1   类型

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

 

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   输入控制函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

inp_clear

 

 

清除内容

 

 

inp_get_val

 

 

获得指定变量的值

变量

变量值

inp_set_val

 

 

设置一个变量的值

变量标识,变量值

 

inp_def_dict

 

 

定义一个选择型的变量

变量标识,变量意义,字典编号

 

inp_def_string

 

 

定义一个字符型的变量

变量标识,变量意义

 

inp_def_date

 

 

定义一个日期型的变量

变量标识,变量意义

 

inp_def_month

 

 

定义一个月份型的变量

变量标识,变量意义

 

inp_def_int

 

 

定义一个整数型的变量

变量标识,变量意义

 

inp_select

 

 

选择变量组

变量组标识

 

inp_para

 

 

弹出窗口,输入相关参数

 

 

 

 

 

 

 

 

 

例子:

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

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

  inp_para();

  inp_num=inp_get_val('mnum')

 

3.3   参数访问函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

para_set

SS

I

设置参数值

变量名称,值

 

para_get

S

S

获取参数值

变量名称

值

para_defined

S

I

判断参数是否定义了

要显示的内容

1 确定

0 取消

 

 

 

 

 

 

 

 

 

3.4   界面控件操作函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

gui_list_inp_all

 

 

显示当前窗口所有输入控件

 

 

gui_list_inp

S

 

显示指定名称控件包含的输入控件内容

控件的名称

 

gui_list_all

 

 

显示当前窗口所有控件

 

 

gui_list

S

 

显示指定名称控件包含的控件内容

控件的名称

 

gui_hide

S

 

隐藏一个控件

控件的名称

 

gui_show

S

 

显示一个控件

控件的名称

 

gui_disable

S

 

使得一个控件不可操作

控件的名称

 

gui_enable

S

 

使得一个控件允许操作

控件的名称

 

gui_set_val

SS

 

设置指定控件的内容

控件的名称,要设置的值

 

gui_get_val

S

 

获取指定控件的内容

控件的名称

指定控件的内容

gui_set_text

SS

 

设置指定控件的标签

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

 

gui_get_text

S

 

获取指定控件的标签

控件的名称

指定控件的标签

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

 

gui_set_x

SI

 

设置控件的横坐标

控件的名称,x

 

gui_set_y

SI

 

设置控件的纵坐标

控件的名称,y

 

gui_set_w

SI

 

设置控件的宽度

控件的名称,宽度

 

gui_set_h

SI

 

设置控件的高度

控件的名称,高度

 

gui_set_font_size

SI

 

设置控件的字体大小

控件的名称,大小

 

gui_set_font_name

SS

 

设置控件的字体名称

控件的名称, 字体名称

 

gui_get_x

S

I

获取控件的横坐标

控件的名称

x

gui_get_y

S

I

获取控件的纵坐标

控件的名称

y

gui_get_w

S

I

获取控件的宽度

控件的名称

宽度

gui_get_h

S

I

获取控件的高度

控件的名称

高度

 

 

 

 

 

 

gui_set_parent

SS

I

改变控件的上级区域

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

Exam:

gui_set_parent('Label15','Panel5');

 

 

 

 

 

 

 

attr_enter

 

I

进入属性管理域

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

attr_leave

 

I

进入窗口管理域

 

 

 

 

 

 

 

 

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

 

int obj_change()

{

  //change_obj

  int card_id;

  string sql;

 

  if(change_obj=='ComboBox_Ext_Linkman')

  {

       card_id = gui_get_val('ComboBox_Ext_Linkman');

       if(card_id>0)

       {

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

         db_run(sql);

         if(db_row_count()>0)

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

       };

  };

  // gui_list_inp_all();

  return 1;

};

 

 

3.5   表格控件操作函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

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

grid_hide_col

SS

 

隐藏列

表格的名称,列名

 

grid_set_col_width

SSI

 

设置列宽

表格的名称,列名,宽度

 

grid_set_col_pos

SSI

 

设置列位置

表格的名称,列名,位置

 

grid_add_col_str

SSS

 

增加字符型列

表格的名称,列名,标题

 

grid_add_col_num

SSS

 

增加数值型列

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

 

grid_add_col

SSSI

 

增加列

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

 

grid_row_num

S

I

获取记录数

表格的名称

行记录数

grid_col_num

S

I

获取列数

表格的名称

列记录数

grid_cur_row

S

I

获取当前行号

表格的名称

行记录号

grid_cur_col

S

I

获取当前列号

表格的名称

列记录号

grid_set_v

SSIS

I

获取单元内容

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

 

grid_get_v

SSI

S

设置单元内容

表格的名称,列名,行

内容

grid_mark_sum

SS

I

标记一个列显示合计数

表格的名称,列名

 

grid_unmark_sum

SS

I

设置一个列不显示合计数

表格的名称,列名

 

grid_mark_readonly

SS

I

标记一个列只能读

表格的名称,列名

 

grid_unmark_readonly

SS

I

设置一个列可以写

表格的名称,列名

 

 

 

 

 

 

 

 

 

 

 

3.6   单据操作函数

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

v_mark_sum

S

 

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

列标识

 

v_mark_col_readonly

SI

 

标记一个列是否只读

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

 

vr_add_res

SS

 

增加物资

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

产品编号,数量

 

 

 

 

 

 

 

attr_get_val

S

S

获取单据扩展属性的值

属性标识

属性值

attr_set_val

SS

I

设置单据扩展属性的值

属性标识,属性值

 

 

 

 

 

 

 

 

 

3.7   打印模板脚本函数

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

print_get_cp_sum

S

 

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

列标识

合计

print_get_sum

S

 

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

产品编号,数量

合计

get_pub_pict

S

 

获取公共图片

图片标示

 

select_printer

S

 

设置默认的打印机

打印机名称

 

 

 

 

 

 

 

 

 

 

3.8   数据库操作函数

 

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

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

db_run

S

I

执行一个sql语句

要执行的语句

无

db_go_head

 

I

指向第一条记录

无

无

db_next

 

I

指向下一条记录

无

无

db_row_count

 

I

获得记录数

无

记录数

db_field_count

 

I

获得字段数

无

字段数

db_res

I

S

获得指定列的值

列号

字段值

 

 

 

 

 

 

db_add_row

 

I

添加一行记录

无

无

db_set_value

IS

I

设置当前行指定列的值

列号,值

无

db_drop_field

S

I

删除指定的列

列名

无

db_add_field

S

I

增加一个列

列名

无

db_map

SSS

I

数据字典转换

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

无

db_set_main_sort_id

I

I

设置第一排序列

编号

无

db_add_sort_id

I

I

添加排序列

编号

无

db_sort

 

I

排序

无

无

db_have_error

 

I

是否有sql错误

五

有错1,无错0

db_field_name

I

I

取字段名

字段编号

字段名

db_set_table_name

S

I

设置表的名称

表名称

无

db_set_field_count

I

I

设置字段数

字段数

无

db_set_field_name

IS

I

设置字段名称

编号,字段名

无

db_set_field_type

II

I

设置字段类型

编号,字段类型

无

db_set_field_caption

IS

I

设置字段标题

编号,字段标题

无

db_select_area

I

I

选择一个工作区

工作区0-5

无

 

 

 

 

 

 

 

 

3.9   更多函数

 

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

run_line

S

S

执行一个语句

要执行的语句

执行的结果

 

 

 

int main()

{

string l,s;

int i;

 

  l = '"abc"+"def"';

  s=run_line(l);

  msg(s);

  l = '1+2*3';

  i=run_line(l);

  msg(i);

 

  return 1;

};

 

上面的代码会输出 abcdef和7

 

 

 

 

 

 

 

dt_get_name

SS

S

获取字典对应字典意义

字典标识,字典取值编码

字典意义

dt_get_code

SS

S

获取字典意义对应的字典编码

字典标识,字典意义

字典编码

 

 

 

 

 

 

fen_to_yuan

S

S

字符表达的分转换为元

字符表达的分

字符表达的元

one_cap

SI

S

取得金额其中一位的大写

字符表达的元

大写表达

one_digit

SI

S

取得金额其中一位的小写

字符表达的元

小写表达

money_cap

S

S

取得金额的大写

字符表达的元

大写表达

 

 

 

 

 

 

num_dec_cut

SI

S

数字四舍五入

串,小数位数

结果字符串

num_2_grp

S

S

转换数值用分组方式表达

  123456.78 => 123,456.78

要转换的数值

转换后数值

 

 

 

 

 

 

fmt_date

SS

S

格式化日期

标准日期yyyymmddhhmiss,格式化串

格式化后的串

fmt_time

SS

S

格式化时刻

标准时刻hhmiss,格式化串

格式化后的串

get_cur_date

 

S

取当天日期

无

日期yyyymmdd

get_cur_fmt_date

S

S

取格式化的当天日期

格式化串

格式化后的当天日期

get_cur_time

 

S

取当前时刻

无

时刻hhmiss

get_cur_fmt_time

S

S

取格式化的当前时刻

格式化串

格式化后的当前时刻

get_cur_month

S

S

取当天月

无

月yyyymm

get_cur_year

S

S

取当天年

无

年yyyy

get_month_days

S

I

取指定月份的天数

月份yyyymm

天数

get_year_days

S

I

取指定年份的天数

年份yyyy

天数

date_to_second

S

I

日期转换为秒数

标准日期yyyymmddhhmiss

秒数

time_to_second

S

I

时刻转换为秒数

标准时刻hhmiss

秒数

get_last_month

S

S

取上一月

标准月yyyymm

上一月

get_last_year

S

S

取上一年

标准年yyyy

上一年

get_next_date

S

S

取下一天

标准日期yyyymmdd

下一天

get_last_date

S

S

取上一天

标准日期yyyymmdd

上一天

get_month_between

SS

I

取2个日期的月份差

开始日期,结束日期

月数

get_day_between

SS

I

取2个日期的天数差

开始日期,结束日期

天数

get_week_id

S

I

取日期对应的星期

标准日期yyyymmdd

星期1-7

is_date_valid

S

I

盘点一个日期是否合法

标准日期yyyymmdd

合法1,非法0

std_inp_date

S

S

从一个输入的串中取出日期

输入串

标准日期yyyymmdd

std_inp_time

S

S

从一个输入的串中取出时刻

输入串

标准时刻hhmiss

 

 

 

 

 

 

strlen

S

I

计算字符串的长度

字符串

长度

strcmp

SS

I

比较2个字符串大小

串1,串2

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

strncmp

SSI

I

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

串1,串2,比较长度

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

str_get_sub

SII

S

返回部分子串

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

结果字符串

str_pos

SS

I

返回串2在串1中的位置

串1,串2

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

str_add_as_num

SS

S

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

串1,串2

结果字符串

str_sub_as_num

SS

S

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

串1,串2

结果字符串

str_std_num

SI

S

字符串数字补齐小数位数

串,小数位数

结果字符串

lower

S

S

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

指定串

结果字符串

upper

S

S

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

指定串

结果字符串

str_cut

SI

S

字符串截断

串,最大长度

结果字符串

to_int

S

I

字符串转整数

串

结果数

to_float

S

F

字符串转浮点数

串

结果数

fmt_float

FS

S

浮点数转格式字符串

数值,格式

结果串

fmt_int

IS

S

整数转格式字符串

数值,格式

结果串

mod

II

I

2个整数取余

数值1,数值2

结果

 

 

 

 

 

 

system

S

I

执行外部程序

外部程序

 

shell

S

I

执行外部程序

外部程序

 

 

 

 

 

 

 

get_ip

 

S

获取本机ip地址

 

Ip地址

write_port

SS

I

写串口并口

第一参数如 com1 lpt1

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

 

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

 

check_thr_err

 

I

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

如果有会弹出信息

 

 

 

 

 

 

 

 

 

 

4       打印脚本的事件

 

4.1   相关参数

下面的参数可以在打印控制脚本中加以引用:

 

       本页记录数 cp_row_num

本页记录数 cp_row_num

    总页数 page_count

    当前页码 page_id

    当前记录号 record_id

记录总数 record_count

    总页数 page_count

    当前页码 page_id

    打印份号 print_copy_id

    当前记录号 record_id

记录总数 record_count

 

    本页小计 cp_xxxx 后面的xxxx为字段名

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

 

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.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’,现在需要打印为 ‘yyyy年mm月dd日’这种格式:

 

在模板上增加一个对象 my_print_time,然后在main函数里面进行脚本赋值。

 

int main()

{

string sub;

  sub = str_get_sub(v_print_time,0,4);

  sub = sub + '年';

  sub = sub + str_get_sub(v_print_time,5,2);

  sub = sub + '月';

  sub = sub + str_get_sub(v_print_time,8,2);

  sub = sub + '日';

 

  my_print_time = sub;

  return 1;

};

 

 

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

 

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.4   根据打印内容长度设置明细的行高度

 

int func_cal_row_height()

{

  if(strlen(d_res_name)>=16)

    row_height_add=400;

  return 1;

};

 

 

 

4.4   其它参考

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

 

5       应用函数

5.1   公共函数

函数名

参数格式

返回类型

函数功能

参数意义

返回值

get_user_id

 

S

获取登陆的操作员编号

 

操作员编号

get_user_name

 

S

获取登陆的操作员姓名

 

操作员姓名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

  string uid;

 

  uid=get_user_id();

  dbg(uid);

 

 

5.2   人力资源系统

函数名

参数格式

返回类型

函数功能

参数意义

返回值

get_emp_pict

 

S

S

获取员工对应的图片文件

员工标识

图片文件名

get_emp_info

SS

S

获得员工指定信息

员工编号,列名

列信息

get_emp_desc

SS

S

获得员工指定描述信息

员工编号,描述信息类型

描述信息

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5.3   进销存系统

 

函数名

参数格式

返回类型

函数功能

参数意义

返回值

get_res_pict

 

S

S

获取产品对应的图片文件

产品标识

图片文件名

get_res_info

SS

S

获得产品指定信息

产品编号,列名

列信息

get_res_desc

SS

S

获得产品指定描述信息

产品编号,描述信息类型

描述信息

get_res_factor_num

SS

S

获得产品折算数量

产品编号,标准数量

折算数量

 

 

 

 

 

 

get_eba_info

SS

S

获得客户指定信息

客户编号,列名

列信息

 

 

 

 

 

 

get_sup_info

SS

S

获得供应商指定信息

供应商编号,列名

列信息

 

 

 

 

 

 

get_eba_attr

SS

S

获得客户自定义属性信息

客户编号,自定义属性名

自定义属性信息

 

 

 

 

 

 

get_sup_attr

SS

S

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

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

自定义属性信息

 

 

 

 

 

 

get_eba_group_price

SS

S

获取指定价格体系的价格

产品编号,价格体系编号

价格

have_eba_group_price

SS

I

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

产品编号,价格体系编号

1:定义了

0:未定义

 

 

 

 

 

 

get_res_eba_map_code

SS

S

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

产品编号,企业编码

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

 

 

 

 

 

 

 

 

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

 

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

 

m_res_ext_1 = get_res_info(m_res_id,'ext_1')

 

 

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

 

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

 

res_ext_1 = get_res_info(res_id,'ext_1')

 

 

 

 

6       物资单据的事件

 

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

change_row_id 明细当前的行记录号

 

6.1   函数清单

6.1.1   create_voucher

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

 

6.1.2   func_show

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

 

6.1.3   init_row

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

 

6.1.4   cell_change

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

 

6.1.5   obj_change

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

 

6.1.6   func_before_print

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

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

 

6.1.7   func_after_print

该函数在打印后调用。

 

6.1.8   func_after_check

该函数在审核后调用。

 

6.1.9   adjust_row

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

 

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

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

 

int func_before_print()

{

  can_print=1;

  if(print_process_times>1)

    can_print=0;

  //show_v_para();

  return 1;

};

 

 

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

在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       一些使用脚本的例子

 

7.1   工资单的四舍五入

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

 

 

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

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

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

 

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

 

 

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

 

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;

};

 

 

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

 

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

 

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

};

 

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

 

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

 

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

};

 

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

 

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

 

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

 

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;

};

 

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

 

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

 

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

};

 

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

 

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

 

 

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

 

int func_before_print()

{

  //can_print=1;

  if(v_state=='A')

    can_print=0;

  return 1;

};

 

 

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

 

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

 

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;

};

 

 

7.9      用脚本修改报表中检索条件的文本

 

int load_ext()

{

  attr_enter();

  //gui_list_all();

  gui_set_text('chk_top_edt_id','sads');

  attr_leave();

  return 1;

};