西软FOXHIS报表专家使用说明

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

报表专家使用说明
在foxhis 系统各模块中,都提供了报表专家的功能,以满足各宾馆酒店在使用中提出的特殊报表的需求。

以下对报表专家的语法定义作详细说明。

一、 基本概念
1、 报表专家的结构
如图1为一典型报表专家,它主要由七部分组成:
图 1
下表为各部分名称及结束符的说明:
2、报表专家时需特别注意内容
⑴.数据类型。

报表专家中,用户宏及SQL语句中的计算项的定义格式均为:
数据类型 + 长度 + 序号
此处将涉及的数据类型主要为以下四种:
char :字符型 date :日期型
numb :实数型 mone :货币型
⑵.定位标识。

在报表专家中,下列符号为特定语法专用,在定义各种名称时请慎用:
‘;’,‘:’,‘!’,‘(’,‘)’,‘[’,‘]’,‘空格’,‘Tab’等。

⑶.DataWindow属性
二、报表各项定义说明
1、报表显示格式的定义
共有如下四种格式可供选择:
⑴.“_com_”:显示格式为数据窗口浏览界面。

⑵.“_com_p_”:显示报表打印格式。

⑶.“_com_P_”:直接将报表送至打印机并以打印格式打印。

⑷.空:则报表以数据窗口浏览格式显示且无格式调整键。

⑸._sim_ 简单的选择窗口
⑹._com_d_
2、标题的定义
此处的标题仅供报表窗口的Caption使用。

而报表打印界面中的标题则需在后面的文本项定义中进行特别定义。

标题结束符为分号。

例子:_com_房间帐主单及客人一览表;
3、SQL语句的定义
本部分将定义报表的主体,SQL语句的格式为:
(select …… from …… where …… );
字段名表名检索条件
注意:1、嵌套的SQL语句关键字的大小写格式应与主SQL语句关键字不同以示区别。

2、若该报表定义涉及到多个表,则应在 from 后对其进行代号别名
定义,如 guest a, master b 等。

3、子查询的关键字要区分:Select .. From .. Where ... 大小写,
计算项的逗号后面要有两个空格,包括函数substring(a, 1,
2)
列计算项遵守命名规则:与类型相关, 还需要 = 两边的空格
char021, char09 正对上面的char02 后面的前2位数字表示长度,故对超过长度是100系统不显示,要自己进行判断
numb10
mone09
date01
eg. char10 = substring(c.descript, 1, 10),mone10_1
= sum(a.arrf_w+a.arrg_w+a.arrc_w),
4、proc 写法 ,结果集的反应
exec p_aaaa '','' resultset=char09,mone10
其proc.后面也可以带相应的参数,支持宏定义
5、增加项目
char01_1=='':-;
select bmpcode,descript from rmsta_legend order by
code);char03==bitmap( nodispbmpcode ):图标;descript:解释;
就是select 中没有有,但要加个字段,有其他特殊用途的列
4、中文表头的定义
其一般格式为:
列名:中文名=长度=格式=排列
xxxx : XXXXX = 10 = 0.00 = alignment = “ 2 ”
注意日期的格式写法
xxxx : XXXXX=14=yyyy/mm/dd hh|mm=alignment = “ 2 ”
日期中的格式不能用冒号,用|号
字段名中文表头列宽数值格式
其中alignment参数设置本列数据的排列格式,其值有三种选择:
0 ——居左; 1 ——居右; 2 ——居中
各列表头之间用分号隔开,最后一个表头不带分号。

5、表头格式及其它定义
基本格式:
headerds = [ 参数1 = 值1 参数2 = 值2 …… ]
主要参数:
headerds=[header=4 player=3 footer=1 summary=2 styles=box detail.height.autosize="yes" autoappe=0]
header=4表示header为4 行
player=3表示打印模式和预览模式下的去掉header 多少行
summary=2 表示summary 有2 行空间
footer= 3表示footer有3 行空间
styles=box表示数据栏是以方框的格式体现。

shaodow box 阴影框。

3d raised 凸出框。

3d lowered 凹框。

resize 自由框。

autoappe=0表示select 字段后对应的中文字段,若没有写这选项,则列名以用原来的英文字段代替,若加上前面的参数
表示自动隐藏其没有对应字段列,同时下面对应的字段写的
位置要做相应的调整。

detail.height.autosize="yes" 表示针对某些列值的长度超过本身的
段长度时。

会进行自动换行处理,同时宽度增加。

