用友UFO报表高级应用 二次开发

[文章] 浏览(40)  | 2018年02月03日  | 支持服务 | 
[标签]UFO报表,用友畅捷通

目录

一、UFO报表的高级功能

1、报表汇总

2、报表审核

3、舍位平衡

4、可变表的使用

5、透视的应用

6、图表功能的应用

二、常用业务函数介绍

三、各系统中帐表管理的使用(自定义报表的应用)

四、UFO报表的二次开发

1、批命令介绍

2、自定义菜单

UFO报表的高级功能

一、报表汇总

报表的汇总是报表数据不同形式的叠加。利用UFO提供的汇总功能就可以快速、简捷地完成报表汇总操作。UFO提供了表页汇总可变区汇总两种汇总方式,表页汇总是把整个报表的数据进行立体方向的叠加,汇总数据可以存放在本报表的最后一张表页或生成一个新的汇总报表。可变区汇总是把指定表页中可变区数据进行平面方向的叠加,把汇总数据存放在本页可变区的最后一行或一列。表页汇总UFO的表页汇总功能非常强大,即可把汇总数据保存在本报表中,也可形成一个新的汇总表;即可汇总报表中所有的表页,也可只汇总符合指定条件的表页,例如在1996年全年各月共12张表页中,汇总上半年的表页;报表中的可变区即可按数据位置汇总,也可重新排列顺序,按各项内容汇总。

操作步骤:

1、点击“格式/数据”按钮,进入数据状态。

2、点击[数据]菜单中的[汇总],在下拉菜单中点击[表页],将弹出“表页汇总─步骤1/3”对话框,此对话框用于指定表页汇总数据保存的位置。

  • 如果要把汇总结果保存在本报表中,请点击“汇总到本表最后一张表页”单选钮。UFO将自动追加一张表页,并把汇总数据存在这张表页中。
  • 如果要把汇总结果保存在一个新的报表中,请点击“汇总到新的报表”单选钮,并且在编辑框中输入路径和新的报表名,省略路径时表示在当前目录下。
  • 如果输入的报表名是一个已存在的报表,将删除此报表原有内容!

3、点击“下一步”按钮,将弹出“表页汇总─步骤2/3”对话框,此对话框用于指定汇总哪些表页。

  • 如果要汇总报表中所有的表页,请点击“下一步”按钮。
  • 如果汇总报表中的部分表页,在“表页汇总条件”中定义条件。可以以单元的值为汇总条件,或者以关键字的值为汇总条件,或者以表页号为汇总条件。汇总条件可以有多个,它们之间是“并且”或“或者”的关系。点击“并且”“或者”“加入”按钮可以使汇总条件进入“汇总条件编辑框”。如果您对UFO比较熟悉,也可直接在“汇总条件编辑框”输入和修改汇总条件。
  • 以单元的值为汇总条件在左边编辑框中输入单元名称,在中间编辑框中选择关系运算符,在右边编辑框中输入单元的值。注意:如果单元的值为字符时,应加上双引号""。例如:“A10>=500”表示汇总A10单元的值大于等于500的表页,忽略A10单元的值小于500的表页。
  • 以关键字的值为汇总条件
    在左边编辑框中选择已设置的关键字,在中间编辑框中选择关系运算符,在右边编辑框中选择关键字的值。
    例如:“年=1996AND月>6”表示汇总1996年下半年的表页。
  • 以表页号为汇总条件在左边编辑框中输入表页号函数“MREC()”,在中间编辑框中选择关系运算符,在右边编辑框中输入表页号。
    例如:“MREC()>=5ANDMREC()<=10”表示汇总第5页到第10页的表页。

4、点击“下一步”按钮后,将弹出“表页汇总─步骤3/3”对话框,此对话框用于处理报表中的可变区。

点击“按物理位置汇总”后,UFO将忽略可变区数据的实际意义,直接把可变区数据按位置叠加。

点击“按关键值汇总”后,在关键值列表框中选择一个关键值,此关键值为行可变区的某一列或者列可变区的某一行。如果此关键值为字符型,则将按照关键值的顺序进行汇总;如果此关键值为数值型,则只对此关键值进行物理汇总,可变区中的其他数据不汇总。

5、点击“完成”按钮后将生成汇总结果。

UFO将自动给汇总表页设置“表页不计算”标志。

可变区汇总

对可变表除了可以进行表页汇总外,还可以对可变区的数据进行平面方向的汇总。执行可变区汇总后,UFO在进行可变区汇总的表页中自动追加一个可变行或可变列,把汇总结果保存在其中。既可对所有表页进行可变区汇总,也可对部分表页进行可变区汇总,例如在1996年全年各月共12张表页中,汇总上半年的表页中的可变区数据;在进行可变区汇总的表页中,即可汇总整个可变区,也可只汇总部分可变区。

操作步骤:

1、点击“格式/数据”按钮,进入数据状态。

2、点击[数据]菜单中的[汇总],在下拉菜单中点击[可变区],将弹出“可变区汇总─步骤1/2”对话框,此对话框用于指定对报表中哪些表页进行可变区汇总。

在“表页汇总条件”框中选择要进行可变区汇总的表页,缺省为汇总当前表页。在“汇总条件编辑框”中输入“ALL”表示对所有表页进行可变区汇总。可以以单元的值为汇总条件,或者以关键字的值为汇总条件,或者以表页号为汇总条件。汇总条件可以有多个,它们之间是“并且”或“或者”的关系。点击“并且”“或者”“加入”按钮可以使汇总条件进入“汇总条件编辑框”。如果您对UFO比较熟悉,也可直接在“汇总条件编辑框”输入和修改汇总条件。

  • 以单元的值为汇总条件在左边编辑框中输入单元名称,在中间编辑框中选择关系运算符,在右边编辑框中输入单元的值。
    注意:如果单元的值为字符时,应加上双引号""。
    例如:“A10>=500”表示汇总A10单元的值大于等于500的表页,忽略A10单元的值小于500的表页。
  • 以关键字的值为汇总条件在左边编辑框中选择已设置的关键字,在中间编辑框中选择关系运算符,在右边编辑框中选择关键字的值。
    例如:“年=1996AND月>5”表示汇总1996年下半年的表页。
  • 以表页号为汇总条件在左边编辑框中输入表页号函数“MREC()”,在中间编辑框中选择关系运算符,在右边编辑框中输入表页号。
    例如:“MREC()>=5ANDMREC()<=10”表示汇总第5页到第10页的表页。

3、点击“下一步”按钮后,将弹出“可变区汇总─步骤2/2”对话框,此对话框用于指定汇总可变区中的哪些可变行(可变列)。

如果要汇总整个可变区,请点击“完成”按钮。?如果只汇总部分可变区,则在“可变区汇总条件”框中定义条件。可以以单元的值为可变区汇总条件,或者以行可变区中的一列(或者列可变区中的一行)的值为可变区汇总条件。汇总条件可以有多个,它们之间是“并且”或“或者”的关系。点击“并且”、“或者”“加入”按钮可以使可变区汇总条件进入“可变区汇总条件编辑框”。

如果您对UFO比较熟悉,也可直接在“可变区汇总条件编辑框”输入和修改条件。

  • 以单元的值为可变区汇总条件在左边编辑框中输入单元名称,单元名称必须为“V_”形式。在中间编辑框中选择关系运算符,在右边编辑框中输入单元的值。注意:如果单元的值为字符时,应加上双引号""。
    例如:“V_A1>=500”表示汇总V_A1单元的值大于等于500的可变行(可变列)。
  • 以行可变区中的一列(或者列可变区中的一行)的值为可变区汇总条件在左边编辑框中列出了行可变区的所有列(或者列可变区的所有行)在其中选择一个。,在中间编辑框中选择关系运算符,在右边编辑框中输入一个值。
    例如:“V_A>1000”表示汇总V_A列数据大于1000的可变行。

4、点击“完成”按钮后生成可变区汇总的结果。

注意:

  • 如果某个表页中的可变区数量已超出设置的可变区大小,则该表页的可变区汇总结果将无法保存。
  • 对于字符型数据的汇总,如果字符串不同,则汇总结果为最后一个字符单元的内容。

二、报表审核

在经常使用的各类财经报表中的每个数据都有明确的经济含义,并且各个数据之间一般地都有一定的勾稽关系。如在一个报表中,小计等于各分项之和;而合计又等于各个小计之和等等。在实际工作中,为了确保报表数据的准确性,我们经常用这种报表之间或报表之内的勾稽关系对报表进行勾稽关系检查。一般地来讲,我们称这种检查为数据的审核。

UFO系统对此特意提供了数据的审核公式,它将报表数据之间的勾稽关系用公式表示出来,我们称之为审核公式。

1、定义报表审核关系

在报表格式设计状态下,用鼠标选取菜单“数据”-“编辑公式”-“审核公式?”命令,调出“定义审核关系”对话框。按照对话框右侧的格式范例输入审核公式。审核公式编辑完毕,检查无误后选择“确认”,系统将保存此次审核公式的设置。按[ESC]键或选择“取消”将放弃此次操作。

2、本表内的审核公式

假设我们要审核调查表“as02.rep”。

该表有以下审核关系,希望审核时达到这样的效果:

C9=C5+C6+C7+C8,若此项关系不平,则提示“一季度小计不等!”

D9=D5+D6+D7+D8,若此项关系不平,则提示“二季度小计不等!”

E9=E5+E6+E7+E8,若此项关系不平,则提示“三季度小计不等!”

F9=F5+F6+F7+F8,若此项关系不平,则提示“四季度小计不等!”

G9=G5+G6+G7+G8,若此项关系不平,则提示“合计不等于各项小计之和!”

该表的审核公式为:

C9=C5+C6+C7+C8MESSAGE“一季度小计不等!”

D9=D5+D6+D7+D8MESSAGE“二季度小计不等!”

E9=E5+E6+E7+E8MESSAGE“三季度小计不等!”

F9=F5+F6+F7+F8MESSAGE“四季度小计不等!”

G9=G5+G6+G7+G8MESSAGE“合计不等于各项小计之和!”

3、各表间的审核公式

假设我们要审核调查表“as02.rep”,该表数据部分来自调查表“as021.rep”。

下表为“as021.rep”:

下表为“as02.rep”:

调查表“as02”中一季度的数据来自调查表“as021.rep”,调查表“as02”中应有以下审核关系,希望审核时达到这样的效果:

C5=调查表“as021.rep”的F5,若此项关系不平,则提示“一季度部门一数据与表“as02.rep”数据不符!”

C6=调查表“as021.rep”的F6,若此项关系不平,则提示“一季度部门二数据与表“as02.rep”数据不符!”

C7=调查表“as021.rep”的F7,若此项关系不平,则提示“一季度部门三数据与表“as02.rep”数据不符!”

C8=调查表“as021.rep”的F8,若此项关系不平,则提示“一季度部门四数据与表“as02.rep”数据不符!”

调查表的审核公式为:

C5=“as021.rep”->F5MESSAGE“一季度部门一数据与表“

as02.rep”数据不符!”C6=“as021.rep”->F6MESSAGE“一季度部门二数据与表“

as02.rep”数据不符!”C7=“as021.rep”->F7MESSAGE“一季度部门三数据与表“

as02.rep”数据不符!”C8=“as021.rep”->F8MESSAGE“一季度部门四数据与表“

as02.rep”数据不符!”

4、审核公式组

一个报表中常常存在着许多平衡关系。编辑审核公式时,类似的平衡关系可以放在一个审核公式组中,这样可以使审核公式更加简明。审核公式成组应遵循以下原则:

一个报表可以存在多个审核公式组,每个审核公式组中各审核公式的筛选条件和关联条件完全相同,共用一条提示信息。

筛选条件、关联条件、提示信息有所不同的审核公式应分为不同的审核公式组。

提示信息应尽量详细明确,以便于检查错误。

下面仍以调查表“as02.rep”为例,该表不同季度数据来自调查表“as021.rep”的不同表页。

下表为“as021.rep”:

下表为“as02.rep”:

调查表“as02”中对应调查表“as021”有以下取数关系:

C5:C8=调查表“as021.rep”一季度,即关键字“季”为1的表页的F5:F8。

