一、概述
1.1 函数说明
TC和Task_Cell公式,俗称"跨任务取数公式",主要功能是取到某个表元的值。这两个公式可以,跨任务、跨期、在不同的报表户之间取数,还可以取到变长表中数据行、合计行表元的数据;这些特点都是形如"XXB->C3"这样的公式所做不到的。
1.2 前置假设
自本节以下,所有的示例全部基于本假设。
二、TC
2.1 函数声明
TC(OutCell, BBQ, ID)
参数 | 参数类型 | 意义 |
---|---|---|
OutCell | String | 由任务别名、报表名、表元名3部分合成,表示取某任务下的某个报表的某表元。 |
BBQ | String | 报表期字符串,表示要取哪一期的数据。 |
ID | String | 报表户代码,表示要取哪一户的数据。 |
2.2 参数详解
2.2.1 OutCell
该参数是一个字符串,被西文符号":"分隔成三个部分,分别表示:"关系任务名"、"报表代号"、"表元名"。如:"YB:B1:C5",表示取关系任务YB的B1->C5的值。
2.2.1.1 关系任务名
书写方式 | 意义 | 示例 | 示例含义 | 注意事项 |
---|---|---|---|---|
空 | 在本任务取数 | ":B1:C5" | 取本任务的B1->C5的值 | 第一个":"不能省略 |
关系任务名 | 从关系任务名所标识的任务取数 | "YB:B1:C5" | 取关系任务YB的B1->C5的值 | 关系任务可以在运行系统或设计系统的"关联任务"菜单中定义 |
2.2.1.2 报表代号
报表类型 | 书写方式 | 意义 | 示例 | 示例含义 |
---|---|---|---|---|
基本表 | 表名 | 取基本表某表元的值 | "YB:B1:C5" | 取关系任务YB的B1->C5的值 |
变长表 | 表名 | 直接取变长表的第一行,取不到则返回空,取的到则返回该行的表元值 | "YB:B2:C5" | 取关系任务YB的B2表第一行C5的值 |
变长表 | HJH@表名 | 取变长表合计行中表元的值 | "YB:HJH@B2:C5" | 取YB任务B2合计行C列的数据 |
变长表 | key1|key2|key3@表名 | 一个或多个关键字,由西文"|"符号分隔,对应变长表的各个关键字。 | "YB:1001|201@B2:C5" | 取YB任务B2表中 |
2.2.1.3 表元名
- 报表不为变长表,则直接写报表内的数据表元的表元名。
- 报表为变长表,则只能写变长区表元的表元名。合计行不属于变长区,要取合计行请参看上节。
2.2.2 ID
- 取当前户,ID直接为空串。
- 取指定户,ID书写为指定户的报表户代码。
2.2.3 BBQ
书写方式 | 意义 | 示例 | 示例意义 | |
---|---|---|---|---|
空串 | 取当前期 | TC(":B1:C5","","") | 取本任务,当前期,当前户 | |
报表期 | 取固定期 | TC(":B1:C5","200908--","") | 取2009年8月的数据 | |
@-X | 固定取前期,即,取当前期的前X期 | TC(":B1:C5","@-3","") | 取当前期的前三期 | |
pre | 以当前期为起点,向前寻找最近的存在的报表期 | TC(":B1:C5","pre","") |
| |
pre* | 在pre的基础上,若变长表无法取到行,或者基本表的目的表元值为空,则继续递归取上期,直到能取到值为止 | TC(":B1:C5","pre*","") | (在服务器上暂不支持此写法,在单机版上pre*与pre基本一致) |
2.3 注意事项
- TC公式只能取数字类型表元的值。
TC函数返回值为浮点型,这意味着一个表元一旦定义了TC公式,表元类型会自动修改为浮点型,因此TC只能取整型和浮点型表元的值(如取整型表元值,会转换为整数的浮点型数形式),要取其他类型表元的值,参照下面的Task_Cell函数。
2.4 常用例子
示例 | 说明 |
---|---|
TC(":B1:C5","","") | 取当前任务,当前期,当前户,B1->C5;等同于公式"B1->C5" |
TC("YB:B1:C5","","") | 取关系任务任务,当前期,当前户,B1->C5 |
三、Task_Cell
函数声明
Task_Cell(任务别名,RpfName,BBQ ,UserID,FieldName)
参数详解
任务别名是定义的关联任务中的别名,本任务用空串""替代。
RpfName是报表名称,如果是变长表,需要在报表名前面带上关键字或代码表元的值或表元名,再以"@"隔开。
BBQ为要取数的报表期,当前报表器用空串""替代。
UserID为要取数的报表户,当前报表户用空串""替代。
FieldName为要取数的那张报表的表元名,一般非空,用双引号引起来。
说明
Task_Cell是TC的前身,很多用法都是类似的。
例子
Task_Cell("", "1001@B0", "", "", B2) 表示取的是变长表B0中关键字值为1001的那行数据中B2表元的值。
Task_Cell("", A2^"@B0", "", "", "B2") 表示取的是变长表B0中关键字等于本表A2表元的值的那行变长表数据中B2表元的值。
四、其他说明(为什么有时TC取不到数?)
(1)服务器上,任务有属性"允许其它任务用TC函数取本任务数据",控制当前报表的数据是否可以被其他任务使用Task_Cell或者TC取到(是个充分条件),如果勾选此选项,其他任务可以使用TC或Task_Cell取到当前任务的数据,如果没有勾选此选项,但登陆用户有访问到TC或Task_Cell对应的关联任务的权限时,也可以使用TC或Task_Cell取到值,否则不能。即:
a)勾选"允许其他任务用TC函数取本任务数据"->可以用TC或Task_Cell取值。
b)不勾选"允许其他任务用TC函数取本任务数据"但登陆用户有访问关联任务权限时->可以用TC或Task_Cell取值。
当a)和b)都不满足时,不能用TC或Task_Cell取值。
(2)跨任务取数时,两个任务要有相同的单位代码长度(在设计系统的"默认值"->"单位代码长度"中设置),否则取不到其他任务的数据。
请先登录