西软报表专家使用说明

 

在Foxhis系统各模块中,都提供了报表专家的功能,以满足各宾馆酒店在使用中提出的特殊报表需求,以下是报表专家的语法定义做详细说明。

一、基本概念

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

b.name : b.name :: 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:( "j.name2" ) --- 〉分组编号:组别头的高度:组别尾高
度:('分组标志列')
group_by=2:0:1:( "j.name1" )
computes=s_cnt:count(a.accnt for group 2 ):trailer.2:1::a.name:a.name::
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::a.name:a.name::

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" 为显示横坐标内容间隔多少显示
- 10 -
/*
横坐标的写法
*/
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

 

 

 

 

猜你喜欢

转载自www.cnblogs.com/landv/p/9150707.html