D5:D8=调查表“as021.rep”二季度,即关键字“季”为2的表页的F5:F8。

E5:E8=调查表“as021.rep”三季度,即关键字“季”为3的表页的F5:F8。

F5:F8=调查表“as021.rep”四季度,即关键字“季”为4的表页的F5:F8。

调查表“as02”本身还应有如下合计关系:
C9=C5+C6+C7+C8

D9=D5+D6+D7+D8

E9=E5+E6+E7+E8

F9=F5+F6+F7+F8

G9=G5+G6+G7+G8

以及

G5=C5+D5+E5+F5

G6=C6+D6+E6+F6

G7=C7+D7+E7+F7

G8=C8+D8+E8+F8

G9=C9+D9+E9+F9

因此,调查表“as02.rep”的审核公式可以这么写:

C5=“as021.rep”->F5,

C6=“as021.rep”->F6,

C7=“as021.rep”->F7,

C8=“as021.rep”->F8

RELATION1WITH“as021.rep”->季

MESSAGE“一季度数据错误!”

D5=“as021.rep”->F5,

D6=“as021.rep”->F6,

D7=“as021.rep”->F7,

D8=“as021.rep”->F8

RELATION2WITH“as021.rep”->季

MESSAGE“二季度数据错误!”

E5=“as021.rep”->F5,

E6=“as021.rep”->F6,

E7=“as021.rep”->F7,

E8=“as021.rep”->F8

RELATION3WITH“as021.rep”->季

MESSAGE“三季度数据错误!”

F5=“as021.rep”->F5,

F6=“as021.rep”->F6,

F7=“as021.rep”->F7,

F8=“as021.rep”->F8

RELATION4WITH“as021.rep”->季

MESSAGE“四季度数据错误!”

C9=C5+C6+C7+C8,

D9=D5+D6+D7+D8,

E9=E5+E6+E7+E8,

F9=F5+F6+F7+F8,

G9=G5+G6+G7+G8

MESSAGE“横向小计不等!”

G5=C5+D5+E5+F5,

G6=C6+D6+E6+F6,

G7=C7+D7+E7+F7,

G8=C8+D8+E8+F8,

G9=C9+D9+E9+F9

MESSAGE“纵向小计不等!”

5、用审核关系验证报表

在数据处理状态中,当报表数据录入完毕后,应对报表进行审核,以检查报表各项数据勾稽关系的准确性。进入数据处理状态。用鼠标选取菜单“数据”-“审核”命令。系统按照审核公式逐条审核表内的关系,当报表数据不符合勾稽关系时,屏幕上出现提示信息,记录该提示信息后按任意键继续审核其余的公式。按照记录的提示信息修改报表数据,重新进行审核,直到不出现任何提示信息,表示该报表各项勾稽关系正确。每当对报表数据进行过修改后,都应该进行审核,以保证报表各项勾稽关系正确。

6、在命令窗中使用审核公式

在命令窗中可以随时对部分数据进行审核,打开命令窗,输入以CHECK引导的审核公式,回车时系统进行审核,如果审核关系不等,将按照提示内容给出警告信息。使用对话框输入的审核公式将随报表一起保存,随时可以对报表进行审核,命令窗中的审核公式只在光标停留在该行并回车时执行,不随报表保存。

三、舍位平衡

报表数据在进行进位时,如以“元”为单位的报表在上报时可能会转换为以“千元”或“万元”为单位的报表,原来满足的数据平衡关系可能被破坏,因此需要进行调整,使之符合指定的平衡公式。如:原始报表数据平衡关系为50.23+5.24=55.47,若舍掉一位数,即除以10后数据平衡关系成为5.02+0.52=5.55,原来的平衡关系被破坏,应调整为5.02+0.53=5.55,报表经舍位之后,重新调整平衡关系的公式称为舍位平衡公式。其中,进行进位的操作叫做舍位,舍位后调整平衡关系的操作叫做平衡调整公式。

1、定义舍位平衡公式

在报表格式设计状态下,用点击菜单“数据”-“编辑公式”-“舍位公式?”,调出“舍位平衡公式”对话框。舍位平衡公式编辑完毕,检查无误后选择“完成”,系统将保存此次舍位平衡公式的设置。按[ESC]键或选择“取消”将放弃此次操作。在各编辑框中输入如下各项:

舍位表名:和当前文件名不能相同,默认在当前目录下。?舍位范围:舍位数据的范围,要把所有要舍位的数据包括在内。

舍位位数:1-8位。舍位位数为1,区域中的数据除10;舍位位数为2,区域中的数据除100;以此类推。

平衡公式:

  1. 倒顺序写,首先写最终运算结果,然后一步一步向前推。
  2. 每个公式一行,各公式之间用逗号“,”隔开,最后一条公式不用写逗号。
  3. 公式中只能使用“+”“-”符号,不能使用其他运算符及函数。
  4. 等号左边只能为一个单元(不带页号和表名)。
  5. 一个单元只允许在等号右边出现一次。

例如下表:

舍位范围:A1:F6

舍位公式:

F1=B2+D2+F2,

B2=B3+B4+B5+B6,

D2=D3+D4+D5+D6,

F2=F3+F4+F5+F6

2、平衡公式编写规范

平衡公式书写顺序应为统计过程的逆方向。

例如:统计过程为:

E11=A11+B11
F11=C11+D11
G11=E11+F11

箭头表示统计方向,G11为统计结果。

因此平衡公式正确的书写顺序应该为:

G11=E11+F11
E11=A11+B11
F11=C11+D11

当求和区域较大时,可以使用不带区域筛选条件的函数PTOTAL,如:

G11=PTOTAL(E11:F11)
E11=PTOTAL(A11:B1)
F11=PTOTAL(C11:D11)

平衡公式中只可以使用加号“+”、减号“-”,不可以使用其他运算符和函数。
以下平衡公式是错误的:
A1=PTOTAL(B1:C1,
B1:C1>0)
B1=C1*D1G3=H3/89
平衡公式等号左边只能为一个不带页号和表名的单元,不能是超过一个单元的区域。
以下平衡公式是错误的:
A@5=B+CA1:C1=D1:D1+2
等号右边所有出现的区域不能带页号和表名。
以下平衡公式是错误的:
F9=F8@5+“REPORT1”->C5
任何一个单元只允许在平衡公式等号右边出现一次。
以下平衡公式是错误的:
F9=F5+F6+F7+F8G8=C8+C8+D8+E8+F8
因为单元F8在平衡公式中出现了两次。

3、舍位平衡公式编辑举例

以如下“源表.rep”为例示范舍位平衡公式的编辑。

该表计算公式为:

C9=C5+C6+C7+C8
D9=D5+D6+D7+D8
E9=E5+E6+E7+E8
F9=F5+F6+F7+F8
G9=C9+D9+E9+F9

将表“源表.rep”的数据单位由“元”转换成“千元”,并挤平数据,将舍位平衡后的舍位表存入表“舍位表.rep”。

对于设置了舍位关系的报表“源表.rep”,在数据处理状态下进行报表舍位操作,生成舍位表“舍位表.rep”

4、对报表进行舍位平衡操作

当报表编辑完毕,需要对报表进行舍位平衡操作时,可进行以下操作:进入数据处理状态。用鼠标选取菜单“数据”-“舍位平衡”命令。系统按照所定义的舍位关系对指定区域的数据进行舍位,并按照平衡公式对舍位后的数据进行平衡调整,将舍位平衡后的数据存入指定的新表或他表中。打开舍位平衡公式指定的舍位表,可以看到调整后的报表。

四、可变表的使用

1、固定区及可变区

固定区是组成一个区域的行数和列数的数量是固定的数目。一旦设定好以后,在固定区域内其单元总数是不变的。可变区是屏幕显示一个区域的行数或列数是不固定的数字,可变区的最大行数或最大列数是在格式设计中设定的。在一个报表中只能设置一个可变区,或是行可变区或是列可变区,行可变区是指可变区中的行数是可变的;列可变区是指可变区中的列数是可变的。设置可变区后,屏幕只显示可变区的第一行或第一列,其他可变行列隐藏在表体内。在以后的数据操作中,可变行列数随着您的需要而增减。有可变区的报表称为可变表。没有可变区的表称为固定表。

2、设置可变区

操作步骤:

  1. 点击“格式/数据”按钮,进入格式状态。
  2. 如果要设置行可变区,则选取第一可变行中的某个单元;如果要设置列可变区,则选取第一可变列中的某个单元。
  3. 点击[格式]菜单,在下拉菜单中点击[可变区],点击[设置]菜单项。弹出“设置可变区”对话框。在对话框中选择设置行可变区或列可变区和可变区数量。

注意:一个报表中只能定义一个可变区。如果想重新设置可变区,首先取消现有可变区,再设置新的可变区。

3、重新设置可变区

操作步骤:

  1. 点击“格式/数据”按钮,进入格式状态。
  2. 点击[格式]菜单中的[可变区],在下拉菜单中点击[重新设置],将弹出“重新设置可变区”对话框。
  3. 在“可变区大小”框显示可变区当前的大小,在其中输入一个整数。

4、取消可变区

操作步骤:

1)点击“格式/数据”按钮,进入格式状态。

2)点击[格式]菜单,在下拉菜单中点击[可变区],点击[取消],则可变区被取消。注意:可变区被取消后,其中的数据全部丢失。

5、举例:可变区汇总

对可变表除了可以进行表页汇总外, 还可以对可变区的数据进行平面方向的汇总。执行可变区汇总后,UFO 报表在进行可变区汇总的表页中自动追加一个可变行或可变列,把汇总结果保存在其中。

即可对所有表页进行可变区汇总,也可对部分表页进行可变区汇总,例如在 2001 年全年各月共12 张表页中,汇总上半年的表页中的可变区数据;在进行可变区汇总的表页中,即可汇总整个可变区,也可只汇总部分可变区。

[操作步骤]

  1. 点取“格式/数据”按钮,进入数据状态。
  2. 点取[数据]菜单中的[汇总],在下拉菜单中点取[可变区],将弹出“可变区汇总─步骤 1/2”对话框,此对话框用于指定对报表中哪些表页进行可变区汇总。

    在“表页汇总条件”框中选择要进行可变区汇总的表页,缺省为汇总当前表页。在“汇总条件编辑框”中输入"ALL",表示对所有表页进行可变区汇总。可以以单元的值为汇总条件,或者以关键字的值为汇总条件,或者以表页号为汇总条件。汇总条件可以有多个,它们之间是“并且”或“或者”的关系。点取“并且”、“或者”、“加入”按钮可以使汇总条件进入“汇总条件编辑框”。如果您对 UFO 报表比较熟悉,也可直接在“汇总条件编辑框”输入和修改汇总条件。
        A. 以单元的值为汇总条件
            在左边编辑框中输入单元名称,在中间编辑框中选择关系运算符,在右边编辑框中输入单元的值。
            例如:“A10>=500”表示汇总 A10 单元的值大于等于 500 的表页,忽略 A10 单元的值小于500 的表页。
        B. 以关键字的值为汇总条件
            在左边编辑框中选择已设置的关键字,在中间编辑框中选择关系运算符,在右边编辑框中选择关键字的值。
            例如:“年=1996 AND 月>5”表示汇总 1996 年下半年的表页。
        C. 以表页号为汇总条件
            在左边编辑框中输入表页号函数“MREC( )”,在中间编辑框中选择关系运算符,在右边编辑框中输入表页号。
            例如:“MREC( )>=5 AND MREC( )<=10”表示汇总第 5 页到第 10 页的表页。
  3. 点取“下一步”按钮后,将弹出“可变区汇总─步骤 2/2”对话框如图,此对话框用于指定汇总可变区中的哪些可变行(可变列)。

    如果要汇总整个可变区,请点取“完成”按钮。
    如果只汇总部分可变区,则在“可变区汇总条件”框中定义条件。可以以单元的值为可变区汇总条件,或者以行可变区中的一列(或者列可变区中的一行)的值为可变区汇总条件。汇总条件可以有多个,它们之间是“并且”或“或者”的关系。点取“并且”、“或者”、“加入”按钮可以使可变区汇总条件进入“可变区汇总条件编辑框”。如果您对 UFO 报表比较熟悉,也可直接在“可变区汇总条件编辑框”输入和修改条件。
        A. 以单元的值为可变区汇总条件
            在左边编辑框中输入单元名称,单元名称必须为“V_”形式。在中间编辑框中选择关系运算符,在右边编辑框中输入单元的值。注意:如果单元的值为字符时,应加上双引号" "。
            例如:“V_A1>=500”表示汇总 V_A1 单元的值大于等于 500 的可变行(可变列)。
        B. 以行可变区中的一列(或者列可变区中的一行)的值为可变区汇总条件
            在左边编辑框中列出了行可变区的所有列(或者列可变区的所有行),在其中选择一个。在中间编辑框中选择关系运算符,在右边编辑框中输入一个值。
            例如:“V_A>1000”表示汇总 V_A 列数据大于 1000 的可变行。
  4. 点取“完成”按钮后生成可变区汇总的结果。