6、预处理 -- proc写法
exec sp=p_aaa '', ''!!!
7、计算项定义(事后计算项)
基本格式:
computes=项名:计算公式:行位置::列位置::alignment=“”border=“”!其中列位置格式为:字段1:字段2 (重复时表示其宽度占一列宽) alignment 可选值:0 - Left, 1 - Right, 2 - Center
Border 可选值: 0 - None, 1- Shadow, 2 - Box, 3 - Resize, 4 –
Underline, 5 - 3D Lowered, 6 - 3D Raised
例:
computes = c_fshu:count( a.roomno for all distinct ):footer:1::
: :: alignment = “2” border = “2” !
注意.一般括号里的要求前后有空格
同时位置也可以是3.5 等这些小数值,其表示可以是中间放置的
8、文本项定义
格式:
texttext=项名:文本内容:行位置::列位置::alignment=“”border=“”!
其中各参数的定义与计算项定义一致。

例:
texttext = c_date:打印时间-#pdate# : header : 3 :: a.roomno:
c.descript :: alignment = "0" border = "0" !
在自定义报表时,只需按顺序对上述七项内容进行定义即可完成一个完整的报表。

另有下面几点内容需要说明:
一、宏的定义
在自定义报表中可能涉及到两种类型的宏:系统宏与用户宏
1、系统宏为系统事先定义的一些常用宏,在报表中可直接引用。

其格式为:
# 宏名 # ,如 #hotel# , #bdate# 等,最常见的系统宏及其含义如下:
◆#hotel#--酒店的名称
◆#pdate#--打印日期格式…yyyy年mm月dd日 hh时mm分'
◆#pc_id#--工作站地址
◆#modu_id#--模块号
◆#bdate0#--当前营业日期(中) 格式:“yyyy年mm月dd"
◆#Bdate0#--当前营业日期(英) 格式:"yyyy/mm/dd“
◆#bdate1#--上营业日期(中) 格式:“yyyy年mm月dd"
◆#Bdate1#--上营业日期(英) 格式:“yyyy/mm/dd"
◆#shift# --当前班次
◆#empno#--当前员工工号
◆#empname#--当前员工姓名
2、用户宏可在报表中自行定义,其格式为:
# 宏名!中文提示 #
其中宏名的格式为:数据类型+数据格式+ 标识(后两项可缺省)
如:# datebeg!请输入统计开始日期 # ,# numb!请输入入住次数 # 。

例子:
宏的定义分几种类型 date,char,mone,numb
select code,descript from deptdef where type='#char01!请输入类别码#' order by code;
select descript,day99 from yjierep where date='#date01!请输
入营业日期!#Bdate0##' order by class;
注:
导出的数据窗口的语法也可用用上述方法去实现宏这过程!其替换时要求去掉arguments=((...)),对应的值可按上面的写法取得
参数定义且只要定义一次,后面直接引用,后面直接引用的格式就是
#char01# ,#date01# ....;
二、SQL语句中的计算项定义
除直接引用表中已有的字段外,自定义报表还可能需要对表中的字段进行一系列的计算后生成计算项字段后引用。