注意

  1. 如果某个表页中的可变区数量已超出设置的可变区大小,则该表页的可变区汇总结果将无法保存。
  2. 对于字符型数据的汇总,如果字符串不同,则汇总结果为最后一个字符单元的内容。

【例】:某公司报表表页如图,从第 2 行开始为可变区。进行不带条件的可变区汇总后,生成汇总及果如图

五、透视的应用

在UFO中,大量的数据是以表页的形式分布的,正常情况下每次只能看到一张表页。要想对各个表页的数据进行比较,可以利用数据透视功能,把多张表页的多个区域的数据显示在一个平面上。

操作步骤:

  1. 点击“格式/数据”按钮,进入数据状态。
  2. 点击要透视的第一张表页的页标,将对它和它之后的表页的数据进行透视。
    例:透视一张`两页的表不连续单元
  3. 点击[数据]菜单中的[透视],弹出“多区域透视”对话框,在编辑框中输入区域范围。

    在输入透视区域范围的编辑框中,输入B1:B4;在输入列标字串的编辑框中输入收入,应税,成本,利润。
  4. 输入完毕后,按确定将生成透视结果“透视”对话框。拉动水平滚动条到最右边,可以看到各个表页中的关键字的值显示在相应数据的右边。
  5. 利用对话框中的“保存”按钮可以把数据透视结果保存为报表,点击“确认”按钮关闭对话框。数据透视结果将保存为报表中。

六、图表功能的应用

·图表格式:UFO提供了直方图、圆饼图、折线图、面积图4大类共10种格式的图表。·图表与报表的关系:图表是利用报表文件中的数据生成的,图表与报表存在着紧密的联系,当报表中的源数据发生变化时,图表也随之变化。一个报表文件可以生成多个图表,最多可以保留12个图表。·图表的存在方式:图表以图表窗口的形式存在。图表并不是独立的文件,它的存在依附于源数据所在的报表文件,只有打开报表文件后,才能打开有关的图表。报表文件被删除之后,由该报表文件中的数据生成的图表也同时删除。·

图表的操作:图表可以命名,可以选择图表名打开图表,可以修改图表,保存或删除图表。与报表文件一样,图表可以打印输出。

1、插入图表对象

用户可以在UFO的报表文件的数据状态下,插入一个图表对象,是报表数据和图表同时存在与一个报表文件中。插入的图表对象与创建它的报表数据相链接。当报表数据改变时,图表对象也随之更新。

操作步骤:

第一步:选取区域

  1. 在报表窗口中,点击“格式/数据”按钮,进入数据状态。
  2. 在任何一张表页中选取一个数据区域,区域不能少于2行*2列。系统把区域中的第一行和第一列默认为标注,其余为数据区。

第二步:插入图表对象

  1. 点击[工具]菜单中的[插入图表对象],将弹出“区域作图”对话框。
  2. 在对话框中定义以“行”或以“列”为X轴;数据操作范围;图表名称;标题内容;图表格式。
  3. 确认后,在报表数据附近,插入相应的图表。
  4. 将鼠标放在插入的图表对象边框,按鼠标左键拖动边框,调整图表大小。

第三步:激活图表对象双击图表对象,即可激活图表对象窗口注意:图表名在“区域作图”对话框中定义,在以后将不能被修改。

2、图表对象激活与编辑

双击插入的图表对象,激活图表对象窗口。

  1. 在报表文件中选取了一个数据区域后,如果此数据区域有多组源数据,则每次只能显示一组数据的图形,多组数据的图形不能同时显示。
  2. 要观看其他数据的图形,可以点击工具栏中的图标和图标。
  3. 当焦点在图表对象时,点鼠标右键可以选择图表格式。
  4. 在图表对象窗口中,可以调整标题、X标题、Y标题、图形和图例的位置,以及对象和图形的尺寸。调整标题、X标题、Y标题、图形和图例的位置,分别点击它们,用鼠标拖动到适当位置。调整对象或图形的尺寸,将鼠标放在图表对象或图形边框的黑点上,拖动鼠标至合适大小。

3、图表对象的管理

在报表中插入图表对象后,选定对象点击鼠标右键可以图表对象进行管理。

  1. 图表对象的剪切、复制、清除(从当前表删除选定图表对象)。
  2. 如果插入多个图表对象,选定某个对象,选择[对象置前]或[对象置后]使它显示在最前端或其它图表对象之后。
  3. 对图表对象进行预览和打印,此时打印和预览到的只是插入的图表对象。如果想对插入的图表。
  4. 对象的整张表进行预览,可以选择在工具栏
  5. 如果要将插入的图表对象恢复到原来状态,选择“恢复大小”。快捷键:Ctrl+C
  6. 选择[属性]可以得到图形对象的名称和生成图形的区域,并可以改变图形显示的尺寸大小。

常用业务函数

一、有关约定

  1. 账套号:001-999,缺省时由应用环境中设置的账套号决定
  2. 会计年度:1980-2099,缺省时由应用环境中设置的时间决定
  3. 期间

    〈期间〉∷=〈整数〉|全年|季|月|旬|周|日|〈日期字符串〉
    〈日期字符串〉指符合格式“mm/dd/yyyy,mm/dd/yyyy”的字符串,”之前为起始日期,“,之后为截止日期,如果起始日期等于截止日期,那么“,”及其后面的截止日期可以省略。
  4. 方式字
    在分销业务函数中经常使用的〈方式字〉,是用户用来指定其后面编码的意义的。例如,在同一参数位置定义〈编码〉,若在前面的〈方式字〉中的相应位置使用“存货”或“c”,则指〈存货编码〉,若使用“存货分类”或“c%”,则指〈存货分类编码〉。〈方式字〉由基本查询方式名(下简称方式名)组成。

方式名的简写规则:

在不引起冲突的情况下首先采用拼音首字母,其次采用英文首字母;

  • 分类”加%;
  • 字母后面可跟1至2位数字。
  • 方式字的拼写规则:

若有一方式名采用汉字,则整个方式字必须全部采用汉字;若有一方式名采用英文,则整个方式字必须全部采用英文。

采用汉字时,在每两个相邻的方式之间用逗号分开;采用英文时,中间不必分开。

分隔符逗号必须支持全角“,”或半角“,”。

方式名之间大小写无关,顺序无关,但方式名与其之后的编码必须一一对应。以下是方式名及其缩写形式:

二、采购系统

1、采购订单类

〖函数格式〗
<定货数量>::=定货数量|DHSL(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<定货金额>::=定货金额|DHJE(<期间>,[<账套号>],[<会计年度>],[<币种>],[<方式字>],[<编码,]*)
<期间>::=<整数>|全年|季|月|旬|周|日|<日期字符串>
<账套号>::=<字符串>
<会计年度>::=<整数>|年
<方式字>;:=<字符串>
<编码>::=<字符串>
<币种>::=<字符串>

〖格式说明〗

采购定货类函数又分为两个:
定货数量:函数名为“定货数量”或“DHSL”;
定货金额:函数名为“定货金额”或“DHJE”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的采购定货数量或金额。

注意:“定货金额”函数的参数有“币种”参数,可以返回某外币业务的定货金额。

2、采购入库类

〖函数格式〗
<采购入库函数>::=<采购入库函数名>(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<采购入库函数名>::=采购入库数量|CGRKSL|采购入库金额|CGRKJE

〖格式说明〗采购入库类函数又分为两个:
采购入库数量:函数名为“采购入库数量”或“CGRKSL”;
采购入库金额:函数名为“采购入库金额”或“CGRKJE”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的采购入库数量和采购入库金额。注意:“采购入库金额”函数的参数没有“币种”参数。

3、采购发票类

〖函数格式〗
<采购数量>::=采购数量|CGSL(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<采购金额>::=采购金额|CGJE(<期间>,[<账套号>],[<会计年度>],[<币种>],[<方式字>],[<编码>,]*)

〖格式说明〗采购发票类函数又分为两个:
采购数量:函数名为“采购数量”或“CGSL”;
采购金额:函数名为“采购金额”或“CGJE”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的采购数量和采购金额。注意:“采购金额”函数的参数有“币种”参数,可以返回某外币业务的采购金额。

4、采购结算类

〖函数格式〗
<采购结算函数>::=<采购结算函数名>(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<采购结算函数名>::=采购结算数量|CGJSSL|采购结算金额|CGJSJE

〖格式说明〗
采购结算类函数分为两个:
采购结算数量:函数名为“采购结算数量”或“CGJSSL”;
采购结算金额:函数名为“采购结算金额”或“CGJSJE”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的采购结算数量和采购结算金额。注意:“采购结算金额”函数的参数没有“币种”参数。

5、采购帐类

〖函数格式〗
<采购账类函数>::=<采购账类函数名>(<会计期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码*>])
<采购账类函数名>::=<采购期初函数名>|<采购本期函数名>|<采购期末函数名>
<采购期初函数名>::=期初暂估结余数量|QCZGSL|期初暂估结余金额|QCZGJE|期初在途结余数量|QCZTSL|期初在途结余金额|QCZTJE|期初代销结余数量|QCDXSL|期初代销结余金额|QCDXJE
<采购本期函数名>::=<本期入库函数名>|<本期采购函数名>|<本期代销函数名>
<本期入库函数名>::=<本期入库数量|BQRKSL|本期入库金额|BQRKJE|本期入库结算数量|BQRKJSSL|本期入库结算金额|BQRKJSJE>
<本期采购函数名>::=<本期采购数量|BQCGSL|本期采购金额|BQCGJE|本期采购结算数量|BQCGJSSL|本期采购结算金额|BQCGJSJE>
<本期代销函数名>::=本期代销入库数量|BQDXRKSL|本期代销入库金额|BQDXRKJE|本期代销结算数量|BQDXJSSL|本期代销结算金额|BQDXJSJE
<采购期末函数名>::=<期末暂估结余数量|QMZGSL|期末暂估结余金额|QMZGJE|期末在途结余数量|QMZTSL|期末在途结余金额|QMZTJE|期末代销结余数量|QMDXSL|期末代销结余金额|QMDXJE>
<会计期间>::=<整数>|全年|季|月

〖格式说明〗采购账类函数有3类24个:

采购入库账类函数有8个:

  • 期初暂估结余数量、
  • 期初暂估结余金额
  • 本期入库数量
  • 本期入库金额
  • 本期入库结算数量
  • 本期入库结算金额
  • 期末暂估结余数量
  • 期末暂估结余金额

采购(发票)账类函数有8个:

  • 期初在途结余数量
  • 期初在途结余金额
  • 本期采购数量、本期采购金额
  • 本期采购结算数量
  • 本期采购结算金额
  • 期末在途结余数量
  • 期末在途结余金额

受托代销账类函数有8个:

  • 期初代销结余数量
  • 期初代销结余金额
  • 本期代销入库数量
  • 本期代销入库金额
  • 本期代销结算数量
  • 本期代销结算金额
  • 期末代销结余数量
  • 期末代销结余金额

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段会计期间内的采购账类数量和金额。注意:采购账类函数的参数没有“币种”参数。

三、销售系统

销售订货函数:

〖函数格式〗
<销售订货函数>∷=<销售订货函数名>(<期间>,<销售类型编码>,[<币种>],[<账套号>],[<年度>],[<方式字>],[<编码>,]*)
<销售订货函数名>∷=销售订货金额|XSDHJE|销售订货总额|XSDHZE|销售订货件数|jXSDH|销售订货数量|sXSDH
<期间>∷=<整数>|全年|季|月|旬|周|日|<字符串>
<销售类型编码>∷=<字符串>
<币种>∷=<字符串>
<账套号>∷=<字符串>
<会计年度>∷=<整数>|年

〖格式说明〗函数按以下四种方式分为:

  • 销售订货金额:取销售订货的无税金额,函数名为“销售订货金额”或“XSDHJE”;
  • 销售订货总额:取销售订货的价税合计,函数名为“销售订货总额”或“XSDHZE”;
  • 销售订货数量:取销售订货的主计量单位数量,函数名为“销售订货数量”或“sXSDH”;
  • 销售订货件数:取销售订货的辅计量单位数量,函数名为“销售订货件数”或“jXSDH”。

〖参数说明〗销售类型默认为空,即取所有销售类型。合法的〈销售类型编码〉为已定义的销售类型的编码。<币种>默认为空,即本位币,金额返回综合本位币金额,即各币种的发生金额均取其本位币的发生金额;如果输入具体币种,必须输入币名,如“人民币”,不要输入币符。在此情况下,数量和金额均从按所输入币种发生的业务中取数,金额返回原币金额。

〖返回值〗数值型。注意:若部门为非末级部门,则返回其所有下级部门的销售订货数量或金额。

销售函数:

〖函数格式〗
<销售函数>∷=<销售函数名>(<期间>,<销售类型编码>,[<币种>],[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<销售函数名>∷=销售收入|XSSR|销售金额|XSJE|销售件数|jXS|销售数量|sXS|销售成本|XSCB|销售税金|XSSJ|销售折扣|XSZK|销售毛利|XSML

〖格式说明〗函数按以下八种方式分为:

  • 销售数量:取销售结算单据的主计量单位数量,函数名为“销售数量”或“sXS”;
  • 销售件数:取销售结算单据的辅计量单位数量,函数名为“销售件数”或“jXS”;
  • 销售收入:取销售结算单据(如销售发票,下同)的无税金额,函数名为“销售收入”“XSSR”或;
  • 销售金额:取销售结算单据的价税合计,函数名为“销售总额”或“XSJE”;
  • 销售税金:取销售结算单据的增值税销项税金,函数名为“销售税金”或“XSSJ”;
  • 销售成本:取销售结算单据所结转的销售成本,函数名为“销售成本”或“XSCB”;
  • 销售折扣:取销售结算单据的销售折扣,函数名为“销售折扣”或“XSZK”;
  • 销售毛利:取销售收入与销售成本之差,函数名为“销售毛利”或“XSML”。

〖参数说明〗销售类型默认为空,即取所有销售类型。合法的〈销售类型编码〉为已定义的销售类型的编码。对于“XSCB”“XSML”、,无〈币种〉参数;其他销售函数〈币种〉默认为空,即本位币,金额返回综合本位币金额,即各币种的发生金额均取其本位币的发生金额;如果输入具体币种,必须输入币名,如“人民币”,不要输入币符。

在此情况下,数量和金额均从按所输入币种发生的业务中取数,金额返回原币金额。

〖返回值〗数值型。注意:若部门为非末级部门,则返回其所有下属部门的销售数值。“XSCB”“XSML”的取数来源单据必须是已审核的,所以在方式字中不能出现“h”、,即“审核状态”。所取数据不包括已作废单据的数据。

发货函数:

〖函数格式〗
<发货函数>∷=<发货函数名>(<期间>,<销售类型编码>,[<币符>],[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<发货函数名>∷=发货金额|FHJE|发货件数|jFH|发货数量|sFH||发货折扣|FHZK|发货余数|FHYS|发货余额|FHYE

〖格式说明〗
函数按以下六种方式分为:
发货数量:取普通发货单的主计量单位数量,函数名为“发货数量”或“sFH”;发货件数:取普通发货单的辅计量单位数量,函数名为“发货件数”或“jFH”;发货金额:取普通发货单的价税合计,函数名为“发货金额”或“FHJE”;发货折扣:取普通发货单的发货折扣,函数名为“发货折扣”或“FHZK”;发货余数:指定期间发货未开票的主计量单位数量余额,等于期初余数+本期发货数量-本期开票结算数量,函数名为“发货余数”或“FHYS”;发货余额:指定期间发货未开票金额的余额,等于期初余额+本期发货额-本期开票结算额,函数名为“发货余额”或“FHYE”。

〖参数说明〗
销售类型默认为空,即取所有销售类型。合法的〈销售类型编码〉为已定义的销售类型的编码。〈币种〉默认为空,即本位币,发生金额和余额均返回综合本位币金额,即各币种的发生金额均取其本位币的发生金额或余额;如果输入具体币种,必须输入币名,如“人民币”,不要输入币符。在此情况下,数量和金额均从按所输入币种发生的业务中取数,发生金额返回原币金额,余额返回本位币金额。所涉及的单据必须是已审核过的。即在方式字中输入“h”是非法的。

〖返回值〗数值型。

注意:

  • 若部门为非末级部门,则返回其所有下属部门的发货数值。
  • 余额(余数)指所输入区间最后日的余额(余数),例如1998年1月的余额指1998年1月31日的余额,1998年第1旬的余额指1998年1月10日的余额,期间输入“1998-01-01,1998-01-15”时,指1998年01月15日的余额。因此在这种情况下,输入“1998-01-15”和输入“1998-01-01,1998-01-15”等效。
  • “FHYS”“FHYE”的取数来源单据必须是已审核的,所以在方式字中不能出现“h”、,即“审核状态”。

委托代销函数:

〖函数格式〗
<委托代销函数>∷=<委托代销函数名>(<期间>,<销售类型编码>,[<币符>],[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<委托代销函数名>∷=委托代销发货金额|WTFHJE|委托代销发货件数|jWTFH|委托代销发货数量|sWTFH|委托代销发货折扣|WTFHZK|委托代销发货余数|WTFHYS|委托代销发货余额|WTFHYE|委托代销结算金额|WTJSJE|委托代销结算件数|jWTJS|委托代销结算数量|sWTJS|委托代销结算折扣|WTJSZK

〖格式说明〗函数按以下十种方式分为:

  • 委托代销发货数量:取委托代销发货单的主计量单位数量,函数名为“委托代销发货数量”或“sWTFH”;
  • 委托代销发货件数:取委托代销发货单的辅计量单位数量,函数名为“委托代销发货件数”或“jWTFH”;
  • 委托代销发货金额:取委托代销发货单的价税合计,函数名为“委托代销发货金额”或“WTFHJE”;
  • 委托代销发货折扣:取委托代销发货单的发货折扣,函数名为“委托代销发货折扣”或“WTFHZK”;
  • 委托代销发货余数:指定期间委托代销发货未结算的主计量单位数量余额,等于期初余数+本期发货数量-本期结算数量,函数名为“委托代销发货余数”或“WTFHYS”;
  • 发货余额:指定期间委托代销发货未结算金额的余额,等于期初余额+本期发货额-本期开票结算额,函数名为“委托代销发货余额”或“WTFHYE”;
  • 委托代销结算数量:取委托代销结算单的主计量单位数量,函数名为“委托代销结算数量”或“sWTJS”;
  • 委托代销结算件数:取委托代销结算单的辅计量单位数量,函数名为“委托代销结算件数”或“jWTJS”;
  • 委托代销结算金额:取委托代销结算单的价税合计,函数名为“委托代销结算金额”或“WTJSJE”;
  • 委托代销结算折扣:取委托代销结算单的结算折扣,函数名为“委托代销结算折扣”或“WTJSZK”。

〖参数说明〗
销售类型默认为空,即取所有销售类型。合法的〈销售类型编码〉为已定义的销售类型的编码。〈币种〉默认为空,即本位币,发生金额和余额均返回综合本位币金额,即各币种的发生金额均取其本位币的发生金额或余额;如果输入具体币种,必须输入币名,如“人民币”,不要输入币符。在此情况下,数量和金额均从按所输入币种发生的业务中取数,发生金额返回原币金额,余额返回本位币金额。所涉及的单据必须是已审核过的。即在方式字中输入“h”是非法的。

〖返回值〗数值型。

注意:

  • 若部门为非末级部门,则返回其所有下属部门的发货数值。余额(余数)指所输入区间最后日的余额(余数),例如1998年1月的余额指1998年1月31日的余额,1998年第1旬的余额指1998年1月10日的余额,期间输入“1998-01-01,1998-01-15”时,指1998年01月15日的余额。因此在这种情况下,输入“1998-01-15”和输入“1998-01-01,1998-01-15”等效。
  • “WTFHYS”“WTFHYE”的取数来源单据必须是已审核的,所以在方式字中不能出、现“h”即“审核状态”,。
  • 代垫费用函数:DDFYJE/代垫费用金额
  • 销售费用函数:XSFYJE/销售费用金额
  • 包装物租借函数:BZWZJJE/包装物租借金额BZWZJSL/包装物租借数量BZWTHJE/包装物退还金额BZWTHSL/包装物退还数量BZWZJYE/包装物租借余额BZWZJYS/包装物租借余数
  • 销售计划函数:XSJHJE/销售计划金额XSJHDE/销售计划定额XSJHSL/销售计划数量

四、存货核算

存货核算期初额类函数

〖函数格式〗
<存货期初函数>::=<存货期初函数名>(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<存货期初函数名>::=存货期初数量|CHQCSL|存货期初金额|CHQCJE|存货期初差异|CHQCCY
<期间>::=<整数>|全年|季|月|旬|周|日|<日期字符串>
<账套号>::=<字符串>
<会计年度>::=<整数>|年<方式字>::=<字符串><编码>::=<字符串>

〖格式说明〗存货核算期初类函数分为三个:

  • 存货期初数量:函数名为“存货期初数量”或“CHQCSL”;
  • 存货期初金额:函数名为“存货期初金额”或“CHQCJE”;
  • 存货期初差异:函数名为“存货期初差异”或“CHQCCY”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的存货核算期初数量、期初金额或期初差异。

注意:参数“期间”中旬、周、日、日期段为自然日历期间,年、季、月为会计期间。

存货核算发生额类函数

〖函数格式〗
<发生额类函数>::=<发生额类函数名>(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<发生额类函数名>::=<存货入库函数名>|<存货出库函数名>|<存货借方差异函数名>|<存货贷方差异函数名>
<存货入库函数名>::=存货入库数量|CHRKSL|存货入库金额|CHRKJE
<存货出库函数名>::=存货出库数量|CHCKSL|存货出库金额|CHCKJE
<存货借方差异函数名>::=存货借方差异|CHJFCY
<存货贷方差异函数名>::=存货贷方差异|CHDFCY
<期间>::=<整数>|全年|季|月|旬|周|日|<日期字符串>
<账套号>::=<字符串>
<会计年度>::=<整数>|年
<方式字>::=<字符串>
<编码>::=<字符串>

〖格式说明〗存货发生额类函数分为六个:

  • 存货入库数量:函数名为“存货入库数量”或“CHRKSL”;
  • 存货入库金额:函数名为“存货入库金额”或“CHRKJE”;
  • 存货出库数量:函数名为“存货出库数量”或“CHCKSL”;
  • 存货出库金额:函数名为“存货出库金额”或“CHCKJE”;
  • 存货借方差异:函数名为“存货借方差异”或“CHJFCY”;

存货贷方差异:函数名为“存货贷方差异”或“CHDFCY”。

〖返回值〗数值型。返回按方式字设定的一组条件下,在某段自然日期范围内的存货入库数量、存货入库金额、存货出库数量、存货出库金额、存货借方差异或存货贷方差异。

注意:参数“期间”中旬、周、日、日期段为自然日历期间,年、季、月为会计期间。

存货核算总账类函数

〖函数格式〗
<存货差异率函数>::=存货差异率|CHCYL(<会计月>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<存货平均单价函数>::=存货平均单价|CHPJDJ(<会计月>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<会计月>::=<整数>|月|
<账套号>::=<字符串>
<会计年度>::=<整数>|年
<方式字>::=<字符串>
<编码>::=<字符串>

〖格式说明〗存货核算总账类函数分为两个:

  • 存货差异率:函数名为“存货差异率”或“CHCYL”;
  • 存货平均单价:函数名为“存货平均单价”或“CHPJDJ”;

〖返回值〗数值型。返回按方式字设定的一组条件下,在某一会计月份的存货差异率和存货平均单价。

五、库存管理

收发存类函数

〖函数格式〗
<收发存类函数>::=<收发存类函数名>(<会计期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<收发存类函数名>::=<期初结存函数名>|<本期入库函数名>|<本期出库函数名>|<期末结存函数名>
<期初结存函数名>::=sQCJC|jQCJC
<本期入库函数名>::=sBQRK|jBQRK
<本期出库函数名>::=sBQCK|jBQCK
<期末结存函数名>::=sQMJC|jQMJC
<会计期间>::=<整数>|全年|季|月
<账套号>::=<字符串>
<会计年度>::=<整数>|年

〖格式说明〗收发存类函数分为以下八种方式:

  • 期初结存数量:函数名为“sQCJC”
  • 期初结存件数:函数名为“jQCJC”
  • 本期入库数量:函数名为“sBQRK”
  • 本期入库件数:函数名为“jBQRK”
  • 本期出库数量:函数名为“sBQCK”
  • 本期出库件数:函数名为“jBQCK”
  • 期末结存数量:函数名为“sQMJC”
  • 期末结存件数:函数名为“jQMJC”

〖返回值〗数值型。

注意:方式字中的存货与存货分类只能选择其中之一,如果选择存货则返回值为该存货的收发存情况;如果选择存货分类则返回值为该存货分类所属的所有存货的收发存情况。

发生类函数

〖函数格式〗
<发生类函数>::=<发生类函数名>(<期间>,[<账套号>],[<会计年度>],[<方式字>],[<编码>,]*)
<发生类函数名>::=<入库函数名>|<出库函数名><入库函数名>::=sRK|jRK|RK<出库函数名>::=sCK|jCK|CK
<期间>::=<整数>|全年|季|月|旬|周|日|<日期字符串>

〖格式说明〗
发生类函数分为以下六种方式:入库数量:函数名为“sRK”;入库件数:函数名为“jRK”;入库金额:函数名为“RK”;出库数量:函数名为“sCK”;出库件数:函数名为“jCK”;出库金额:函数名为“CK”;

〖返回值〗数值型。

注意:方式字中的存货与存货分类只能选择其中之一,如果选择存货则返回值为该存货的出入库情况;如果选择存货分类则返回值为该存货分类所属的所有存货的出入库情况。

方式字中的供应商及供应商分类只有入库函数才能选择,并且只能选择其中之一;客户及客户分类只有出库函数才能选择,并且只能选择其中之一。批次类函数:sPCRK、jPCRK、PCRK、sPCLJCK、jPCLJCK、PCCK、sPCJC、jPCJC、PCJC保质期类函数:sJC、jJC、JC现存量类函数:sXC、jXC库存控制类函数:sZG、sZD、sAQ

各系统中帐表管理的使用(自定义报表的应用)

报表管理是财务软件功能中的一个重要组成部分,用友企业级财务软件系列产品在报表管理模块中,除了为用户提供丰富、实用的通用报表之外,还进一步提供“自定义报表”工具,让用户自己根据自己的需要,自行设置报表,以满足用户的特殊需要。报表的生成实际上是这样一个过程:系统将数据按照特定的条件进行查询统计,并把查询统计出来的结果按照一定的组织形式放置在表格之中。“自定义报表”就是由用户来自行完成以下工作:

  1. 设计数据(包括:①设置报表所含栏目的内容;②指定数据筛选条件);
  2. 设计格式(包括:①设计副标题;②设计表头栏;③设计表尾区);
  3. 应用技巧(包括:①分级与合计;②多重表达式)。

一、数据设计的准备工作

准备工作主要包括两个方面:选择功能区和设置主标题.用户启动自定义报表工具后,系统将自动弹出自定义报表设置主界面,用户可在此界面上完成设计数据的准备工作.选择功能区由于形成自定义报表的查询和统计是以数据表的字段为基础的,因此就要求数据表之间存在着关联,否则地话,自定义报表内各栏目内容之间将互不匹配,无法达到用户所期望的效果。要想解决这个问题,就要求用户在设计自定义报表之前,必须先选择一个数据表组,该数据表组中的数据表之间互相关联,为同一个功能服务,系统称之为“功能区”。功能区是由系统设定好的,用户所做的只是在界面右上侧的“报表设置的功能范围选择区”内,根据需要选择适当的功能区。比如说:用户想自定义一张有关销售的报表,就要首先用鼠标在“报表设置的功能范围选择区”内的下拉框中点击“销售”。由于系统不支持跨功能区来自定义报表,因此当用户在自定义报表的设计过程中,要改变功能区设置时,系统将自动弹出一个对话框,要求用户进行确认,用户如想放弃,则点击“是(Y)”,系统将放弃原有的设计,进入新的设计;用户如不想放弃,则点击“否(N)”,系统将维持原有的设计,不再进入新的设计,更改功能区无效。设置报表标题用户在界面中的“报表标题设置区”内输入要定义的报表标题,最大长度为32位字符或16个汉字。准备工作做完之后,用户便可以进行数据的设计工作了。注意:用户最好首先进行功能区的定义工作。

二、设置报表各栏目内容

报表是由表栏目组成的,故而,用户要首先对自定义报表所含各栏目的内容进行设置。设置时,用鼠标双击“Field1”下的空白栏(此处的“Field1”即“栏目1”,系统将会自动弹出自定义报表设置主界面。)
各栏目说明:

数据表/查询该区域列示的是用户所选功能区下属的数据表,这些数据表之间互相关联,为同一个功能服务。这些数据表是由系统根据用户选择的功能区自动列示出来的,用户不能进行删除和增加,只能从中进行选择。数据字段选项数据字段选项区域列示的是左边选中的数据表中所包含的字段,报表栏目内容的设置将以这些字段选项为基础。与数据表一样,这些数据选项是由系统根据用户所选择的数据表自动列示出来的,用户不能进行删除和增加,只能从中进行选择。栏目内容显示区该区域列示的是用户为设置该报表栏目的内容而用所选择的数据选项组成的表达式。这个表达式或者是单纯的一个数据选项,或者是复杂的带有函数或操作符的数据选项组合。操作符用户对所选数据选项进行处理时所常用的符号。函数用户对所选数据选项进行处理时所常用的函数,包括逻辑函数、文本函数、合计函数、日期/时间函数和算数函数。名称该区域供用户来设置报表栏目的名称。用户可根据自己的需要进行设置,如不设置,系统将会自动默认为用户所选第一个数据项的字段名称,当然,用户还可以对系统默认的名称进行修改。其它选项和按钮“显示”选项选中与否规定了该报表栏目在报表显示界面是否可见,打上选中标志意味着可见,没有选中标志意味着不可见。需要注意的是,不可见并不说明不存在,只是隐藏起来不显示罢了,在其他方面,不显示栏目与正常可显示栏目是一样的。“合计”与“%”选项将在特殊设置部分里进行介绍。“前移”按钮表示转到当前栏目前一个栏目的编辑状态。“后移”按钮表示转到当前栏目后一个栏目的编辑状态。“保存”和“放弃”按钮的含义这里就不再过多地解释。报表栏目内容的设置步骤如下:

  1. 用户在自定义报表设置主界面中,用鼠标双击“FieldX”下的空白栏(此处的“FieldX”即“栏目X”,系统自动弹出数据设计界面。)
  2. 用户在“名称”中输入该报表栏目的名称。3、用户在“数据表/查询”区域选择与自定义报表有关的数据表,一次只能选中一个,选择的方法是:用鼠标双击。
  3. 选中数据表后,系统将在数据选项区域自动列出该数据表所含的字段名称,用户可根据自己的需要,选择设置该报表栏目所需的数据选项,然后用鼠标双击它,则系统将所选数据选项以计算机语言的形式显示在“栏目内容显示区”。
  4. 在设置报表栏目内容时,如果需要,用户还可以对所选数据选项进行函数处理,也可以选择两个或两个以上的数据选项(既可以来自同一个数据表,也可以分别来自同一个功能区的不同表),来组成复杂的数据选项表达式。
  5. 根据需要,用户选中相关的选项,比如:用户想让该报表栏目在报表显示界面是可见的,便可将“显示”选项置于选中标志。
  6. 上面工作完成以后,如想保存,则点击〖保存〗按钮;如想放弃,就点击〖放弃〗按钮。该报表栏目内容设置完成以后,系统将回到自定义报表设置主界面,并且将已保存的报表栏目的名称列示在相应的名称显示区,而将栏目内容的表达式列示在相应的表达式区,同时,系统还自动在现有栏目的后面横向增加一列栏目,在现有表达式的下面纵向增加一行表达式区,等待用户进行设置。

注意:用户对已设置好的栏目,可以双击其表达式栏,进入修改界面。用户对已设置好的栏目,可以用鼠标拖住其名称栏,在已设置的栏目之间任意调换位置。为了方便用户,系统还提供了快捷键的功能,具体方法是,在界面中,点击鼠标右键,系统将自动弹出一个快捷菜单。关于多个表达式行并存的情况将在特殊设置的“多重表达式”部分给以详细的介绍,这里用户先不要考虑多重表达式的情况。

三、指定数据筛选条件

报表中存放的是查询统计出来的结果,而查询统计就需要用户给出条件,以便对数据进行筛选。指定数据筛选条件的步骤是:

  1. 用户在自定义报表设置主界面,用鼠标双击“Where”下的空白栏(此处的“Where”即“条件”,系统自动弹出数据设计主界面。界面中,)“名称”中自动显示“条件”二字,并且为灰,不允许用户进行修改。
  2. 用户在“数据表/查询”区域选择数据表,在“数据字段选项”区域选择数据字段选项,然后以选中的数据字段为基础,利用函数和操作符构建逻辑表达式,显示在“栏目内容显示区”内。比如:条件“未结算数量大于零”的逻辑表达式为:[DispatchLists].[iQuantity]“([DispatchLists].[iSettleQuantity])>0”。
  3. 上面工作完成以后,如想保存,则点击〖保存〗按钮;如想放弃,就点击〖放弃〗按钮。

四、设计格式

对于一个完整的报表而言,仅有数据是不够的,还需要有一定的格式,因此,数据设计完之后,就要转入报表格式的设计。报表的格式主要包括三个部分:标题(又可分为主标题和副标题)、表头栏和表尾区。

如何设计主标题

所谓“主标题”是指报表名称,主标题的设置在自定义报表设置主界面中进行,用户可以在设计数据前的准备工作中设置报表的主标题,主标题的最大长度为32位字符或16个汉字。

如何设置副标题

所谓副标题是指主标题下面的小标题。在设置副标题以及后面所要描述的表头栏和表尾区时,用户都要先进入格式设计界面,进入的方法是:在自定义报表设置主界面中用鼠标点击〖格式〗按钮,系统自动弹出格式设计界面。从界面上我们可以看出,副标题可以不止一个。系统规定:在副标题设计区,纵向,最多可以定义八行标准副标题;横向,所能定义的标准副标题的个数要视自定义报表的长度而定。这里需要解释一下什么是标准副标题,所谓的标准副标题是指用户在进入副标题设计区时,点击鼠标,系统自动出现的副标题设计条。设计时,用户可以用系统自动弹出的副标题设计条来设计一个标准副标题;也可以在系统自动弹出标准副标题设计条后,用鼠标拖动它,在设计区的空白部分,以一个标准副标题设计条为单位,横向是向前,纵向是向上或向下,来回拖动以改变副标题设计条的大小,直到用户自己满意为止。副标题的设置就没有主标题那样简单。为了更好地说明它,我们先看一下副标题可以分为哪几类。总起来讲,副标题可以分为两类:普通副标题和参照型副标题。所谓普通副标题是指副标题的内容与自定义报表中的数据没有任何关联,只是供显示说明用。参照型副标题是指副标题的内容与自定义报表中的数据内容有关联。下面,我们逐一来看一下上述两种副标题的设置。

如何设置普通副标题

普通副标题的设置比较简单,具体方法是:在自定义报表工具设置主界面中用鼠标点击〖格式〗按钮,系统自动弹出格式设计界面;然后,用户用鼠标在副标题设计区中拖拽出一个自己满意的副标题设计条,然后在该设计条中输入相应的内容即可。

如何设置参照型副标题

参照型副标题是指与自定义报表中的数据有关联的副标题,根据关联的方式不同,它又可分为两大类:基本参照型;选项参照型。基本参照型是指副标题的内容由自定义报表的数据内容所决定,换句话说,副标题的内容是自定义报表中相关数据内容的反映,比如说,某自定义报表中有副标题“仓库:产成品”,冒号后面的“产成品”便是由自定义报表中仓库名称下面的“产成品库”所决定的;如果自定义报表中仓库名称下面不是“产成品库”,而是“材料库”,则该副标题中冒号后面便相应地变成“材料”。选项参照型是指副标题的内容决定着自定义报表中的数据内容,并且,副标题中的内容是可选的,也就是说可以通过下拉框进行选择。比如说,某自定义报表中有副标题“存货:,”用户可以用鼠标点击下拉框,从中选择存货,比如选择“500W发电机”,那么,自定义报表中的数据全部是存货500W发电机的,而存货80W发电机的数据就没有了。下面,我们来首先看一下如何设置基本参照型副标题。设置基本参照型副标题要遵循如下步骤:

  1. 用鼠标在副标题设计区中拖拽出一个自己满意的副标题设计条。
  2. 鼠标指向该副标题设计条,然后点击鼠标右键,系统自动弹出一菜单条。
  3. 用户用鼠标从中选取【编辑标题】项,系统自动击活该副标题设计条。
  4. 用户可以先自行输入标题的名称,比如,仓库。这里要注意,仓库两字的后面就不要再加“:”了,系统会自动加的。
  5. 然后,用户再点击鼠标右键,系统自动弹出一菜单条,用户用鼠标置于【设置参照】上,系统将自动弹出二级菜单条。
  6. 用户将鼠标放在【参照字段】上,系统继续自动弹出三级菜单条。
  7. 用户用鼠标点击【选择】项,系统将自动在副标题设计条中显示一个下拉选择框,选择框中列示的是在“设计数据”部分定义的报表各栏目的名称。用户可以根据自己的需要从中进行选择,选择时要注意与前面已输入的该副标题的名称搭配。比如,用户在输入副标题名称“仓库”后,可在下拉选择框中选择“仓库名称”。
  8. 选择完毕后,暂时退出副标题设计条。
  9. 再用鼠标指向该副标题设计条,然后点击鼠标右键,系统自动弹出一级菜单条;用户用鼠标置于【设置参照】上,系统自动弹出二级菜单条;用户用鼠标置于【参照类型】上,系统将自动弹出三级菜单条。
  10. 用户用鼠标从中点击【基本】项即可。

完成了上述步骤之后,基本参照型副标题便设置好了。比如,在上例中,将“仓库:仓库名称”设为基本参照型后,在报表显示时,参照字段“仓库名称”的值将由自定义报表中“仓库名称”栏目下的值所决定,准确地说,是由自定义报表中第一条记录的“仓库名称”值所决定。

诀窍:为了方便用户使用基本参照型副标题,我们特地提供一种使用基本参照型副标题的典型方法:

  1. 在“设计数据”部分将用于设置基本参照型副标题的栏目设为“不可显示”。
  2. 同时,设置相应的条件,使得在自定义报表中,那个用于设置基本参照型副标题的栏目的值是唯一的。
  3. 在“设计标题”部分,将该栏目设为基本参照型副标题的参照字段。

这样一来,便能实现这样一种效果:在报表显示界面,基本参照型副标题的内容是对自定义报表数据的说明。以上是使用基本参照型副标题的典型方法,供用户参考。用户还可以根据自己的实际情况,结合基本参照型副标题的使用特点来灵活使用。

设置选项参照型副标题要遵循如下步骤:

  • ⒈—⒍同基本参照型副标题的设置。
  • 7、用户用鼠标点击【选择】项,系统将自动在副标题设计条中显示一个下拉选择框,选择框中列示的是在“设计数据”部分定义的报表各栏目的名称。用户可以根据自己的需要从中进行选择,选择时要注意与前面已输入的该副标题的名称搭配。比如,用户在输入副标题名称“存货”后,可在下拉选择框中选择“存货编号”或“存货名称”。
  • ⒏—⒐同基本参照型副标题的设置。
  • 10、在【参照类型】下的三级菜单上,除了【基本】项外,还有【选项】【分级项目】【日、、期】。其中,如果在前面参照字段的选择中,选择的是日期型的,那么,在这里用鼠标点击【日期】即可。
  • 11、如果选择的是非日期型的,那么,在这里应该用鼠标点击【选项】或【分级项目】【选。项】和【分级项目】之间的主要区别是报表显示界面中的参照型副标题的选择下拉框中的待选内容的列示不同:点击【选项】的情况下,所有待选内容不分级次地都列示在下拉框中;点击【分级项目】的情况下,待选内容将按照一定的级次列示在下拉框中,用户既可以选择一级,也可以选择二级、三级,选择上一级的同时,系统也就默认选择了该级下面的所有项目。
  • 12、用户根据自己的需要,在“参照类型”中点击【选项】或【分级项目】时,系统自动弹出一个设置界面。点击【选项】的情况下,用户可在界面上设置与所选参照字段相匹配的数据项或数据项表达式(设置的方法参见“设计数据”部分中“如何设置报表栏目内容”步骤中的3、4、5、7),比如:用户在选择参照字段时选择了“存货名称”,则在这里要设置数据项表达式“[Inventory].[cInvName],以便与所选参照字段“存货名称”相匹配。”

诀窍:细心的用户可能会发现,在上述例子中,如果所选的参照字段,比如“存货名称”,存有重名的情况时,系统处理起来就会出现混乱的情况。

对这个问题,可有两种解决方法:一种是改变参照字段,将其改为不存在重名情况的参照字段,比如将“存货名称”改为“存货编号”,这种解决方法的不足之处在于:不存在重名情况的参照字段对用户来说往往不是很友好,也就是说不太直观,比如参照字段改为“参照编号”时,用户在副标题内容下拉框中只会看到一些编号。

为了改变这种状况,系统提供了第二种方法,即将参照字段设为不存在重名的参照字段,比如设为“存货编号”,而在设置界面中设置两个数据项表达式,且中间用“,”分割,形式为:“数据项表达式1,数据项表达式2”。其中,数据项表达式1是与所选参照字段相匹配的(如与“存货编号”相对应的“[Dispatchlist.cInvcode])]而数据项”,表达式2则是供副标题内容下拉框中显示用的,这就要求数据项表达式2的值对用户来说比较直观,并且与数据项表达式1一一对应,如在上例中,数据项表达式2可以设为与“存货名称”相对应的表达式,即“[Inventory].[cInvName]。这样一来,既避免了重名的问题,”又增强了界面的用户友好性。点击【分级项目】的情况下,用户在界面必须设置两个数据项表达式,中间用“,”分割,并且数据项表达式1应是编码型的(这主要是因为编码型的字段易于分级),而数据项表达式2则是供副标题内容下拉框中显示用的,要比较直观,并且与数据项表达式1一一对应。数据项表达式设置完成后,如要保存,就点击〖保存〗按钮;如想放弃,则点击〖放弃〗按钮。

至此,我们已经描述了如何设置自定义报表的主标题和各种类型的副标题。用户可以根据上面所讲的基本设置方法,结合自己的需要,灵活设置自己的标题。注意:如果用户同时设置了若干个参照型副标题,那么,自定义报表中所显示的数据内容要同时满足这些参照型副标题的要求。如何设计表头栏设计表头栏的界面与设计副标题的界面是同一个界面,即格式设计界面。从界面上我们可以看出,表头栏目可以不止一个。系统规定:在表头栏设计区,纵向,最多可以定义八行表头栏目;横向,所能定义的表头栏目的个数要视自定义报表的栏目数而定。设计表头栏目可以按下列步骤进行:

  1. 设计合适的表头栏目设计,用户可以用系统自动弹出的表头栏目设计条来设计一个表头栏目;也可以在系统自动弹出表头栏目设计条后,用鼠标拖动它,在设计区的空白部分,以相对应的表头栏目设计条为单位,横向是向前或向后,纵向是向上或向下,来回拖动以改变表头栏目设计条的大小,直到用户自己满意为止。
  2. 将鼠标指向表头栏目设计条。
  3. 点击鼠标右键,系统将自动弹出一个菜单条。
  4. 用户从中点击【编辑】,则表头栏目设计条进入编辑状态,用户可以在此输入适当的栏目内容。

要诀:为了方便用户进行表头栏目的设计,系统特地提供【设置默认】这一功能。用户在系统自动弹出的菜单条中用鼠标点击【设置默认】,则系统自动将用户在“设计数据”部分为各栏目所设置的名称(参见格式设计界面中的表头栏设计区中的黑体字部分)默认为报表的表头栏目,并且置于表头栏区的最上一行。设计表尾区表尾区的功能与前面所讲的副标题区的功能是一致的,设计及系统的规定也是一致的,两者的区别只是在于位置不同。

五、如何使用应用技巧

可以说,在设计完数据和格式之后,一张报表就基本上可以定义出来了。但是,这样定义出来的报表只能是最一般、最简单的报表。要想使自定义报表更加灵活、更能满足用户的需要,还必须要有一些应用技巧。目前,系统主要提供以下类型的应用技巧:分级与合计;多重表达式。如何使用分级与合计所谓“分级”是指以指定的栏目字段为关键字进行排序和分级。所谓“合计”是指对所选的栏目进行合计运算。这两者既可分开使用,但最好结合使用。下面,我们先逐一来看一下,然后再来看一下结合使用的情况。分级在设置分级时,用户要先进入分级设置界面,进入的方法是:在自定义报表工具的主界面(图9-2)中用鼠标点击〖汇总〗按钮,系统自动弹出设置界面,界面的各栏目内容说明如下:备选字段显示区备选字段显示区内所显示的是在“设计数据”部分已定义好的栏目。功能选择区用户点击功能选择区中的下拉框,系统将自动弹出一个菜单条。所选字段显示区所选字段显示区内列示的是从备选字段显示区内选择的将作为关键字的栏目字段。

设置分级的主要步骤如下:

  1. 在功能选择区中进行选择,将当前功能置为“分级”。
  2. 从备选字段显示区中所列示的栏目字段中选择合适的栏目字段,选择的方法是:首先用鼠标指向该栏目字段,然后按住鼠标左键,将其拖至所选字段显示区。
  3. 对某个已选栏目关键字来说,如果用户希望在与合计处理联用时,它只是用来作为排序的关键字,而不做小计的处理,便可以将其前面的标志置为“选中”。

注意:系统允许选择多个栏目字段同时作为分级的关键字,不过,这些关键字中要有主次之分。位于最上面的是第一关键字,次之的是第二关键字,接下去依次排列。因此,所选栏目关键字的排列顺序是很重要的,它直接影响着报表数据的分级排序结果。

当然,用户还可以更改已选择的栏目关键字的顺序,方法是:用鼠标指向要改变排列位置的栏目关键字,按住鼠标的左键,将其拖到另外的位置。

系统还允许用户对已选择的栏目字段进行删除,方法是:在所选字段显示区,用鼠标指向要被删除的栏目关键字,按住鼠标的右键,将其拖回备选字段显示区。

合计在设置合计时,用户要先进入合计设置界面,合计设置界面与分级设置界面是同一个界面。设置合计的主要步骤如下:

  1. 在功能选择区中进行选择,将当前功能置为“合计”。
  2. 从备选字段显示区中所列示的栏目字段中选择合适的栏目字段,选择的方法是:首先用鼠标指向该栏目字段,然后按住鼠标左键,将其拖至所选字段显示区。
  3. 对某个已选栏目字段来说,如果用户希望在作合计处理时以百分比形式显示,那么就可以将其前面的标志置为“选中”。

注意:系统允许选择多个栏目字段同时进行合计处理。

系统还允许用户对已选择的栏目字段进行删除,方法是:在所选字段显示区,用鼠标指向要被删除的栏目关键字,按住鼠标的右键,将其拖回备选字段显示区。

诀窍在“设计数据”部分也可以进行合计处理的设置。方法是:在设计数据界面中,用户设定完某栏目内容后,如想对该栏目进行合计处理,则将其他选项和按钮中的“合计”置为选中,如果进一步希望以百分比的形式显示合计处理的结果,则还要将“%”置为选中。分级与合计结合使用从前面的叙述我们可以看出:如果只是使用分级,则只能起到按所选栏目关键字进行排序的功效;如果只是使用合计,则只能起到将所选栏目的数据进行加总并显示合计数的功效。但是,在实际工作中我们却常常希望能够将二者结合起来。具体方法是:首先,选择用于分级的栏目字段(可以有若干个;如果不想让报表数据按某个栏目关键字进行小计处理,可以将其前面的标志置为选中);其次,选择要进行合计处理的栏目字段。诀窍用于分级的栏目字段,最好是选择编码型的栏目字段。而在“设计数据”部分可以将该编码型的栏目字段设为不显示,这样,既能使报表数据简捷,又能达到分级,避免重名的效果。在选择进行合计处理的栏目字段时,尽量选择那些数据型的栏目字段。如何使用多重表达式所谓多重表达式是指自定义报表设置主界面中多个表达式行并存的情况,用户可以在同一个栏目下输入多个表达式(最多输入八个表达式行)。多重表达式主要适用于以下情况:一个栏目的内容要来自两个或两个以上的地方,也就是说,无法用一个数据项表达式来进行涵盖,而必须要用多个表达式。举一个很简单的例子来说明这种应用:企业要出一张收入明细表,因而要设一个收入栏目,考虑到收入包括多个方面,如销售收入、劳务收入等,这种情况下,显然用一个数据项表达式无法涵盖收入的所有内容,而必须要用多重表达式,即收入栏目下的表达式1表示的是销售收入,表达式2表示的是劳务费收入。同样地,用户还可以为这些表达式分别设置数据筛选条件。这样设置后,自定义报表显示时,收入栏目下便可以将所有种类的满足数据筛选条件的收入项都列示出来。

UFO报表的二次开发

一、批命令

批命令实质上是把多个UFO命令进行集合操作处理,即在一个批命令文件中编写多个命令,执行这个批命令文件就可以一次性完成这些命令。批命令在许多时候是必不可少的。例如当主管单位进行报表汇总时和企业集团中的母公司进行合并报表时。所有的命令和函数均可在批命令中使用;批命令可以嵌套、递归(这是在单元公式中不能作到的)和带参调用;批命令可以在批命令和自定义菜单中调用。批命令文件在UFO提供的二次开发窗口UFOEDIT中编写,编写完成后以后缀“.SHL”保存。在系统窗口或报表窗口中都可以执行批命令文件。

  1. 批命令的实现过程第一步点击[文件]菜单中的[二次开发],打开“UFOEDIT”窗口。
  2. 在UFOEDIT窗口中新建一个批命令文件,输入UFO命令,并保存批命令文件。
    注意:
    1)在批命令中不能使用全角字符(在双引号""中可以使用全角字符)。
    2)因为UFOEDIT窗口没有检查错误的功能,在批命令编写完毕后,应检查一下是否有语法错误和逻辑错误。
  3. 在系统窗口或报表窗口都可以执行批命令文件。
  4. 在UFOEDIT窗口中可以打印批命令文件。

例1、下面是一个审核报表的批命令。

if c6<>c7+c8+c9+c10
    disp"c6单元错误!"
    return
end
if c19<>c20+c21+c22+c23
    disp"c19单元错误!"
   return
end
if c28<>c6+c19
   disp"c28单元错误!"
   return
end
disp"数据全部正确!"

例2、以下是《损益表》取数的批命令。

let C5=fs(501,月,"贷",999,年)
let C6=fs(502,月,"借",999,年)
let C7=fs(503,月,"借",999,年)
let C8=fs(504,月,"借",999,年)
let C9=C5-ptotal(C6:C8)
let C10=fs(511,月,"贷",999,年)-fs(512,月,"借",999,年)
let C11=dfs(521,321,月,"贷",,,999,年)
let C12=fs(522,月,"借",999,年)
let C13=C9+C10-C11-C12
let C14=fs(531,月,"贷",999,年)-fs(532,月,"借",999,年)
let C15=fs(541,月,"贷",999,年)
let C16=fs(542,月,"借",999,年)
let C17=C13+C14+C15-C16
let C18=fs(505,月,"借",999,年)
let C19=C17-C18
let D5:D19=C5:C19+select(D5:D19,年@=年and月@=月+1)

例3、以下是采集下级单位报表的批命令。

let &unit=getstr(“要采集的单位名称:”)
openrepo“a:\zcfzb.rep”
if &unit<>单位名称
    disp“单位名称不符!”
    break
end
let &year=getint(“要采集的年度:”)
let &month=getint(“要采集的月份:”)
openrepo“zcfzb”
append from“a:\zcfzb”for 年=&year and 月=&month
append from“a:\syb”for 年=&year and 月=&month
append from“a:\xjllb”for 年=&year and 月=&month

例4、以下是一个寻找单位名称为“销售部”表页的批命令。
LET &PAGE=1
WHILE &PAGE<=100
SETPAGE&PAGE
IF 单位名称="销售部"
    DISPLAY"已找到销售部表页!"
    RETURN
END
&PAGE=&PAGE+1EN
DDISPLAY"未找到销售部表页!"

例5、有下面可变表,编制一个求产品销售额大于某数的批命令。

let v_d=v_b*v_c for all;all
let &max=getint("销售额大于?")
total to "汇总表"keyv_afor all;all
open repo "汇总表"gdele for;v_d<=&max
gsorton v_d–d

2、变量

1)变量说明

变量格式:&为变量标识符
变量名:<=8个字节,由字母、数字、下划线组成。必须以字母或下划线开头,不能以数字开头。
变量类型:数值型和字符型。
无变量声明,赋值时确定变量类型。
使用状态:系统状态、格式状态、数据状态。
总变量个数:<=80个。

2)变量使用

关键字年、季、月、日为数值型,单位名称、单位编号为字符型。
表示报表名:&REP_NAME->单元格名
表示表页号:@&TAB
表示行号:#&ROW
表示列号:!&COL

3)清除变量

〖命令格式〗FREE<变量名>
〖参数说明〗变量名:需要清除的变量,ALL表示所有变量。

三、语句

1)分支语句

A)简单条件分支语句

格式:
IF<条件表达式>
    <语句行序列>
END

运行结果:如果条件为真,则执行IF语句后面的语句行序列;如果条件为假,则执行END后面的语句。

例如:
IF A3>0
    LETB3=A3
END
运行结果:当A3单元的值大于0时,B3单元等于A3单元;当A3单元的值小于等于0时,执行END之后的语句。

B)选择条件分支语句

格式:
IF<条件表达式>
    <语句行序列1>ELSE<语句行序列2>
END

运行结果:如果条件为真,则执行语句行序列1;如果条件为假,则执行ELSE后的语句行序列2。

例如:

IF A3>1000
    LET B3=A3 ELSE LET B3=0
END

运行结果:如果A3单元的值大于1000,B3单元等于A3单元;如果A3单元的值小于等于1000,B3单元等于0。

2)循环语句

格式:

WHILE<条件表达式>
    <语句行序列>
END

运行结果:当条件为真时,循环执行语句行序列;直到条件为假时,执行END之后的语句。

例如:给12张表页中的关键字“月”分别赋值为1-12。

LET &AA=1
WHILE &AA<=12
    LET 月@&AA=&AA
    LET &AA=&AA+1
END

3)跳转语句格式:BREAK

运行结果:跳出最近一层循环体

  1. 用于WHILE END语句中时,执行BREAK语句后将跳出WHILE循环,执行END之后的语句。
  2. 用于WHILE END语句中之外时,执行BREAK语句后将结束本批命令。(等同于RETURN语句的作用)

例如:以下语句完成功能是:有两个报表ME.REP和DATA.REP,报表ME.REP各个表页的A5单元取报表DATA.REP相应表页A5单元的数据,全部取完之后显示"本年度数据已全部取到。

OPEN REPORT "ME"    //打开报表"ME"
LET &MONTH=1   //给变量&MONTH赋初值为1
WHILE &MONTH<=12   //当变量&MONTH小于等于12时,执行下面语句
    IF &MONTH>MONTH()   //如果变量&MONTH大于系统时间的月
        DISPLAY"本年度数据已全部取到。"   //显示提示框"本年度数据已全部取到!"
        BREAK   //跳出WHILE循环
    END   //结束IF语句
    LET A5@&MONTH="DATA"->A5@&MONTH   //当前报表&MONTH表页的A5单元等于报表"DATA"相同表页的A5单元的值。
    LET &MONTH=&MONTH+1   //变量&MONTH加1,并回头执行WHILE语句
END   //结束WHILE语句

4)返回语句

格式:RETURN

运行结果:结束最近一层批命令。

例如:以下是一个寻找单位名称为“销售部”表页的批命令。

  1. LET &PAGE=1//给变量&PAGE赋初值为1
  2. WHILE &PAGE<=100//当变量&PAGE小于等于100时,执行下面语句;当变量&PAGE大于100时,执行WHILE循环外的第一条语句。
  3. SETPAGE&PAGE//把&PAGE表页设置为当前表页。
  4. IF 单位名称="销售部"//如果关键字单位名称的值为"销售部",则执行下面语句;如果关键字单位名称的值不为"销售部",则执行

&PAGE=&PAGE+1语句
DISPLAY"已找到销售部表页!"//显示提示框"已找到销售部表页!"
RETURN//结束本批命令

  1. END//结束IF语句
  2. &PAGE=&PAGE+1//变量&PAGE加1
  3. END//结束WHILE循环
  4. DISPLAY"未找到销售部表页!"//显示提示框"未找到销售部表页!"

4、函数UFO有58个函数

包括统计函数21个,数学函数12个,表操作辅助函数2个,日期函数7个,条件取值函数1个,读取数据库数据函数1个,指针状态类函数4个,字符处理函数7个,交互输入函数2个,文件函数1个。

在UFO中,“业务函数”154个,使用业务函数可以从《总账》《应收》《应付》等系统中提取数据。大部分函数既可以在编辑单元公式时使用,又可以在批命令中使用,但有一部分函数,如:本表他页取数函数、指针状态类函数、交互输入函数等只限用于批命令。当您在编辑单元公式时,您可以直接使用函数。如果您不愿意记忆一连串的名字、参数、括号等复杂格式,您可以使用“函数向导”按钮,在函数向导对话框的指导下一步一步完成函数的设置,并随时可以用F1键调出相关帮助。除数学函数、条件取值函数外其他函数均不允许嵌套使用。当您使用UFO的命令窗和程序编辑器时,您可以直接使用函数,您不需要完整记忆完整的函数格式,甚至不需记忆完整的函数名,只要您输入函数名的前几个字母,您就要以用F1调出相关函数的帮助信息。

注意:函数中使用到的字母和符号,如:函数名、括号(())、引号(“”)、逗号(,)、等号(=)等均为半角符号。

1)业务函数

A)总帐函数:

期初额函数:QC、sQC、wQC
期末额函数:QM、sQM、wQM
发生额函数:FS、sFS、wFS
累计发生额函数:LFS、sLFS、wLFS
条件发生额函数:TFS、sTFS、wTFS

〖参数说明〗科目缺省即求辅助项的发生额合计,此时〈核算类别〉参数不能缺省。合法的〈方向〉为“借”“贷”“j”“d”、、、。〈摘要匹配方式〉,模糊匹配用“=”,精确匹配用“==”。〈编码1〉与〈编码2〉与科目编码的核算账类有关。

〈核算类别〉只在〈科目编码〉缺省时有意义。〈项目大类名称〉只在〈科目编码〉缺省且〈核算类别〉含“项目”时有意义。

〖返回值〗数值型,返回指定科目某会计期间某方向符合某条件的发生额合计数。如果该会计科目带辅助核算账类,那么返回编码所对应的辅助项的累计发生额。

注意:

由于使用借贷记账法,〈方向〉为“借”或“贷”。

条件发生额函数的〈方向〉不能缺省。

如果您的科目有两种辅助核算,则这两个辅助项在公式中的排列位置必须正确,否则系统将无法正确结转。

五种辅助项在公式中先后顺序为:部门,个人,客户,供应商,项目。

例如:52101为某部门项目科目,则您可以输入QC(52101”“,月,“部门一”,“项目一”),而不可以输入QC(“52101”,月,“项目一”,“部门一”)。

若科目为非末级科目,则返回其所有下级科目的发生额之和。若其下级科目的发生额方向与公式中定义的方向不一致,则只返回发生额方向与公式定义方向一致的发生额之和。

对方科目发生额函数:DFS、sDFS、wDFS

净额函数:JE、sJE、wJE2)

统计函数

3)数学函数

SIN正弦函数
COS余弦函数
TAN正切函数
CTAN余切函数
ABS绝对值函数
INT取整函数
SQR平方根函数
LN自然对数函数
LOG常用对数函数
EXP指数函数
ROUND四舍五入函数
PAI圆周率函数

4)字符处理函数

LEN字符串长度函数
STR数值型值转换成字符型值
SUBSTR取子串函数
TRIM去空格函数
LOWER字符串转换为小写字母函数
UPPER字符串转换为大写字母函数
VAL字符串转换为数值型值

5)时间与日期函数

SECOND秒函数
MINUTE分函数
HOUR小时函数
DAY日期函数
MONTH月份函数
SEASON季度函数
YEAR年函数

6)表操作辅助函数

MRECNO页面号函数
SELECT本表他页取数函数

7)交互输入函数

GETINT窗口交互输入数值函数
GETSTR窗口交互输入字符函数

8)文件检测函数

〖函数格式〗FILE(“<文件名>”)

〖参数说明〗文件名:想要检测文件的文件名,必须加上扩展名,可以加上路径名,不能使用通配符“*”和“?”。默认为当前路径,可以为字符串或字符变量。

〖返回值〗若该文件存在,返回1;若该文件不存在,返回0。

〖使用范围〗批命令。〖范例〗若文件“aa.rep”存在,如下函数返回1;若文件“aa.rep”不存在,如下函数返回0。FILE(“aa.rep”)

9)指针状态类函数

MBOF页面头函数
MEOF页面尾函数
MNUMBER页面数函数
SNUMBER可变区大小函数

10)条件取数/赋值函数

条件取值函数

〖函数格式〗IFF(<逻辑表达式>,<条件真值>,<条件假值>)〖参数说明〗逻辑表达式:控制函数返回值的条件。条件真值:当条件为真时函数的返回值,为算术表达式。条件假值:当条件为假时函数的返回值,为算术表达式。

〖返回值〗当算术表达式为真时,返回条件真值,当算术表达式为假时,返回条件假值。

〖注释〗用于单元公式时不能使被赋值的区域与算术表达式中用到的区域重复,如:A3=IFF(A3>0,10,-10)是不对的。

11)读取数据库数据函数

〖函数格式〗
INDB(“<文件名>”,“<表名>”,<字段名>,<记录号>,[条件])

〖参数说明〗
文件名:数据库文件名,可以是ACCESS文件(*.mdb)、MSEXCEL文件(*.xls)、LOTUS1-2-3文件(*.wk4)、DBASE
数据库文件(*.dbf)、标准文本文件(*.txt)。
表名:对于ACCESS文件(*.mdb)、MSEXCEL文件(*.xls)、LOTUS1-2-3文件(*.wk4)来说,为数据表名;对于DBASE数据库文件(*.dbf)、标准文本文件(*.txt)来说,可以是空串(”。“)
字段名:对于ACCESS文件(*.mdb)、DBASE数据库文件(*.dbf)来说,为数据库字段名称;对于MSEXCEL文件(*.xls)、LOTUS1-2-3文件(*.wk4)、标准文本文件(*.txt)来说,是报表或文本的第一行某单元或某段,只能是一个字段或单元。
记录号:确定取符合条件的第几个记录(数据库)或第几行(电子表及文本),为正整数或正整数型变量。
条件:数据库记录筛选条件,与SQL语言的SELECT语句的WHERE子句规范一样。

〖返回值〗符合条件的指定数据库字段某个记录。

〖注释〗此函数一次只能读取一个数。

5、命令

1)状态转换命令

  • DESIGN进入格式状态命令
  • DATA进入数据状态命令

2)文件命令

  • NEW新建报表命令
  • OPEN打开文件命令
  • OPENREPORT打开报表命令
  • CLOSE关闭当前文件命令
  • CLOSEALL关闭全部打开的文件命令
  • SAVE保存文件命令SAVEAS另存为命令
  • COPYSTRUCTURETO格式拷贝命令
  • COPYTO复制文件命令

DO执行批命令命令

  • SETMENU执行自定义菜单命令
  • PRINT打印命令
  • EXIT退出UFO命令

3)格式命令

SIZE定义表尺寸命令

〖命令格式〗SIZE[<行数>][,<列数>]

〖参数说明〗行数:1—255之间的整数或变量,缺省时不改变原行数设置。列数:1—9999之间的整数或变量,缺省时不改变原行数设置。

〖运行状态〗格式状态。

HIGH定义行高命令

〖命令格式〗HIGH<区域>,<行高>

〖参数说明〗区域:不含页号和表名,不可用可变区相对表示法表示。行高:0—480之间的整数或变量,变量将自动取整。

〖运行状态〗格式状态。

WIDE定义列宽命令

〖命令格式〗WIDE<区域>,<列宽>

〖参数说明〗区域:不含页号和表名,不可用可变区相对表示法表示。列宽:0—640之间的整数或变量,变量将自动取整。

〖运行状态〗格式状态。

DRAW区域画线

〖命令格式〗DRAW<区域>[,<类型>][,<线型>]

〖参数说明〗区域:画线区域,不含页号和表名。类型:可以为以下字符,缺省为N,网线。N:网线;B:框线;H:竖线;V:横线;\:正斜线;/:反斜线。线型:可以为以下字符串,缺省为S1,细线。U:空线,即抹线;S1:细线;S2:粗线;S3:超粗线;D:虚线;LD:长虚线;D1:点划线;D2:双点划线。

〖运行状态〗格式状态。

〖注释〗画正反斜线时区域不能大于30行或30列。

TYPE定义单元类型

〖命令格式〗TYPE<区域>[,<类型>]

〖参数说明〗区域:不含页号和表名,不可用可变区相对表示法表示。类型:为以下字母,缺省为D,数值型。D:数值型;S:字符型;F:表样型。

〖运行状态〗格式状态。

VAREA定义可变区

〖命令格式〗格式1:VAREA[S],<可变区位置>[,<可变区大小>]格式2:VAREAU

〖参数说明〗S:标识符,表示设置可变区,可以缺省;U:标识符,表示取消可变区。可变区位置:用“!”或字母表示在某列设置列可变区,用“#”表示在某行设置行可变区。

可变区大小:可以为正整数和正整数型变量,缺省为1。〖运行状态〗格式状态。VARSIZE定义可变区大小〖命令格式〗VARSIZE<可变区大小>〖参数说明〗可变区大小:可以为正整数和正整数型变量。〖运行状态〗格式状态。〖注释〗使用此命令前应已设置了可变区。

4)数据命令

LET 赋值命令
APPEND FROM 数据采集命令
RECAL 重计算命令
CHECK 审核命令
RECHECK驱动审核命令
ROUND驱动舍位平衡命令
SORT表页排序命令
GSORT可变区排序命令
TOTAL报表汇总命令
GTOTAL可变区数据汇总命令
BROWSE多区域数据透视命令

5)编辑命令

APPEND追加表页命令
GAPPEND追加可变区命令
DELETE删除表页命令
GDELETE删除可变区命令
INSERT插入表页/行/列命令
EXCHANGE表页交换命令
CLEAR清除区域命令
FREE清除变量命令
SKIP翻页命令(一个UFO报表最多可容纳99,999张表页)
SETFOCUS设置当前区域命令
SETPAGE设置当前表页命令
FIND查找表页命令
GFIND查找可变区命令
CONTINUE继续上次查找命令

6)文本文件输入/输出命令

INTEXT读入文本文件命令
OUTTEXT输出文本文件命令

7)工具命令

SET SWITCH ON/OFF 提示框打开/关闭命令

〖命令格式〗SET SWITCH ON/OFF

〖参数说明〗

无参数。

〖运行状态〗

系统状态,格式状态,数据状态。〖注释〗ON:显示“是否重计算”提示框;显示COPYTO、TOTALTO命令提示框。OFF:不显示“是否重计算”提示框,自动计算;不显示COPYTO、TOTAL TO命令提示框。

PROTECT格式保护命令

UFOEDIT二次开发命令

DISPLAY窗口显示命令

LIST变量列表命令

MAIL传输命令

//注释命令

举例

练习1、

查找报表文件是否存在,报表名称及路径由用户交互输入。

LET&WJ=GETSTR(“请输入报表名称及路径”)
if file(&WJ)=0
    disp"该报表不存在!"
else
    disp"该报表存在!"
end

2、按照用户指定的月分,查找该月分的表页(置为当前页)。

sort on 月
let &y=getint(“请输入月份”)
let &y0=mrecn()
if 月<>val(subs(&y,1,2))
    find for月=val(subs(&y,1,2))
    let &y1=mrecn()
    if &y1=&y0
        disp"该月份的表页不存在!"
        close
        return
     else
        setpage &y1
    end
else
    setpage &y0
end

3、验证密码是否正确,密码保存在“pass.rep”文件的A2中,密码正确,则打开“head.rep”,三次输入错误,则退出。

open repo "pass.rep"
let &i=1
let &pass=a2
close
while &i<4
    let &kl=getstr("请输入密码:")
    if &kl=&pass
        open repo "head.rep"
        return
    end
    let &i=&i+1
end
if &i=4
    disp"你无权进入本系统!"
    exit
end

4、计算AA报表中每个表页的本年累计数单元的值。(e6:e30为发生额,d6:d30为累计数)

open repo "AA.rep"
Setpage 1
while
   meof()=0
    if 月<>1
        let e6:e30=d6:d30+"AA"->e6:e30rela月with"AA"->月+1,年with"AA"->年
    else
        let e6:e30=d6:d30
    end
    save
    skip 1
end

二、自定义菜单

自定义菜单是用户编写的,实现特定功能和操作流程的菜单,它可以取代系统菜单和报表菜单。功能菜单实现了对UFO功能的调用,即以用户编辑的菜单项目来调用UFO的功能。

菜单文件在UFO提供的二次开发窗口UFOEDIT中编写,编写完成后以后缀“.MNU”保存。在系统窗口或报表窗口中可以执行菜单文件,执行之后它将取代UFO的菜单。

1、自定义菜单的实现过程

  • 第一步点击[文件]菜单中的[二次开发],打开二次开发窗口“UFOEDIT”窗口。
  • 第二步在UFOEDIT窗口中新建一个菜单文件,分别输入菜单项的名字和要执行的命令,并保存菜单文件。
    注意:1)自定义菜单最多可以有3级,每一级菜单不能超过12个。
  • 第三步在系统窗口或报表窗口中都可以执行菜单文件。
  • 第四步在UFOEDIT窗口中可以打印自定义菜单和所执行命令的清单。


2、编辑菜单项

菜单项标题:在其中输入菜单的名字。菜单名字不能超过19个字符。

是否有下级菜单:如果此菜单有下拉菜单,则点击此多选钮。如果没有下拉菜单,则不点击。

请输入此菜单项要执行的命令:如果此菜单项没有下级菜单,即它是最后一级菜单,请在此框中输入此菜单项要执行的命令。如果此菜单项有下级菜单,此编辑框将变灰,不能输入任何内容。

状态栏说明:在其中输入此菜单项的说明文字。在执行此菜单文件时,当此菜单项被激活时,说明文字将显示在状态栏中。

点击“确认”按钮后,定义的菜单名字将显示在窗口中的自定义菜单栏中。把鼠标移动到自定义菜单栏上时,可以看到出现了下拉菜单,在下拉菜单中有一个绿色框,双击此框可以用相同的方法编辑下拉菜单。

附件说明
附件