其格式为:
项名 = 计算公式
其中项名的格式与宏名的格式相似:数据类型+数据格式+ 标识例: numb04 = e.i_times+1
numb104 = (select isnull(sum(b.ot),0) From hmaster_income b
Where a.cusid = b.tranlog and b.dep >= '#datebeg#' and
b.dep <= '#dateend#')
三、技巧和特殊写法
------------------------------------------------------------------
关于分组
------------------------------------------------------------------
1.位置-- 一般放在
headerds=[header=4 player=3 footer=1 summary=2 styles=box
detail.height.autosize="yes" autoappe=0 ]
的下方
2.语法
group_by=1:0:1:( "2" ) ---〉分组编号:组别头的高度:组别尾高
度:('分组标志列')
group_by=2:0:1:( "1" )
computes=s_cnt:count(a.accnt for group 2 ):trailer.2:1:::::
alignment="2" format="0"border="2"!
computes=c1_numb10_01:sum(mone100 for group 2 ):trailer.2:1::mone100:
mone100::alignment="1" border="2" format="0.00"!
computes=s_cnt1:count( a.accnt for group 1 ):trailer.1:1:::::
alignment="2" format="0"border="2"!
computes=c1_numb10_02:sum( mone100 for group 1 ):trailer.1:1::mone100: mone100::alignment="1" border="2" format="0.00"!
过程要求先对group 2 ,然后对group 1 做
3.band 的写法
header.1header.2
trailer.1trailer.2
------------------------------------------------------------------
●关于复合报表头
------------------------------------------------------------------
原理: 1. 空框覆盖-- 带边框
2. 位置微调 4.5/1 3/2 --- 不带边框
texttext=t_1::header:1/2::c.des:c.des::alignment="2"!
texttext=t_2:aaaaa:header:1.5/1::c.des:c.des::alignment="2" border="0"!
------------------------------------------------------------------
●关于: 冒号的用途如日期格式.
------------------------------------------------------------------
由于: 在其中是作为辨别标记的,所有本来需要用: 的地方,用| 替换
------------------------------------------------------------------------
●关于: 列值替换的写法
------------------------------------------------------------------------
如: 班次1,2,3,4 在列中,想用中文显示
select a.shift ,b.empno….. from …..
对应列的写法: char04== if(a_shift1='1','早班', if(a_shift1=‟2‟,‟中班‟,'/人')): 特殊;
eg:
computes=exp:if(nodispa_shift5='1','早',if(nodispa_shift5='2','中',if(nodispa_shift5='3','晚','夜'))):detail:1::char03:char03::border="1" alignment="2"!
注意:在计算列中带if 条件的话,要加nodisp
------------------------------------------------------------------
●关于crosstab
------------------------------------------------------------------
sql=[exec p_gds_auto_cross]
play=[row:char081=12 col:char082=10 val:numb081]
title=[营业日报综合分析报告]
mm=format=[0.00] //数据项的格式定义
headerds=[header=6 player=5 styles=box summary=5 footer=3]
//针对HEADER的定义
genput=[
computes=p_yshu:'页次' + string(page(),'0')+'/'+string(pagecount(),'0'): header:5::c?:c?::alignment="2" border="0"!
computes=c_0:'aaaaaaaaaaaa':header:4::c1:c3::alignment="2"!
texttext=t_d1:aaaaaaa #empno# aaaaaaaaaa:header:5::c1:c?::alignment="2"! texttext=t_s1:summary--------------1:summary:1::c1:c?::alignment="2"!
texttext=t_s2:summary--------------2:summary:2::c1:c?::alignment="2"!
texttext=t_s3:summary--------------3:summary:3::c1:c?::alignment="2"!
texttext=t_f1:footer--------------1 gds:footer:1::c1:c?::border="0" alignment="0"! texttext=t_f2:footer--------------2 #hotel#:footer:2::c1:c?::border="0" alignment="0"!
texttext=t_f3:footer--------------3 #pdate#:footer:3::c1:c?::border="2" alignment="0"!]
------------------------------------------------------------------
●可以直接倒入.srd
------------------------------------------------------------------
若要带入参数,可以用上面的宏定义引用,参照上面参数引用说明!
------------------------------------------------------------------
●也可以直接放入数据窗口的名称程序调用时的用法!
------------------------------------------------------------------
注意参数的类型写法:
dataobject:d_gl_accnt_daycred;c: ;c:HRY;DT:2003.01.01)
--------------------------------------------------------------------
●图形风格列表的写法
--------------------------------------------------------------------
参考例子
win_title=[标题],
/*
窗口标题
*/
sql=[sql语句,可以使用宏替换等],
注明:sql 语句之间的字段必须是空格+’,’+空格分开
同时不能有mone类型
要求的类型为 char,deci,date,numb 型,其他不支持
同时宏替换时对字符类型要求用双引号分开
/* 数据源*/
set=[graphtype="9"color="128"backcolor="79741120"category="char10"
values="yjourrep_day,avg(yjourrep_day)" depth="20"
series="'出租率','@overlay~t平均收入'"],
注: 对应的字段必须是表名+’_’ +’字段名’
若是numb 等类型. 则直接写相关的内容如: numb101 ,char10 等
graphtype="9" 表示图形类型, 可以自己试,就知道对应类型是哪个!
/*
设置结果集,图形的类型图形颜色背景颜色图角横坐标标题
显示值平均值显示间隔
图列颜色的说明.
*/
gtitle=[title="本月餐饮收入走势" autosize="0" font.italic="1" font.height="-20"],
/*
图形标题写法,字体是否斜体的写法
*/
legend=[legend="4" color="0" backcolor="536870912" textcolor="128" autosize="0"height="-16" displayexpression="category+'-'+sumforcategory"]
/*
联想内容, 取图形的最好状态legend=4 表示选择第 4 类图形
*/
catagory=[label="日期" droplines="0" secondaryline="0" displayeverynlabels="2" dsp.autosize="1" dsp.font.height="-11" dsp.font.escapement="450" lb.autosize="1" lb.font.height="-16" lb.font.escapement="0" sort="0"],
注: displayeverynlabels="1" 为显示横坐标内容间隔多少显示
横坐标的写法
*/
value=[label="金额" dsp.autosize="1" dsp.fontcolor="128" dsp.font.height="-12" dsp.font.escapement="450" lb.autosize="0" lb.font.height="-16" lb.font.escapement="900" lb.textcolor="0" sort="0"]
/*
纵坐标的写法
*/
西软开发一部
黄向伟重新整理
2003-07-15。

相关文档
最新文档